001    package org.apache.maven.lifecycle.internal;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *  http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.apache.maven.execution.MavenSession;
023    import org.apache.maven.project.MavenProject;
024    import org.codehaus.plexus.component.annotations.Component;
025    
026    import java.util.ArrayList;
027    import java.util.Collections;
028    import java.util.List;
029    
030    /**
031     * @since 3.0
032     * @author Kristian Rosenvold
033     *         This class is not part of any public api and can be changed or deleted without prior notice.
034     */
035    @Component( role = BuildListCalculator.class )
036    public class BuildListCalculator
037    {
038        public ProjectBuildList calculateProjectBuilds( MavenSession session, List<TaskSegment> taskSegments )
039        {
040            List<ProjectSegment> projectBuilds = new ArrayList<ProjectSegment>();
041    
042            MavenProject rootProject = session.getTopLevelProject();
043    
044            for ( TaskSegment taskSegment : taskSegments )
045            {
046                List<MavenProject> projects;
047    
048                if ( taskSegment.isAggregating() )
049                {
050                    projects = Collections.singletonList( rootProject );
051                }
052                else
053                {
054                    projects = session.getProjects();
055                }
056                for ( MavenProject project : projects )
057                {
058                    BuilderCommon.attachToThread( project ); // Not totally sure if this is needed for anything
059                    MavenSession copiedSession = session.clone();
060                    copiedSession.setCurrentProject( project );
061                    projectBuilds.add( new ProjectSegment( project, taskSegment, copiedSession ) );
062                }
063            }
064            return new ProjectBuildList( projectBuilds );
065        }
066    }