EMMA Coverage Report (generated Sun Sep 18 11:34:27 PHT 2011)
[all classes][org.apache.maven.continuum.release.executors]

COVERAGE SUMMARY FOR SOURCE FILE [PerformReleaseTaskExecutor.java]

nameclass, %method, %block, %line, %
PerformReleaseTaskExecutor.java100% (1/1)100% (9/9)74%  (225/306)75%  (50/67)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class PerformReleaseTaskExecutor100% (1/1)100% (9/9)74%  (225/306)75%  (50/67)
getReactorProjects (PerformReleaseProjectTask): List 100% (1/1)30%  (14/47)38%  (5/13)
getLocalRepository (): ArtifactRepository 100% (1/1)51%  (21/41)67%  (2/3)
getReactorProjects (ReleaseDescriptor): List 100% (1/1)62%  (35/56)57%  (8/14)
addModules (List, MavenProject): void 100% (1/1)88%  (53/60)83%  (10/12)
PerformReleaseTaskExecutor (): void 100% (1/1)100% (3/3)100% (1/1)
contextualize (Context): void 100% (1/1)100% (7/7)100% (2/2)
execute (ReleaseProjectTask): void 100% (1/1)100% (62/62)100% (14/14)
getProfileManager (Settings): ProfileManager 100% (1/1)100% (14/14)100% (3/3)
getProjectDescriptorFile (ReleaseDescriptor): File 100% (1/1)100% (16/16)100% (5/5)

1package org.apache.maven.continuum.release.executors;
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 
22import java.io.File;
23import java.util.ArrayList;
24import java.util.List;
25 
26import org.apache.continuum.model.repository.LocalRepository;
27import org.apache.maven.artifact.repository.ArtifactRepository;
28import org.apache.maven.artifact.repository.DefaultArtifactRepository;
29import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
30import org.apache.maven.continuum.release.ContinuumReleaseException;
31import org.apache.maven.continuum.release.tasks.PerformReleaseProjectTask;
32import org.apache.maven.continuum.release.tasks.ReleaseProjectTask;
33import org.apache.maven.profiles.DefaultProfileManager;
34import org.apache.maven.profiles.ProfileManager;
35import org.apache.maven.project.DuplicateProjectException;
36import org.apache.maven.project.MavenProject;
37import org.apache.maven.project.MavenProjectBuilder;
38import org.apache.maven.project.ProjectBuildingException;
39import org.apache.maven.project.ProjectSorter;
40import org.apache.maven.settings.Settings;
41import org.apache.maven.shared.release.ReleaseManagerListener;
42import org.apache.maven.shared.release.ReleaseResult;
43import org.apache.maven.shared.release.config.ReleaseDescriptor;
44import org.codehaus.plexus.PlexusConstants;
45import org.codehaus.plexus.PlexusContainer;
46import org.codehaus.plexus.context.Context;
47import org.codehaus.plexus.context.ContextException;
48import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
49import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
50import org.codehaus.plexus.util.StringUtils;
51import org.codehaus.plexus.util.dag.CycleDetectedException;
52 
53/**
54 * @author Edwin Punzalan
55 * @version $Id: PerformReleaseTaskExecutor.java 767304 2009-04-21 21:32:15Z evenisse $
56 */
57public class PerformReleaseTaskExecutor
58    extends AbstractReleaseTaskExecutor
59    implements Contextualizable
60{
61    /**
62     * @plexus.requirement
63     */
64    private MavenProjectBuilder projectBuilder;
65 
66    private ProfileManager profileManager;
67 
68    private PlexusContainer container;
69 
70    private LocalRepository repository;
71 
72    public void execute( ReleaseProjectTask task )
73        throws TaskExecutionException
74    {
75        PerformReleaseProjectTask performTask = (PerformReleaseProjectTask) task;
76 
77        ReleaseManagerListener listener = performTask.getListener();
78 
79        ReleaseDescriptor descriptor = performTask.getDescriptor();
80        descriptor.setUseReleaseProfile( performTask.isUseReleaseProfile() );
81        descriptor.setPerformGoals( performTask.getGoals() );
82        descriptor.setCheckoutDirectory( performTask.getBuildDirectory().getAbsolutePath() );
83 
84        repository = performTask.getLocalRepository();
85 
86        List<MavenProject> reactorProjects = getReactorProjects( performTask );
87 
88        ReleaseResult result = releaseManager.performWithResult( descriptor, settings, reactorProjects, listener );
89 
90        //override to show the actual start time
91        result.setStartTime( getStartTime() );
92 
93        if ( result.getResultCode() == ReleaseResult.SUCCESS )
94        {
95            continuumReleaseManager.getPreparedReleases().remove( performTask.getReleaseId() );
96        }
97 
98        continuumReleaseManager.getReleaseResults().put( performTask.getReleaseId(), result );
99    }
100 
101    protected List<MavenProject> getReactorProjects( PerformReleaseProjectTask releaseTask )
102        throws TaskExecutionException
103    {
104        List<MavenProject> reactorProjects;
105        ReleaseDescriptor descriptor = releaseTask.getDescriptor();
106 
107        if ( StringUtils.isEmpty( descriptor.getWorkingDirectory() ) )
108        {
109            //Perform with provided release parameters (CONTINUUM-1541)
110            descriptor.setCheckoutDirectory( releaseTask.getBuildDirectory().getAbsolutePath() );
111            return null;
112        }
113 
114        try
115        {
116            reactorProjects = getReactorProjects( descriptor );
117        }
118        catch ( ContinuumReleaseException e )
119        {
120            ReleaseResult result = createReleaseResult();
121 
122            result.appendError( e );
123 
124            continuumReleaseManager.getReleaseResults().put( releaseTask.getReleaseId(), result );
125 
126            releaseTask.getListener().error( e.getMessage() );
127 
128            throw new TaskExecutionException( "Failed to build reactor projects.", e );
129        }
130 
131        return reactorProjects;
132    }
133 
134    /**
135     * @todo remove and use generate-reactor-projects phase
136     */
137    protected List<MavenProject> getReactorProjects( ReleaseDescriptor descriptor )
138        throws ContinuumReleaseException
139    {
140        List<MavenProject> reactorProjects = new ArrayList<MavenProject>();
141 
142        MavenProject project;
143        try
144        {
145            project = projectBuilder.build( getProjectDescriptorFile( descriptor ), getLocalRepository(),
146                                            getProfileManager( settings ) );
147 
148            reactorProjects.add( project );
149 
150            addModules( reactorProjects, project );
151        }
152        catch ( ProjectBuildingException e )
153        {
154            throw new ContinuumReleaseException( "Failed to build project.", e );
155        }
156 
157        try
158        {
159            reactorProjects = new ProjectSorter( reactorProjects ).getSortedProjects();
160        }
161        catch ( CycleDetectedException e )
162        {
163            throw new ContinuumReleaseException( "Failed to sort projects.", e );
164        }
165        catch ( DuplicateProjectException e )
166        {
167            throw new ContinuumReleaseException( "Failed to sort projects.", e );
168        }
169 
170        return reactorProjects;
171    }
172 
173    private void addModules( List<MavenProject> reactorProjects, MavenProject project )
174        throws ContinuumReleaseException
175    {
176        for ( Object o : project.getModules() )
177        {
178            String moduleDir = o.toString();
179 
180            File pomFile = new File( project.getBasedir(), moduleDir + "/pom.xml" );
181            System.out.println( pomFile.getAbsolutePath() );
182 
183            try
184            {
185                MavenProject reactorProject =
186                    projectBuilder.build( pomFile, getLocalRepository(), getProfileManager( settings ) );
187 
188                reactorProjects.add( reactorProject );
189 
190                addModules( reactorProjects, reactorProject );
191            }
192            catch ( ProjectBuildingException e )
193            {
194                throw new ContinuumReleaseException( "Failed to build project.", e );
195            }
196        }
197    }
198 
199    private File getProjectDescriptorFile( ReleaseDescriptor descriptor )
200    {
201        String parentPath = descriptor.getWorkingDirectory();
202 
203        String pomFilename = descriptor.getPomFileName();
204        if ( pomFilename == null )
205        {
206            pomFilename = "pom.xml";
207        }
208 
209        return new File( parentPath, pomFilename );
210    }
211 
212    private ArtifactRepository getLocalRepository()
213    {
214        if ( repository == null )
215        {
216            return new DefaultArtifactRepository( "local-repository", "file://" + settings.getLocalRepository(),
217                                                  new DefaultRepositoryLayout() );
218        }
219        else
220        {
221            return new DefaultArtifactRepository( repository.getName(), "file://" + repository.getLocation(),
222                                                  new DefaultRepositoryLayout() );
223        }
224    }
225 
226    private ProfileManager getProfileManager( Settings settings )
227    {
228        if ( profileManager == null )
229        {
230            profileManager = new DefaultProfileManager( container, settings );
231        }
232 
233        return profileManager;
234    }
235 
236    public void contextualize( Context context )
237        throws ContextException
238    {
239        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
240    }
241}

[all classes][org.apache.maven.continuum.release.executors]
EMMA 2.0.5312 (C) Vladimir Roubtsov