1 package org.apache.maven.continuum.web.action.admin;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import com.opensymphony.xwork2.Preparable;
23 import org.apache.continuum.configuration.ContinuumConfigurationException;
24 import org.apache.maven.continuum.configuration.ConfigurationService;
25 import org.apache.maven.continuum.configuration.ConfigurationStoringException;
26 import org.apache.maven.continuum.security.ContinuumRoleConstants;
27 import org.apache.maven.continuum.store.ContinuumStoreException;
28 import org.apache.maven.continuum.web.action.ContinuumActionSupport;
29 import org.apache.struts2.ServletActionContext;
30 import org.codehaus.plexus.redback.rbac.Resource;
31 import org.codehaus.plexus.util.StringUtils;
32 import org.codehaus.redback.integration.interceptor.SecureAction;
33 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
34 import org.codehaus.redback.integration.interceptor.SecureActionException;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 import java.io.File;
39 import javax.servlet.http.HttpServletRequest;
40
41
42
43
44
45
46 public class ConfigurationAction
47 extends ContinuumActionSupport
48 implements Preparable, SecureAction
49 {
50 private static final Logger logger = LoggerFactory.getLogger( ConfigurationAction.class );
51
52 private String workingDirectory;
53
54 private String buildOutputDirectory;
55
56 private String deploymentRepositoryDirectory;
57
58 private String baseUrl;
59
60 private String releaseOutputDirectory;
61
62 private int numberOfAllowedBuildsinParallel = 1;
63
64 private boolean requireReleaseOutput;
65
66 private boolean distributedBuildEnabled;
67
68 private String sharedSecretPassword;
69
70 public void prepare()
71 {
72 ConfigurationService configuration = getContinuum().getConfiguration();
73
74 File workingDirectoryFile = configuration.getWorkingDirectory();
75 if ( workingDirectoryFile != null )
76 {
77 workingDirectory = workingDirectoryFile.getAbsolutePath();
78 }
79
80 File buildOutputDirectoryFile = configuration.getBuildOutputDirectory();
81 if ( buildOutputDirectoryFile != null )
82 {
83 buildOutputDirectory = buildOutputDirectoryFile.getAbsolutePath();
84 }
85
86 File deploymentRepositoryDirectoryFile = configuration.getDeploymentRepositoryDirectory();
87 if ( deploymentRepositoryDirectoryFile != null )
88 {
89 deploymentRepositoryDirectory = deploymentRepositoryDirectoryFile.getAbsolutePath();
90 }
91
92 baseUrl = configuration.getUrl();
93
94 if ( StringUtils.isEmpty( baseUrl ) )
95 {
96 HttpServletRequest request = ServletActionContext.getRequest();
97 baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() +
98 request.getContextPath();
99 logger.info( "baseUrl='" + baseUrl + "'" );
100 }
101
102 File releaseOutputDirectoryFile = configuration.getReleaseOutputDirectory();
103 if ( releaseOutputDirectoryFile != null )
104 {
105 releaseOutputDirectory = releaseOutputDirectoryFile.getAbsolutePath();
106 }
107
108 numberOfAllowedBuildsinParallel = configuration.getNumberOfBuildsInParallel();
109
110 if ( numberOfAllowedBuildsinParallel == 0 )
111 {
112 numberOfAllowedBuildsinParallel = 1;
113 }
114
115 String requireRelease = ServletActionContext.getRequest().getParameter( "requireReleaseOutput" );
116 setRequireReleaseOutput( Boolean.valueOf( requireRelease ) );
117
118 distributedBuildEnabled = configuration.isDistributedBuildEnabled();
119
120 sharedSecretPassword = configuration.getSharedSecretPassword();
121 }
122
123 public String input()
124 {
125 if ( isRequireReleaseOutput() )
126 {
127 addActionError( getText( "configuration.releaseOutputDirectory.required" ) );
128 }
129
130 if ( numberOfAllowedBuildsinParallel <= 0 )
131 {
132 addActionError( getText( "configuration.numberOfBuildsInParallel.invalid" ) );
133 }
134
135 return INPUT;
136 }
137
138 public String save()
139 throws ConfigurationStoringException, ContinuumStoreException, ContinuumConfigurationException
140 {
141 if ( numberOfAllowedBuildsinParallel <= 0 )
142 {
143 addActionError( "Number of Allowed Builds in Parallel must be greater than zero." );
144 return ERROR;
145 }
146
147 ConfigurationService configuration = getContinuum().getConfiguration();
148
149 configuration.setWorkingDirectory( new File( workingDirectory ) );
150
151 configuration.setBuildOutputDirectory( new File( buildOutputDirectory ) );
152
153 configuration.setNumberOfBuildsInParallel( numberOfAllowedBuildsinParallel );
154
155 if ( StringUtils.isNotEmpty( deploymentRepositoryDirectory ) )
156 {
157 configuration.setDeploymentRepositoryDirectory( new File( deploymentRepositoryDirectory ) );
158 }
159 else
160 {
161 configuration.setDeploymentRepositoryDirectory( null );
162 }
163
164 configuration.setUrl( baseUrl );
165
166 configuration.setInitialized( true );
167
168 if ( StringUtils.isNotEmpty( releaseOutputDirectory ) )
169 {
170 configuration.setReleaseOutputDirectory( new File( releaseOutputDirectory ) );
171 }
172 else if ( isRequireReleaseOutput() )
173 {
174 addActionError( getText( "configuration.releaseOutputDirectory.required" ) );
175 return ERROR;
176 }
177 else
178 {
179 configuration.setReleaseOutputDirectory( null );
180 }
181
182 configuration.setDistributedBuildEnabled( distributedBuildEnabled );
183
184 configuration.setSharedSecretPassword( sharedSecretPassword );
185
186 configuration.store();
187
188 return SUCCESS;
189 }
190
191 public String getWorkingDirectory()
192 {
193 return workingDirectory;
194 }
195
196 public void setWorkingDirectory( String workingDirectory )
197 {
198 this.workingDirectory = workingDirectory;
199 }
200
201 public String getDeploymentRepositoryDirectory()
202 {
203 return deploymentRepositoryDirectory;
204 }
205
206 public void setDeploymentRepositoryDirectory( String deploymentRepositoryDirectory )
207 {
208 this.deploymentRepositoryDirectory = deploymentRepositoryDirectory;
209 }
210
211 public String getBuildOutputDirectory()
212 {
213 return buildOutputDirectory;
214 }
215
216 public void setBuildOutputDirectory( String buildOutputDirectory )
217 {
218 this.buildOutputDirectory = buildOutputDirectory;
219 }
220
221 public String getBaseUrl()
222 {
223 return baseUrl;
224 }
225
226 public void setBaseUrl( String baseUrl )
227 {
228 this.baseUrl = baseUrl;
229 }
230
231 public SecureActionBundle getSecureActionBundle()
232 throws SecureActionException
233 {
234 SecureActionBundle bundle = new SecureActionBundle();
235 bundle.setRequiresAuthentication( true );
236 bundle.addRequiredAuthorization( ContinuumRoleConstants.CONTINUUM_MANAGE_CONFIGURATION, Resource.GLOBAL );
237
238 return bundle;
239 }
240
241 public String getReleaseOutputDirectory()
242 {
243 return releaseOutputDirectory;
244 }
245
246 public void setReleaseOutputDirectory( String releaseOutputDirectory )
247 {
248 this.releaseOutputDirectory = releaseOutputDirectory;
249 }
250
251 public boolean isRequireReleaseOutput()
252 {
253 return requireReleaseOutput;
254 }
255
256 public void setRequireReleaseOutput( boolean requireReleaseOutput )
257 {
258 this.requireReleaseOutput = requireReleaseOutput;
259 }
260
261 public int getNumberOfAllowedBuildsinParallel()
262 {
263 return numberOfAllowedBuildsinParallel;
264 }
265
266 public void setNumberOfAllowedBuildsinParallel( int numberOfAllowedBuildsinParallel )
267 {
268 this.numberOfAllowedBuildsinParallel = numberOfAllowedBuildsinParallel;
269 }
270
271 public boolean isDistributedBuildEnabled()
272 {
273 return distributedBuildEnabled;
274 }
275
276 public void setDistributedBuildEnabled( boolean distributedBuildEnabled )
277 {
278 this.distributedBuildEnabled = distributedBuildEnabled;
279 }
280
281 public void setSharedSecretPassword( String sharedSecretPassword )
282 {
283 this.sharedSecretPassword = sharedSecretPassword;
284 }
285
286 public String getSharedSecretPassword()
287 {
288 return sharedSecretPassword;
289 }
290 }