1   package org.apache.maven.lifecycle;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import org.codehaus.plexus.component.annotations.Component;
23  import org.codehaus.plexus.component.annotations.Requirement;
24  import org.codehaus.plexus.logging.Logger;
25  import org.codehaus.plexus.util.StringUtils;
26  
27  import java.util.ArrayList;
28  import java.util.Arrays;
29  import java.util.HashMap;
30  import java.util.LinkedHashMap;
31  import java.util.LinkedHashSet;
32  import java.util.List;
33  import java.util.Map;
34  import java.util.Set;
35  
36  
37  
38  
39  
40  
41  
42  
43  @Component( role = DefaultLifecycles.class )
44  public class DefaultLifecycles
45  {
46      public static final String[] STANDARD_LIFECYCLES = { "default", "clean", "site" };
47  
48      
49  
50      @Requirement( role = Lifecycle.class )
51      private Map<String, Lifecycle> lifecycles;
52  
53      @Requirement
54      private Logger logger;
55  
56      public DefaultLifecycles()
57      {
58      }
59  
60      public DefaultLifecycles( Map<String, Lifecycle> lifecycles, Logger logger )
61      {
62          this.lifecycles = new LinkedHashMap<>();
63          this.logger = logger;
64          this.lifecycles = lifecycles;
65      }
66  
67      public Lifecycle get( String key )
68      {
69          return getPhaseToLifecycleMap().get( key );
70      }
71  
72      
73  
74  
75  
76  
77  
78      public Map<String, Lifecycle> getPhaseToLifecycleMap()
79      {
80          
81          
82  
83          HashMap<String, Lifecycle> phaseToLifecycleMap = new HashMap<>();
84  
85          for ( Lifecycle lifecycle : getLifeCycles() )
86          {
87              if ( logger.isDebugEnabled() )
88              {
89                  logger.debug( "Lifecycle " + lifecycle );
90              }
91  
92              for ( String phase : lifecycle.getPhases() )
93              {
94                  
95                  if ( !phaseToLifecycleMap.containsKey( phase ) )
96                  {
97                      phaseToLifecycleMap.put( phase, lifecycle );
98                  }
99                  else
100                 {
101                     Lifecycle original = phaseToLifecycleMap.get( phase );
102                     logger.warn( "Duplicated lifecycle phase " + phase + ". Defined in " + original.getId()
103                         + " but also in " + lifecycle.getId() );
104                 }
105             }
106         }
107 
108         return phaseToLifecycleMap;
109     }
110 
111     public List<Lifecycle> getLifeCycles()
112     {
113         
114         Map<String, Lifecycle> lifecycles = new LinkedHashMap<>( this.lifecycles );
115 
116         LinkedHashSet<String> lifecycleNames = new LinkedHashSet<>( Arrays.asList( STANDARD_LIFECYCLES ) );
117         lifecycleNames.addAll( lifecycles.keySet() );
118 
119         ArrayList<Lifecycle> result = new ArrayList<>();
120         for ( String name : lifecycleNames )
121         {
122             Lifecycle lifecycle = lifecycles.get( name );
123             if ( lifecycle.getId() == null )
124             {
125                 throw new NullPointerException( "A lifecycle must have an id." );
126             }
127             result.add( lifecycle );
128         }
129 
130         return result;
131     }
132 
133     public String getLifecyclePhaseList()
134     {
135         Set<String> phases = new LinkedHashSet<>();
136 
137         for ( Lifecycle lifecycle : getLifeCycles() )
138         {
139             phases.addAll( lifecycle.getPhases() );
140         }
141 
142         return StringUtils.join( phases.iterator(), ", " );
143     }
144 
145 }