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<String, Lifecycle>();
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<String, Lifecycle>();
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<String, Lifecycle>( this.lifecycles );
115 
116         LinkedHashSet<String> lifecycleNames = new LinkedHashSet<String>( Arrays.asList( STANDARD_LIFECYCLES ) );
117         lifecycleNames.addAll( lifecycles.keySet() );
118 
119         ArrayList<Lifecycle> result = new ArrayList<Lifecycle>();
120         for ( String name : lifecycleNames )
121         {
122             result.add( lifecycles.get( name ) );
123         }
124 
125         return result;
126     }
127 
128     public String getLifecyclePhaseList()
129     {
130         Set<String> phases = new LinkedHashSet<String>();
131 
132         for ( Lifecycle lifecycle : lifecycles.values() )
133         {
134             phases.addAll( lifecycle.getPhases() );
135         }
136 
137         return StringUtils.join( phases.iterator(), ", " );
138     }
139 
140 }