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
24 import java.io.File;
25
26 import javax.servlet.http.HttpServletRequest;
27
28 import org.apache.continuum.configuration.ContinuumConfigurationException;
29 import org.apache.maven.continuum.configuration.ConfigurationService;
30 import org.apache.maven.continuum.configuration.ConfigurationStoringException;
31 import org.apache.maven.continuum.security.ContinuumRoleConstants;
32 import org.apache.maven.continuum.store.ContinuumStoreException;
33 import org.apache.maven.continuum.web.action.ContinuumActionSupport;
34 import org.apache.struts2.ServletActionContext;
35 import org.codehaus.plexus.redback.rbac.Resource;
36 import org.codehaus.plexus.util.StringUtils;
37 import org.codehaus.redback.integration.interceptor.SecureAction;
38 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
39 import org.codehaus.redback.integration.interceptor.SecureActionException;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42
43
44
45
46
47
48 public class ConfigurationAction
49 extends ContinuumActionSupport
50 implements Preparable, SecureAction
51 {
52 private static final Logger logger = LoggerFactory.getLogger( ConfigurationAction.class );
53
54 private String workingDirectory;
55
56 private String buildOutputDirectory;
57
58 private String deploymentRepositoryDirectory;
59
60 private String baseUrl;
61
62 private String releaseOutputDirectory;
63
64 private int numberOfAllowedBuildsinParallel = 1;
65
66 private boolean requireReleaseOutput;
67
68 private boolean distributedBuildEnabled;
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
121 public String input()
122 {
123 if ( isRequireReleaseOutput() )
124 {
125 addActionError( getText( "configuration.releaseOutputDirectory.required" ) );
126 }
127
128 if ( numberOfAllowedBuildsinParallel <= 0 )
129 {
130 addActionError( getText( "configuration.numberOfBuildsInParallel.invalid" ) );
131 }
132
133 return INPUT;
134 }
135
136 public String save()
137 throws ConfigurationStoringException, ContinuumStoreException, ContinuumConfigurationException
138 {
139 if ( numberOfAllowedBuildsinParallel <= 0 )
140 {
141 addActionError( "Number of Allowed Builds in Parallel must be greater than zero." );
142 return ERROR;
143 }
144
145 ConfigurationService configuration = getContinuum().getConfiguration();
146
147 configuration.setWorkingDirectory( new File( workingDirectory ) );
148
149 configuration.setBuildOutputDirectory( new File( buildOutputDirectory ) );
150
151 configuration.setNumberOfBuildsInParallel( numberOfAllowedBuildsinParallel );
152
153 if ( StringUtils.isNotEmpty( deploymentRepositoryDirectory ) )
154 {
155 configuration.setDeploymentRepositoryDirectory( new File( deploymentRepositoryDirectory ) );
156 }
157 else
158 {
159 configuration.setDeploymentRepositoryDirectory( null );
160 }
161
162 configuration.setUrl( baseUrl );
163
164 configuration.setInitialized( true );
165
166 if ( StringUtils.isNotEmpty( releaseOutputDirectory ) )
167 {
168 configuration.setReleaseOutputDirectory( new File( releaseOutputDirectory ) );
169 }
170 else if ( isRequireReleaseOutput() )
171 {
172 addActionError( getText( "configuration.releaseOutputDirectory.required" ) );
173 return ERROR;
174 }
175 else
176 {
177 configuration.setReleaseOutputDirectory( null );
178 }
179
180 configuration.setDistributedBuildEnabled( distributedBuildEnabled );
181
182 configuration.store();
183
184 return SUCCESS;
185 }
186
187 public String getWorkingDirectory()
188 {
189 return workingDirectory;
190 }
191
192 public void setWorkingDirectory( String workingDirectory )
193 {
194 this.workingDirectory = workingDirectory;
195 }
196
197 public String getDeploymentRepositoryDirectory()
198 {
199 return deploymentRepositoryDirectory;
200 }
201
202 public void setDeploymentRepositoryDirectory( String deploymentRepositoryDirectory )
203 {
204 this.deploymentRepositoryDirectory = deploymentRepositoryDirectory;
205 }
206
207 public String getBuildOutputDirectory()
208 {
209 return buildOutputDirectory;
210 }
211
212 public void setBuildOutputDirectory( String buildOutputDirectory )
213 {
214 this.buildOutputDirectory = buildOutputDirectory;
215 }
216
217 public String getBaseUrl()
218 {
219 return baseUrl;
220 }
221
222 public void setBaseUrl( String baseUrl )
223 {
224 this.baseUrl = baseUrl;
225 }
226
227 public SecureActionBundle getSecureActionBundle()
228 throws SecureActionException
229 {
230 SecureActionBundle bundle = new SecureActionBundle();
231 bundle.setRequiresAuthentication( true );
232 bundle.addRequiredAuthorization( ContinuumRoleConstants.CONTINUUM_MANAGE_CONFIGURATION, Resource.GLOBAL );
233
234 return bundle;
235 }
236
237 public String getReleaseOutputDirectory()
238 {
239 return releaseOutputDirectory;
240 }
241
242 public void setReleaseOutputDirectory( String releaseOutputDirectory )
243 {
244 this.releaseOutputDirectory = releaseOutputDirectory;
245 }
246
247 public boolean isRequireReleaseOutput()
248 {
249 return requireReleaseOutput;
250 }
251
252 public void setRequireReleaseOutput( boolean requireReleaseOutput )
253 {
254 this.requireReleaseOutput = requireReleaseOutput;
255 }
256
257 public int getNumberOfAllowedBuildsinParallel()
258 {
259 return numberOfAllowedBuildsinParallel;
260 }
261
262 public void setNumberOfAllowedBuildsinParallel( int numberOfAllowedBuildsinParallel )
263 {
264 this.numberOfAllowedBuildsinParallel = numberOfAllowedBuildsinParallel;
265 }
266
267 public boolean isDistributedBuildEnabled()
268 {
269 return distributedBuildEnabled;
270 }
271
272 public void setDistributedBuildEnabled( boolean distributedBuildEnabled )
273 {
274 this.distributedBuildEnabled = distributedBuildEnabled;
275 }
276 }