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  
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   * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
45   * @version $Id: ConfigurationAction.java 765340 2009-04-15 20:22:00Z evenisse $
46   * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="configuration"
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 }