001 /** 002 * 003 * Copyright 2005 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.deployment; 018 019 import java.io.File; 020 import java.io.FileOutputStream; 021 import java.io.IOException; 022 import java.util.Collections; 023 import java.util.jar.JarOutputStream; 024 025 import org.apache.geronimo.deployment.service.ServiceConfigBuilder; 026 import org.apache.geronimo.deployment.service.GBeanBuilder; 027 import org.apache.geronimo.deployment.xbeans.ModuleDocument; 028 import org.apache.geronimo.deployment.xbeans.ModuleType; 029 import org.apache.geronimo.kernel.Jsr77Naming; 030 import org.apache.geronimo.kernel.config.ConfigurationAlreadyExistsException; 031 import org.apache.geronimo.kernel.config.ConfigurationData; 032 import org.apache.geronimo.kernel.config.ConfigurationStore; 033 import org.apache.geronimo.kernel.config.NullConfigurationStore; 034 import org.apache.geronimo.kernel.repository.Artifact; 035 import org.apache.geronimo.kernel.repository.ArtifactManager; 036 import org.apache.geronimo.kernel.repository.DefaultArtifactManager; 037 import org.apache.geronimo.kernel.repository.ArtifactResolver; 038 import org.apache.geronimo.kernel.repository.DefaultArtifactResolver; 039 import org.apache.geronimo.system.configuration.ExecutableConfigurationUtil; 040 import org.apache.geronimo.system.repository.Maven1Repository; 041 042 /** 043 * @version $Rev: 432510 $ $Date: 2006-08-18 00:44:04 -0700 (Fri, 18 Aug 2006) $ 044 */ 045 public class PluginBootstrap { 046 private File localRepo; 047 private File plan; 048 private File buildDir; 049 private File carFile; 050 051 public void setLocalRepo(File localRepo) { 052 this.localRepo = localRepo; 053 } 054 055 public void setPlan(File plan) { 056 this.plan = plan; 057 } 058 059 public void setBuildDir(File buildDir) { 060 this.buildDir = buildDir; 061 } 062 063 public void setCarFile(File carFile) { 064 this.carFile = carFile; 065 } 066 067 public void bootstrap() throws Exception { 068 System.out.println(); 069 System.out.println(" Packaging configuration " + plan); 070 System.out.println(); 071 072 ModuleType config = ModuleDocument.Factory.parse(plan).getModule(); 073 074 Maven1Repository repository = new Maven1Repository(localRepo); 075 GBeanBuilder gBeanBuilder = new GBeanBuilder(null, null); 076 ServiceConfigBuilder builder = new ServiceConfigBuilder(null, Collections.singleton(repository), Collections.singleton(gBeanBuilder), new Jsr77Naming()); 077 ConfigurationStore targetConfigurationStore = new NullConfigurationStore() { 078 public File createNewConfigurationDir(Artifact configId) throws ConfigurationAlreadyExistsException { 079 return buildDir; 080 } 081 }; 082 083 ArtifactManager artifactManager = new DefaultArtifactManager(); 084 ArtifactResolver artifactResolver = new DefaultArtifactResolver(artifactManager, Collections.singleton(repository), null); 085 DeploymentContext context = builder.buildConfiguration(false, builder.getConfigurationID(config, null, new ModuleIDBuilder()), config, null, Collections.singleton(targetConfigurationStore), artifactResolver, targetConfigurationStore); 086 JarOutputStream out = null; 087 try { 088 ConfigurationData configurationData = context.getConfigurationData(); 089 out = new JarOutputStream(new FileOutputStream(carFile)); 090 ExecutableConfigurationUtil.writeConfiguration(configurationData, out); 091 out.flush(); 092 } finally { 093 if (out != null) 094 { 095 try { 096 out.close(); 097 } catch (IOException ignored) { 098 // ignored 099 } 100 } 101 if (context != null) 102 context.close(); 103 } 104 } 105 }