View Javadoc

1   package org.apache.maven.continuum.web.action;
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 java.io.File;
23  import java.io.FileNotFoundException;
24  import java.io.FileReader;
25  import java.io.IOException;
26  import java.util.List;
27  
28  import org.apache.continuum.web.util.AuditLog;
29  import org.apache.continuum.web.util.AuditLogConstants;
30  import org.apache.maven.continuum.ContinuumException;
31  import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
32  import org.apache.maven.model.Model;
33  import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
34  import org.codehaus.plexus.util.StringUtils;
35  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
36  
37  /**
38   * Add a Maven 2 project to Continuum.
39   *
40   * @author Nick Gonzalez
41   * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
42   * @version $Id: AddMavenTwoProjectAction.java 781924 2009-06-05 06:42:54Z ctan $
43   * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addMavenTwoProject"
44   */
45  public class AddMavenTwoProjectAction
46      extends AddMavenProjectAction
47  {
48      // TODO: remove this part once uploading of an m2 project with modules is supported ( CONTINUUM-1098 )
49      public static final String ERROR_UPLOADING_M2_PROJECT_WITH_MODULES = "add.m2.project.upload.modules.error";
50  
51      public static final String ERROR_READING_POM_EXCEPTION_MESSAGE = "Error reading POM";
52  
53      public static final String FILE_SCHEME = "file:/";
54  
55      private boolean nonRecursiveProject;
56  
57      protected ContinuumProjectBuildingResult doExecute( String pomUrl, int selectedProjectGroup, boolean checkProtocol,
58                                                          boolean scmUseCache )
59          throws ContinuumException
60      {
61          ContinuumProjectBuildingResult result = null;
62  
63          // TODO: remove this part once uploading of an m2 project with modules is supported ( CONTINUUM-1098 )
64          if ( !checkProtocol )
65          {
66              MavenXpp3Reader m2pomReader = new MavenXpp3Reader();
67  
68              try
69              {
70                  String filePath = pomUrl;
71  
72                  if ( !filePath.startsWith( FILE_SCHEME + "/" ) && filePath.startsWith( FILE_SCHEME ) )
73                  {
74                      //Little hack for linux (CONTINUUM-1169)
75                      filePath = StringUtils.replace( filePath, FILE_SCHEME, FILE_SCHEME + "/" );
76                  }
77  
78                  if ( filePath.startsWith( FILE_SCHEME ) )
79                  {
80                      filePath = filePath.substring( FILE_SCHEME.length() );
81                  }
82  
83                  Model model = m2pomReader.read( new FileReader( filePath ) );
84  
85                  List modules = model.getModules();
86  
87                  if ( modules != null && modules.size() != 0 )
88                  {
89                      result = new ContinuumProjectBuildingResult();
90                      result.addError( ERROR_UPLOADING_M2_PROJECT_WITH_MODULES );
91                  }
92              }
93              catch ( FileNotFoundException e )
94              {
95                  throw new ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
96              }
97              catch ( IOException e )
98              {
99                  throw new ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
100             }
101             catch ( XmlPullParserException e )
102             {
103                 throw new ContinuumException( ERROR_READING_POM_EXCEPTION_MESSAGE, e );
104             }
105         }
106 
107         if ( result == null )
108         {
109             result = getContinuum().addMavenTwoProject( pomUrl, selectedProjectGroup, checkProtocol, scmUseCache,
110                                                         !this.isNonRecursiveProject(),
111                                                         this.getBuildDefinitionTemplateId() );
112         }
113 
114         AuditLog event = new AuditLog( hidePasswordInUrl( pomUrl ), AuditLogConstants.ADD_M2_PROJECT );
115         event.setCategory( AuditLogConstants.PROJECT );
116         event.setCurrentUser( getPrincipal() );
117 
118         if ( result == null || result.hasErrors() )
119         {
120             event.setAction( AuditLogConstants.ADD_M2_PROJECT_FAILED );
121         }
122 
123         event.log();
124         return result;
125     }
126 
127     /**
128      * @deprecated Use {@link #getPomFile()} instead
129      */
130     public File getM2PomFile()
131     {
132         return getPomFile();
133     }
134 
135     /**
136      * @deprecated Use {@link #setPomFile(File)} instead
137      */
138     public void setM2PomFile( File pomFile )
139     {
140         setPomFile( pomFile );
141     }
142 
143     /**
144      * @deprecated Use {@link #getPomUrl()} instead
145      */
146     public String getM2PomUrl()
147     {
148         return getPomUrl();
149     }
150 
151     /**
152      * @deprecated Use {@link #setPomUrl(String)} instead
153      */
154     public void setM2PomUrl( String pomUrl )
155     {
156         setPomUrl( pomUrl );
157     }
158 
159     public boolean isNonRecursiveProject()
160     {
161         return nonRecursiveProject;
162     }
163 
164     public void setNonRecursiveProject( boolean nonRecursiveProject )
165     {
166         this.nonRecursiveProject = nonRecursiveProject;
167     }
168 }