1 package org.apache.continuum.configuration;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.commons.lang.StringUtils;
23 import org.apache.continuum.configuration.model.ContinuumConfigurationModel;
24 import org.apache.continuum.configuration.model.io.xpp3.ContinuumConfigurationModelXpp3Reader;
25 import org.apache.continuum.configuration.model.io.xpp3.ContinuumConfigurationModelXpp3Writer;
26 import org.codehaus.plexus.util.IOUtil;
27 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 import java.io.File;
32 import java.io.FileInputStream;
33 import java.io.FileWriter;
34 import java.io.IOException;
35 import java.io.InputStreamReader;
36 import java.util.ArrayList;
37 import java.util.List;
38
39
40
41
42
43
44 public class DefaultContinuumConfiguration
45 implements ContinuumConfiguration
46 {
47 private static final Logger log = LoggerFactory.getLogger( DefaultContinuumConfiguration.class );
48
49 private File configurationFile;
50
51 private GeneralConfiguration generalConfiguration;
52
53 public static final String CONFIGURATION_FILE = "continuum.xml";
54
55
56
57
58
59 protected void initialize()
60 {
61 if ( log.isDebugEnabled() )
62 {
63 log.debug( "configurationFile null " + ( configurationFile.getPath() == null ) );
64 }
65 if ( configurationFile != null && configurationFile.exists() )
66 {
67 try
68 {
69 reload( configurationFile );
70 }
71 catch ( ContinuumConfigurationException e )
72 {
73
74 log.warn( " error on loading configuration from file " + configurationFile.getPath() );
75 }
76 }
77 else
78 {
79 log.info( "configuration file not exists" );
80 this.generalConfiguration = new GeneralConfiguration();
81 }
82 }
83
84 public void reload()
85 throws ContinuumConfigurationException
86 {
87 this.initialize();
88 }
89
90 public void save()
91 throws ContinuumConfigurationException
92 {
93 if ( !configurationFile.exists() )
94 {
95 configurationFile.getParentFile().mkdirs();
96 }
97 save( configurationFile );
98 }
99
100
101
102
103 public GeneralConfiguration getGeneralConfiguration()
104 throws ContinuumConfigurationException
105 {
106 return this.generalConfiguration;
107 }
108
109 public void setGeneralConfiguration( GeneralConfiguration generalConfiguration )
110 throws ContinuumConfigurationException
111 {
112 this.generalConfiguration = generalConfiguration;
113 }
114
115 public void reload( File file )
116 throws ContinuumConfigurationException
117 {
118 FileInputStream fis = null;
119 try
120 {
121 fis = new FileInputStream( file );
122 ContinuumConfigurationModelXpp3Reader configurationXpp3Reader = new ContinuumConfigurationModelXpp3Reader();
123 ContinuumConfigurationModel configuration = configurationXpp3Reader.read( new InputStreamReader( fis ) );
124
125 this.generalConfiguration = new GeneralConfiguration();
126
127 this.generalConfiguration.setNumberOfBuildsInParallel( configuration.getNumberOfBuildsInParallel() );
128 this.generalConfiguration.setBaseUrl( configuration.getBaseUrl() );
129 this.generalConfiguration.setSharedSecretPassword( configuration.getSharedSecretPassword() );
130
131 if ( StringUtils.isNotEmpty( configuration.getBuildOutputDirectory() ) )
132 {
133
134 this.generalConfiguration.setBuildOutputDirectory( new File(
135 configuration.getBuildOutputDirectory() ) );
136 }
137 if ( StringUtils.isNotEmpty( configuration.getDeploymentRepositoryDirectory() ) )
138 {
139
140 this.generalConfiguration.setDeploymentRepositoryDirectory( new File(
141 configuration.getDeploymentRepositoryDirectory() ) );
142 }
143 if ( StringUtils.isNotEmpty( configuration.getWorkingDirectory() ) )
144 {
145
146 this.generalConfiguration.setWorkingDirectory( new File( configuration.getWorkingDirectory() ) );
147 }
148 if ( configuration.getProxyConfiguration() != null )
149 {
150 ProxyConfiguration proxyConfiguration = new ProxyConfiguration(
151 configuration.getProxyConfiguration().getProxyHost(),
152 configuration.getProxyConfiguration().getProxyPassword(),
153 configuration.getProxyConfiguration().getProxyPort(),
154 configuration.getProxyConfiguration().getProxyUser() );
155 this.generalConfiguration.setProxyConfiguration( proxyConfiguration );
156 }
157 if ( StringUtils.isNotEmpty( configuration.getReleaseOutputDirectory() ) )
158 {
159
160 this.generalConfiguration.setReleaseOutputDirectory( new File(
161 configuration.getReleaseOutputDirectory() ) );
162 }
163
164
165 this.generalConfiguration.setDistributedBuildEnabled( configuration.isDistributedBuildEnabled() );
166
167 this.generalConfiguration.setInitialized( configuration.isInitialized() );
168
169 if ( configuration.getBuildAgents() != null )
170 {
171 List<BuildAgentConfiguration> buildAgents = new ArrayList<BuildAgentConfiguration>();
172
173 List<org.apache.continuum.configuration.model.BuildAgentConfiguration> agents =
174 configuration.getBuildAgents();
175 for ( org.apache.continuum.configuration.model.BuildAgentConfiguration agent : agents )
176 {
177 BuildAgentConfiguration buildAgent = new BuildAgentConfiguration( agent.getUrl(),
178 agent.getDescription(),
179 agent.isEnabled() );
180 buildAgents.add( buildAgent );
181 }
182
183 this.generalConfiguration.setBuildAgents( buildAgents );
184 }
185 if ( configuration.getBuildAgentGroups() != null )
186 {
187 List<BuildAgentGroupConfiguration> buildAgentGroups = new ArrayList<BuildAgentGroupConfiguration>();
188 List<org.apache.continuum.configuration.model.BuildAgentGroupConfiguration> groups =
189 configuration.getBuildAgentGroups();
190
191 for ( org.apache.continuum.configuration.model.BuildAgentGroupConfiguration group : groups )
192 {
193 List<BuildAgentConfiguration> agents = new ArrayList<BuildAgentConfiguration>();
194 List<org.apache.continuum.configuration.model.BuildAgentConfiguration> modelAgents =
195 group.getBuildAgents();
196 for ( org.apache.continuum.configuration.model.BuildAgentConfiguration modelAgent : modelAgents )
197 {
198 BuildAgentConfiguration buildAgent = new BuildAgentConfiguration( modelAgent.getUrl(),
199 modelAgent.getDescription(),
200 modelAgent.isEnabled() );
201 agents.add( buildAgent );
202 }
203
204 BuildAgentGroupConfiguration groupAgent = new BuildAgentGroupConfiguration( group.getName(),
205 agents );
206 buildAgentGroups.add( groupAgent );
207 }
208
209 this.generalConfiguration.setBuildAgentGroups( buildAgentGroups );
210 }
211 }
212 catch ( IOException e )
213 {
214 log.error( e.getMessage(), e );
215 throw new RuntimeException( e.getMessage(), e );
216 }
217 catch ( XmlPullParserException e )
218 {
219 log.error( e.getMessage(), e );
220 throw new RuntimeException( e.getMessage(), e );
221 }
222 finally
223 {
224 if ( fis != null )
225 {
226 IOUtil.close( fis );
227 }
228 }
229 }
230
231 public void save( File file )
232 throws ContinuumConfigurationException
233 {
234 try
235 {
236 ContinuumConfigurationModel configurationModel = new ContinuumConfigurationModel();
237 configurationModel.setBaseUrl( this.generalConfiguration.getBaseUrl() );
238 configurationModel.setNumberOfBuildsInParallel( this.generalConfiguration.getNumberOfBuildsInParallel() );
239 configurationModel.setSharedSecretPassword( this.generalConfiguration.getSharedSecretPassword() );
240
241
242 if ( this.generalConfiguration.getBuildOutputDirectory() != null )
243 {
244 configurationModel.setBuildOutputDirectory(
245 this.generalConfiguration.getBuildOutputDirectory().getPath() );
246 }
247 if ( this.generalConfiguration.getWorkingDirectory() != null )
248 {
249 configurationModel.setWorkingDirectory( this.generalConfiguration.getWorkingDirectory().getPath() );
250 }
251 if ( this.generalConfiguration.getDeploymentRepositoryDirectory() != null )
252 {
253 configurationModel.setDeploymentRepositoryDirectory(
254 this.generalConfiguration.getDeploymentRepositoryDirectory().getPath() );
255 }
256 if ( this.generalConfiguration.getProxyConfiguration() != null )
257 {
258 configurationModel.setProxyConfiguration(
259 new org.apache.continuum.configuration.model.ProxyConfiguration() );
260 configurationModel.getProxyConfiguration().setProxyHost(
261 this.generalConfiguration.getProxyConfiguration().getProxyHost() );
262 configurationModel.getProxyConfiguration().setProxyPassword(
263 this.generalConfiguration.getProxyConfiguration().getProxyPassword() );
264 configurationModel.getProxyConfiguration().setProxyPort(
265 this.generalConfiguration.getProxyConfiguration().getProxyPort() );
266 configurationModel.getProxyConfiguration().setProxyHost(
267 this.generalConfiguration.getProxyConfiguration().getProxyHost() );
268 }
269 if ( this.generalConfiguration.getReleaseOutputDirectory() != null )
270 {
271 configurationModel.setReleaseOutputDirectory(
272 this.generalConfiguration.getReleaseOutputDirectory().getPath() );
273 }
274
275
276 configurationModel.setDistributedBuildEnabled( this.generalConfiguration.isDistributedBuildEnabled() );
277
278 configurationModel.setInitialized( this.generalConfiguration.isInitialized() );
279
280 if ( this.generalConfiguration.getBuildAgents() != null )
281 {
282 List<org.apache.continuum.configuration.model.BuildAgentConfiguration> buildAgents =
283 new ArrayList<org.apache.continuum.configuration.model.BuildAgentConfiguration>();
284
285 for ( BuildAgentConfiguration agent : this.generalConfiguration.getBuildAgents() )
286 {
287 org.apache.continuum.configuration.model.BuildAgentConfiguration buildAgent =
288 new org.apache.continuum.configuration.model.BuildAgentConfiguration();
289 buildAgent.setUrl( agent.getUrl() );
290 buildAgent.setDescription( agent.getDescription() );
291 buildAgent.setEnabled( agent.isEnabled() );
292
293 buildAgents.add( buildAgent );
294 }
295 configurationModel.setBuildAgents( buildAgents );
296 }
297 if ( this.generalConfiguration.getBuildAgentGroups() != null )
298 {
299 List<org.apache.continuum.configuration.model.BuildAgentGroupConfiguration> buildAgentGroups =
300 new ArrayList<org.apache.continuum.configuration.model.BuildAgentGroupConfiguration>();
301
302 for ( BuildAgentGroupConfiguration group : this.generalConfiguration.getBuildAgentGroups() )
303 {
304 org.apache.continuum.configuration.model.BuildAgentGroupConfiguration buildAgentGroup =
305 new org.apache.continuum.configuration.model.BuildAgentGroupConfiguration();
306 buildAgentGroup.setName( group.getName() );
307
308 List<org.apache.continuum.configuration.model.BuildAgentConfiguration> buildAgents =
309 new ArrayList<org.apache.continuum.configuration.model.BuildAgentConfiguration>();
310
311 if ( group.getBuildAgents() != null )
312 {
313 for ( BuildAgentConfiguration agent : group.getBuildAgents() )
314 {
315 org.apache.continuum.configuration.model.BuildAgentConfiguration buildAgent =
316 new org.apache.continuum.configuration.model.BuildAgentConfiguration();
317 buildAgent.setUrl( agent.getUrl() );
318 buildAgent.setDescription( agent.getDescription() );
319 buildAgent.setEnabled( agent.isEnabled() );
320
321 buildAgents.add( buildAgent );
322 }
323
324 buildAgentGroup.setBuildAgents( buildAgents );
325 }
326
327 buildAgentGroups.add( buildAgentGroup );
328 }
329 configurationModel.setBuildAgentGroups( buildAgentGroups );
330 }
331
332 ContinuumConfigurationModelXpp3Writer writer = new ContinuumConfigurationModelXpp3Writer();
333 FileWriter fileWriter = new FileWriter( file );
334 writer.write( fileWriter, configurationModel );
335 fileWriter.flush();
336 fileWriter.close();
337 }
338 catch ( IOException e )
339 {
340 throw new ContinuumConfigurationException( e.getMessage(), e );
341 }
342
343 }
344
345
346
347
348
349
350 public File getConfigurationFile()
351 {
352 return configurationFile;
353 }
354
355 public void setConfigurationFile( File configurationFile )
356 {
357 this.configurationFile = configurationFile;
358 }
359
360 }