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 java.io.File;
23  import java.io.FileInputStream;
24  import java.io.FileWriter;
25  import java.io.IOException;
26  import java.io.InputStreamReader;
27  
28  import org.apache.continuum.buildagent.model.ContinuumBuildAgentConfigurationModel;
29  import org.apache.continuum.buildagent.model.io.xpp3.ContinuumBuildAgentConfigurationModelXpp3Reader;
30  import org.apache.continuum.buildagent.model.io.xpp3.ContinuumBuildAgentConfigurationModelXpp3Writer;
31  import org.codehaus.plexus.util.IOUtil;
32  import org.codehaus.plexus.util.StringUtils;
33  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
34  import org.slf4j.Logger;
35  import org.slf4j.LoggerFactory;
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          throws BuildAgentConfigurationException
73      {
74          return generalBuildAgentConfiguration;
75      }
76  
77      public void reload()
78          throws BuildAgentConfigurationException
79      {
80          this.initialize();
81      }
82  
83      public void reload( File file )
84          throws BuildAgentConfigurationException
85      {
86          FileInputStream fis = null;
87          try
88          {
89              fis = new FileInputStream( file );
90              ContinuumBuildAgentConfigurationModelXpp3Reader configurationXpp3Reader =
91                  new ContinuumBuildAgentConfigurationModelXpp3Reader();
92              ContinuumBuildAgentConfigurationModel configuration =
93                  configurationXpp3Reader.read( new InputStreamReader( fis ) );
94  
95              this.generalBuildAgentConfiguration = new GeneralBuildAgentConfiguration();
96              if ( StringUtils.isNotEmpty( configuration.getBuildOutputDirectory() ) )
97              {
98                  this.generalBuildAgentConfiguration.setBuildOutputDirectory(
99                      new File( configuration.getBuildOutputDirectory() ) );
100             }
101             if ( StringUtils.isNotEmpty( configuration.getWorkingDirectory() ) )
102             {
103                 this.generalBuildAgentConfiguration.setWorkingDirectory(
104                     new File( configuration.getWorkingDirectory() ) );
105             }
106             this.generalBuildAgentConfiguration.setContinuumServerUrl( configuration.getContinuumServerUrl() );
107             this.generalBuildAgentConfiguration.setInstallations( configuration.getInstallations() );
108         }
109         catch ( IOException e )
110         {
111             log.error( e.getMessage(), e );
112             throw new BuildAgentConfigurationException( e.getMessage(), e );
113         }
114         catch ( XmlPullParserException e )
115         {
116             log.error( e.getMessage(), e );
117             throw new BuildAgentConfigurationException( e.getMessage(), e );
118         }
119         finally
120         {
121             if ( fis != null )
122             {
123                 IOUtil.close( fis );
124             }
125         }
126     }
127 
128     public void save()
129         throws BuildAgentConfigurationException
130     {
131         if ( !configurationFile.exists() )
132         {
133             configurationFile.getParentFile().mkdirs();
134         }
135         save( configurationFile );
136     }
137 
138     public void save( File file )
139         throws BuildAgentConfigurationException
140     {
141         try
142         {
143             ContinuumBuildAgentConfigurationModel configurationModel = new ContinuumBuildAgentConfigurationModel();
144             if ( this.generalBuildAgentConfiguration.getBuildOutputDirectory() != null )
145             {
146                 configurationModel.setBuildOutputDirectory(
147                     this.generalBuildAgentConfiguration.getBuildOutputDirectory().getPath() );
148             }
149             if ( this.generalBuildAgentConfiguration.getWorkingDirectory() != null )
150             {
151                 configurationModel.setWorkingDirectory(
152                     this.generalBuildAgentConfiguration.getWorkingDirectory().getPath() );
153             }
154             configurationModel.setContinuumServerUrl( this.generalBuildAgentConfiguration.getContinuumServerUrl() );
155             configurationModel.setInstallations( this.generalBuildAgentConfiguration.getInstallations() );
156 
157             ContinuumBuildAgentConfigurationModelXpp3Writer writer =
158                 new ContinuumBuildAgentConfigurationModelXpp3Writer();
159             FileWriter fileWriter = new FileWriter( file );
160             writer.write( fileWriter, configurationModel );
161             fileWriter.flush();
162             fileWriter.close();
163         }
164         catch ( IOException e )
165         {
166             log.error( e.getMessage(), e );
167             throw new BuildAgentConfigurationException( e.getMessage(), e );
168         }
169     }
170 
171     public void setContinuumBuildAgentConfiguration( GeneralBuildAgentConfiguration buildAgentConfiguration )
172         throws BuildAgentConfigurationException
173     {
174         this.generalBuildAgentConfiguration = buildAgentConfiguration;
175     }
176 
177     public File getConfigurationFile()
178     {
179         return configurationFile;
180     }
181 
182     public void setConfigurationFile( File configurationFile )
183     {
184         this.configurationFile = configurationFile;
185     }
186 }