1 package org.apache.maven.continuum.project.builder.maven;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.net.URL;
24 import java.util.List;
25
26 import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
27 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
28 import org.apache.maven.continuum.execution.maven.m1.MavenOneBuildExecutor;
29 import org.apache.maven.continuum.execution.maven.m1.MavenOneMetadataHelper;
30 import org.apache.maven.continuum.execution.maven.m1.MavenOneMetadataHelperException;
31 import org.apache.maven.continuum.model.project.BuildDefinition;
32 import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
33 import org.apache.maven.continuum.model.project.Project;
34 import org.apache.maven.continuum.model.project.ProjectGroup;
35 import org.apache.maven.continuum.project.builder.AbstractContinuumProjectBuilder;
36 import org.apache.maven.continuum.project.builder.ContinuumProjectBuilder;
37 import org.apache.maven.continuum.project.builder.ContinuumProjectBuilderException;
38 import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
39 import org.codehaus.plexus.util.StringUtils;
40
41
42
43
44
45
46
47 public class MavenOneContinuumProjectBuilder
48 extends AbstractContinuumProjectBuilder
49 implements ContinuumProjectBuilder
50 {
51 public static final String ID = "maven-one-builder";
52
53
54
55
56 private BuildDefinitionService buildDefinitionService;
57
58
59
60
61 private MavenOneMetadataHelper metadataHelper;
62
63
64
65
66
67 public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password )
68 throws ContinuumProjectBuilderException
69 {
70 return buildProjectsFromMetadata( url, username, password, true );
71 }
72
73 public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password,
74 boolean recursiveProjects )
75 throws ContinuumProjectBuilderException
76 {
77 try
78 {
79 return buildProjectsFromMetadata( url, username, password, recursiveProjects,
80 buildDefinitionService.getDefaultMavenOneBuildDefinitionTemplate() );
81 }
82 catch ( BuildDefinitionServiceException e )
83 {
84 throw new ContinuumProjectBuilderException( e.getMessage(), e );
85 }
86 }
87
88 public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password,
89 boolean recursiveProjects,
90 BuildDefinitionTemplate buildDefinitionTemplate )
91 throws ContinuumProjectBuilderException
92 {
93 ContinuumProjectBuildingResult result = new ContinuumProjectBuildingResult();
94
95 File pomFile;
96
97 pomFile = createMetadataFile( result, url, username, password );
98
99 if ( pomFile == null )
100 {
101 return result;
102 }
103
104 Project project = new Project();
105
106 try
107 {
108 metadataHelper.mapMetadata( result, pomFile, project );
109
110 if ( result.hasErrors() )
111 {
112 return result;
113 }
114 for ( BuildDefinition bd : (List<BuildDefinition>) buildDefinitionTemplate.getBuildDefinitions() )
115 {
116 BuildDefinition cloneBuildDefinition = buildDefinitionService.cloneBuildDefinition( bd );
117 cloneBuildDefinition.setTemplate( false );
118 project.addBuildDefinition( cloneBuildDefinition );
119 }
120 result.addProject( project, MavenOneBuildExecutor.ID );
121 }
122 catch ( MavenOneMetadataHelperException e )
123 {
124 log.error( "Unknown error while processing metadata", e );
125
126 result.addError( ContinuumProjectBuildingResult.ERROR_UNKNOWN );
127 }
128 finally
129 {
130 if ( pomFile.exists() )
131 {
132 pomFile.delete();
133 }
134 }
135
136 ProjectGroup projectGroup = new ProjectGroup();
137
138
139
140
141
142 if ( StringUtils.isEmpty( project.getGroupId() ) )
143 {
144 result.addError( ContinuumProjectBuildingResult.ERROR_MISSING_GROUPID );
145 }
146
147 projectGroup.setGroupId( project.getGroupId() );
148
149
150
151
152
153 String name = project.getName();
154
155 if ( StringUtils.isEmpty( name ) )
156 {
157 name = project.getGroupId();
158 }
159
160 projectGroup.setName( name );
161
162
163
164
165
166 projectGroup.setDescription( project.getDescription() );
167
168 result.addProjectGroup( projectGroup );
169
170 return result;
171 }
172
173 public BuildDefinitionTemplate getDefaultBuildDefinitionTemplate()
174 throws ContinuumProjectBuilderException
175 {
176 try
177 {
178 return buildDefinitionService.getDefaultMavenOneBuildDefinitionTemplate();
179 }
180 catch ( BuildDefinitionServiceException e )
181 {
182 throw new ContinuumProjectBuilderException( e.getMessage(), e );
183 }
184 }
185 }