View Javadoc

1   package org.apache.continuum.configuration;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @author <a href="mailto:olamy@apache.org">olamy</a>
41   * @version $Id: DefaultContinuumConfiguration.java 1412760 2012-11-23 06:28:56Z brett $
42   * @since 17 juin 2008
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      //  Initialize method configured in the Spring xml 
57      //   configuration file
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                  // skip this and only log a warn
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      * @see org.apache.continuum.configuration.ContinuumConfiguration#getGeneralConfiguration()
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                 // TODO take care if file exists ?
134                 this.generalConfiguration.setBuildOutputDirectory( new File(
135                     configuration.getBuildOutputDirectory() ) );
136             }
137             if ( StringUtils.isNotEmpty( configuration.getDeploymentRepositoryDirectory() ) )
138             {
139                 // TODO take care if file exists ?
140                 this.generalConfiguration.setDeploymentRepositoryDirectory( new File(
141                     configuration.getDeploymentRepositoryDirectory() ) );
142             }
143             if ( StringUtils.isNotEmpty( configuration.getWorkingDirectory() ) )
144             {
145                 // TODO take care if file exists ?
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                 // TODO take care if file exists?
160                 this.generalConfiguration.setReleaseOutputDirectory( new File(
161                     configuration.getReleaseOutputDirectory() ) );
162             }
163 
164             // set the configuration for diistributedBuildEnabled
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             // normally not null but NPE free is better !
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             // set configuration for distributedBuildEnabled.
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     //  Spring injection
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 }