1 package org.apache.continuum.buildagent.configuration;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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 }