001package org.apache.maven.lifecycle;
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
022import org.apache.maven.lifecycle.internal.BuilderCommon;
023import org.apache.maven.lifecycle.internal.ExecutionPlanItem;
024import org.apache.maven.plugin.MojoExecution;
025import org.apache.maven.project.MavenProject;
026
027import java.util.ArrayList;
028import java.util.List;
029
030/**
031 * Defines scheduling information needed by weave mode.
032 * 
033 * @since 3.0
034 * @author Kristian Rosenvold
035 */
036public class DefaultSchedules
037{
038    List<Scheduling> schedules;
039
040    public DefaultSchedules()
041    {
042    }
043
044    public DefaultSchedules( List<Scheduling> schedules )
045    {
046        this.schedules = schedules;
047    }
048
049    public List<ExecutionPlanItem> createExecutionPlanItem( MavenProject mavenProject, List<MojoExecution> executions )
050    {
051        BuilderCommon.attachToThread( mavenProject );
052
053        List<ExecutionPlanItem> result = new ArrayList<ExecutionPlanItem>();
054        for ( MojoExecution mojoExecution : executions )
055        {
056            String lifeCyclePhase = mojoExecution.getLifecyclePhase();
057            final Scheduling scheduling = getScheduling( "default" );
058
059            Schedule schedule = null;
060            if ( scheduling != null )
061            {
062                schedule = scheduling.getSchedule( mojoExecution );
063                if ( schedule == null )
064                {
065                    schedule = scheduling.getSchedule( lifeCyclePhase );
066                }
067            }
068
069            result.add( new ExecutionPlanItem( mojoExecution, schedule ) );
070        }
071        return result;
072    }
073
074    /**
075     * Gets scheduling associated with a given phase.
076     * <p/>
077     * This is part of the experimental weave mode and therefore not part of the public api.
078     *
079     * @param lifecyclePhaseName The name of the lifecycle phase
080     * @return Schecduling information related to phase
081     */
082
083    Scheduling getScheduling( String lifecyclePhaseName )
084    {
085        for ( Scheduling schedule : schedules )
086        {
087            if ( lifecyclePhaseName.equals( schedule.getLifecycle() ) )
088            {
089                return schedule;
090            }
091        }
092        return null;
093    }
094
095    public List<Scheduling> getSchedules()
096    {
097        return schedules;
098    }
099}