View Javadoc

1   package org.apache.maven.continuum.web.action.admin;
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 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   * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
43   * @version $Id: ConfigurationAction.java 1372260 2012-08-13 04:29:09Z brett $
44   * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="configuration"
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 }