View Javadoc

1   package org.apache.continuum.buildagent.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.continuum.buildagent.model.ContinuumBuildAgentConfigurationModel;
23  import org.apache.continuum.buildagent.model.io.xpp3.ContinuumBuildAgentConfigurationModelXpp3Reader;
24  import org.apache.continuum.buildagent.model.io.xpp3.ContinuumBuildAgentConfigurationModelXpp3Writer;
25  import org.codehaus.plexus.util.IOUtil;
26  import org.codehaus.plexus.util.StringUtils;
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  
37  public class DefaultBuildAgentConfiguration
38      implements BuildAgentConfiguration
39  {
40      private static final Logger log = LoggerFactory.getLogger( DefaultBuildAgentConfiguration.class );
41  
42      private File configurationFile;
43  
44      private GeneralBuildAgentConfiguration generalBuildAgentConfiguration;
45  
46      protected void initialize()
47      {
48          if ( log.isDebugEnabled() )
49          {
50              log.debug( "configurationFile null " + ( configurationFile.getPath() == null ) );
51          }
52          if ( configurationFile != null && configurationFile.exists() )
53          {
54              try
55              {
56                  reload( configurationFile );
57              }
58              catch ( BuildAgentConfigurationException e )
59              {
60                  // skip this and only log a warn
61                  log.warn( " error on loading configuration from file " + configurationFile.getPath() );
62              }
63          }
64          else
65          {
66              log.info( "build agent configuration file does not exists" );
67              this.generalBuildAgentConfiguration = new GeneralBuildAgentConfiguration();
68          }
69      }
70  
71      public GeneralBuildAgentConfiguration getContinuumBuildAgentConfiguration()
72      {
73          return generalBuildAgentConfiguration;
74      }
75  
76      public void reload()
77          throws BuildAgentConfigurationException
78      {
79          this.initialize();
80      }
81  
82      public void reload( File file )
83          throws BuildAgentConfigurationException
84      {
85          FileInputStream fis = null;
86          try
87          {
88              fis = new FileInputStream( file );
89              ContinuumBuildAgentConfigurationModelXpp3Reader configurationXpp3Reader =
90                  new ContinuumBuildAgentConfigurationModelXpp3Reader();
91              ContinuumBuildAgentConfigurationModel configuration = configurationXpp3Reader.read( new InputStreamReader(
92                  fis ) );
93  
94              this.generalBuildAgentConfiguration = new GeneralBuildAgentConfiguration();
95              if ( StringUtils.isNotEmpty( configuration.getBuildOutputDirectory() ) )
96              {
97                  this.generalBuildAgentConfiguration.setBuildOutputDirectory( new File(
98                      configuration.getBuildOutputDirectory() ) );
99              }
100             if ( StringUtils.isNotEmpty( configuration.getWorkingDirectory() ) )
101             {
102                 this.generalBuildAgentConfiguration.setWorkingDirectory( new File(
103                     configuration.getWorkingDirectory() ) );
104             }
105 
106             this.generalBuildAgentConfiguration.setContinuumServerUrl( configuration.getContinuumServerUrl() );
107             this.generalBuildAgentConfiguration.setInstallations( configuration.getInstallations() );
108             this.generalBuildAgentConfiguration.setLocalRepositories( configuration.getLocalRepositories() );
109             this.generalBuildAgentConfiguration.setSharedSecretPassword( configuration.getSharedSecretPassword() );
110         }
111         catch ( IOException e )
112         {
113             log.error( e.getMessage(), e );
114             throw new BuildAgentConfigurationException( e.getMessage(), e );
115         }
116         catch ( XmlPullParserException e )
117         {
118             log.error( e.getMessage(), e );
119             throw new BuildAgentConfigurationException( e.getMessage(), e );
120         }
121         finally
122         {
123             if ( fis != null )
124             {
125                 IOUtil.close( fis );
126             }
127         }
128     }
129 
130     public void save()
131         throws BuildAgentConfigurationException
132     {
133         if ( !configurationFile.exists() )
134         {
135             configurationFile.getParentFile().mkdirs();
136         }
137         save( configurationFile );
138     }
139 
140     public void save( File file )
141         throws BuildAgentConfigurationException
142     {
143         try
144         {
145             ContinuumBuildAgentConfigurationModel configurationModel = new ContinuumBuildAgentConfigurationModel();
146             if ( this.generalBuildAgentConfiguration.getBuildOutputDirectory() != null )
147             {
148                 configurationModel.setBuildOutputDirectory(
149                     this.generalBuildAgentConfiguration.getBuildOutputDirectory().getPath() );
150             }
151             if ( this.generalBuildAgentConfiguration.getWorkingDirectory() != null )
152             {
153                 configurationModel.setWorkingDirectory(
154                     this.generalBuildAgentConfiguration.getWorkingDirectory().getPath() );
155             }
156             configurationModel.setContinuumServerUrl( this.generalBuildAgentConfiguration.getContinuumServerUrl() );
157             configurationModel.setInstallations( this.generalBuildAgentConfiguration.getInstallations() );
158             configurationModel.setLocalRepositories( this.generalBuildAgentConfiguration.getLocalRepositories() );
159             configurationModel.setSharedSecretPassword( this.generalBuildAgentConfiguration.getSharedSecretPassword() );
160 
161             ContinuumBuildAgentConfigurationModelXpp3Writer writer =
162                 new ContinuumBuildAgentConfigurationModelXpp3Writer();
163             FileWriter fileWriter = new FileWriter( file );
164             writer.write( fileWriter, configurationModel );
165             fileWriter.flush();
166             fileWriter.close();
167         }
168         catch ( IOException e )
169         {
170             log.error( e.getMessage(), e );
171             throw new BuildAgentConfigurationException( e.getMessage(), e );
172         }
173     }
174 
175     public void setContinuumBuildAgentConfiguration( GeneralBuildAgentConfiguration buildAgentConfiguration )
176     {
177         this.generalBuildAgentConfiguration = buildAgentConfiguration;
178     }
179 
180     public File getConfigurationFile()
181     {
182         return configurationFile;
183     }
184 
185     public void setConfigurationFile( File configurationFile )
186     {
187         this.configurationFile = configurationFile;
188     }
189 }