001 /**
002 * Copyright 2005 The Apache Software Foundation
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
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.Maven2Repository;
041
042 /**
043 * @version $Rev: 437254 $ $Date: 2006-08-26 17:07:55 -0700 (Sat, 26 Aug 2006) $
044 */
045 public class PluginBootstrap2 {
046 private File localRepo;
047 private File plan;
048 private File buildDir;
049 private File carFile;
050 private boolean expanded;
051
052 public void setLocalRepo(File localRepo) {
053 this.localRepo = localRepo;
054 }
055
056 public void setPlan(File plan) {
057 this.plan = plan;
058 }
059
060 public void setBuildDir(File buildDir) {
061 this.buildDir = buildDir;
062 }
063
064 public void setCarFile(File carFile) {
065 this.carFile = carFile;
066 }
067
068 public void setExpanded(final boolean expanded) {
069 this.expanded = expanded;
070 }
071
072 public void bootstrap() throws Exception {
073 System.out.println("Packaging module configuration: " + plan);
074
075 ModuleType config = ModuleDocument.Factory.parse(plan).getModule();
076
077 Maven2Repository repository = new Maven2Repository(localRepo);
078 GBeanBuilder gBeanBuilder = new GBeanBuilder(null, null);
079 ServiceConfigBuilder builder = new ServiceConfigBuilder(null, Collections.singleton(repository), Collections.singleton(gBeanBuilder), new Jsr77Naming());
080 ConfigurationStore targetConfigurationStore = new NullConfigurationStore() {
081 public File createNewConfigurationDir(Artifact configId) throws ConfigurationAlreadyExistsException {
082 return buildDir;
083 }
084 };
085
086 ArtifactManager artifactManager = new DefaultArtifactManager();
087 ArtifactResolver artifactResolver = new DefaultArtifactResolver(artifactManager, Collections.singleton(repository), null);
088 DeploymentContext context = builder.buildConfiguration(
089 false,
090 builder.getConfigurationID(config, null, new ModuleIDBuilder()),
091 config,
092 null,
093 Collections.singleton(targetConfigurationStore),
094 artifactResolver,
095 targetConfigurationStore);
096
097 ConfigurationData configurationData = context.getConfigurationData();
098
099 try {
100 writeConfiguration(configurationData);
101 }
102 finally {
103 context.close();
104 }
105 }
106
107 private void writeConfiguration(final ConfigurationData configurationData) throws IOException {
108 if (expanded) {
109 ExecutableConfigurationUtil.writeConfiguration(configurationData, carFile);
110 }
111 else {
112 JarOutputStream out = null;
113 try {
114 out = new JarOutputStream(new FileOutputStream(carFile));
115 ExecutableConfigurationUtil.writeConfiguration(configurationData, out);
116 out.flush();
117 }
118 finally {
119 if (out != null) {
120 try {
121 out.close();
122 }
123 catch (IOException ignored) {
124 // ignored
125 }
126 }
127 }
128 }
129 }
130 }