| package org.apache.maven.continuum.project.builder.maven; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import org.apache.continuum.dao.ProjectGroupDao; |
| import org.apache.maven.continuum.builddefinition.BuildDefinitionService; |
| import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException; |
| import org.apache.maven.continuum.execution.maven.m1.MavenOneBuildExecutor; |
| import org.apache.maven.continuum.execution.maven.m1.MavenOneMetadataHelper; |
| import org.apache.maven.continuum.execution.maven.m1.MavenOneMetadataHelperException; |
| import org.apache.maven.continuum.model.project.BuildDefinition; |
| import org.apache.maven.continuum.model.project.BuildDefinitionTemplate; |
| import org.apache.maven.continuum.model.project.Project; |
| import org.apache.maven.continuum.model.project.ProjectGroup; |
| import org.apache.maven.continuum.project.builder.AbstractContinuumProjectBuilder; |
| import org.apache.maven.continuum.project.builder.ContinuumProjectBuilder; |
| import org.apache.maven.continuum.project.builder.ContinuumProjectBuilderException; |
| import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult; |
| import org.apache.maven.continuum.store.ContinuumStoreException; |
| import org.codehaus.plexus.util.StringUtils; |
| |
| import java.io.File; |
| import java.net.URL; |
| import java.util.List; |
| |
| /** |
| * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a> |
| * @version $Id$ |
| * @plexus.component role="org.apache.maven.continuum.project.builder.ContinuumProjectBuilder" |
| * role-hint="maven-one-builder" |
| */ |
| public class MavenOneContinuumProjectBuilder |
| extends AbstractContinuumProjectBuilder |
| implements ContinuumProjectBuilder |
| { |
| public static final String ID = "maven-one-builder"; |
| |
| /** |
| * @plexus.requirement |
| */ |
| private BuildDefinitionService buildDefinitionService; |
| |
| /** |
| * @plexus.requirement |
| */ |
| private MavenOneMetadataHelper metadataHelper; |
| |
| /** |
| * @plexus.requirement |
| */ |
| private ProjectGroupDao projectGroupDao; |
| |
| // ---------------------------------------------------------------------- |
| // ProjectCreator Implementation |
| // ---------------------------------------------------------------------- |
| |
| public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password ) |
| throws ContinuumProjectBuilderException |
| { |
| return buildProjectsFromMetadata( url, username, password, true, false ); |
| } |
| |
| public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password, |
| boolean recursiveProjects, |
| boolean checkoutInSingleDirectory ) |
| throws ContinuumProjectBuilderException |
| { |
| try |
| { |
| return buildProjectsFromMetadata( url, username, password, recursiveProjects, |
| buildDefinitionService.getDefaultMavenOneBuildDefinitionTemplate(), |
| false ); |
| } |
| catch ( BuildDefinitionServiceException e ) |
| { |
| throw new ContinuumProjectBuilderException( e.getMessage(), e ); |
| } |
| } |
| |
| public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password, |
| boolean recursiveProjects, |
| BuildDefinitionTemplate buildDefinitionTemplate, |
| boolean checkoutInSingleDirectory ) |
| throws ContinuumProjectBuilderException |
| { |
| return buildProjectsFromMetadata( url, username, password, buildDefinitionTemplate, null ); |
| } |
| |
| public ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password, |
| boolean recursiveProjects, |
| BuildDefinitionTemplate buildDefinitionTemplate, |
| boolean checkoutInSingleDirectory, |
| int projectGroupId ) |
| throws ContinuumProjectBuilderException |
| { |
| ProjectGroup projectGroup = null; |
| if ( projectGroupId > 0 ) |
| { |
| try |
| { |
| projectGroup = projectGroupDao.getProjectGroupWithBuildDetailsByProjectGroupId( projectGroupId ); |
| } |
| catch ( ContinuumStoreException e ) |
| { |
| throw new ContinuumProjectBuilderException( e.getMessage(), e ); |
| } |
| } |
| |
| return buildProjectsFromMetadata( url, username, password, buildDefinitionTemplate, projectGroup ); |
| } |
| |
| private ContinuumProjectBuildingResult buildProjectsFromMetadata( URL url, String username, String password, |
| BuildDefinitionTemplate buildDefinitionTemplate, |
| ProjectGroup projectGroup ) |
| { |
| ContinuumProjectBuildingResult result = new ContinuumProjectBuildingResult(); |
| |
| File pomFile; |
| |
| pomFile = createMetadataFile( result, url, username, password ); |
| |
| if ( pomFile == null ) |
| { |
| return result; |
| } |
| |
| Project project = new Project(); |
| |
| try |
| { |
| metadataHelper.mapMetadata( result, pomFile, project, true ); |
| |
| if ( result.hasErrors() ) |
| { |
| return result; |
| } |
| for ( BuildDefinition bd : (List<BuildDefinition>) buildDefinitionTemplate.getBuildDefinitions() ) |
| { |
| BuildDefinition cloneBuildDefinition = buildDefinitionService.cloneBuildDefinition( bd ); |
| cloneBuildDefinition.setTemplate( false ); |
| project.addBuildDefinition( cloneBuildDefinition ); |
| } |
| result.addProject( project, MavenOneBuildExecutor.ID ); |
| } |
| catch ( MavenOneMetadataHelperException e ) |
| { |
| log.error( "Unknown error while processing metadata", e ); |
| |
| result.addError( ContinuumProjectBuildingResult.ERROR_UNKNOWN ); |
| } |
| finally |
| { |
| if ( pomFile.exists() ) |
| { |
| pomFile.delete(); |
| } |
| } |
| |
| if ( projectGroup == null ) |
| { |
| projectGroup = new ProjectGroup(); |
| |
| // ---------------------------------------------------------------------- |
| // Group id |
| // ---------------------------------------------------------------------- |
| |
| if ( StringUtils.isEmpty( project.getGroupId() ) ) |
| { |
| result.addError( ContinuumProjectBuildingResult.ERROR_MISSING_GROUPID ); |
| } |
| |
| projectGroup.setGroupId( project.getGroupId() ); |
| |
| // ---------------------------------------------------------------------- |
| // Name |
| // ---------------------------------------------------------------------- |
| |
| String name = project.getName(); |
| |
| if ( StringUtils.isEmpty( name ) ) |
| { |
| name = project.getGroupId(); |
| } |
| |
| projectGroup.setName( name ); |
| |
| // ---------------------------------------------------------------------- |
| // Description |
| // ---------------------------------------------------------------------- |
| |
| projectGroup.setDescription( project.getDescription() ); |
| } |
| |
| result.addProjectGroup( projectGroup ); |
| |
| return result; |
| } |
| |
| public BuildDefinitionTemplate getDefaultBuildDefinitionTemplate() |
| throws ContinuumProjectBuilderException |
| { |
| try |
| { |
| return buildDefinitionService.getDefaultMavenOneBuildDefinitionTemplate(); |
| } |
| catch ( BuildDefinitionServiceException e ) |
| { |
| throw new ContinuumProjectBuilderException( e.getMessage(), e ); |
| } |
| } |
| } |