1   package org.apache.maven.profiles;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import org.apache.maven.model.Activation;
23  import org.apache.maven.model.Profile;
24  import org.apache.maven.model.building.ModelProblem;
25  import org.apache.maven.model.building.ModelProblemCollector;
26  import org.apache.maven.model.profile.DefaultProfileActivationContext;
27  import org.apache.maven.model.profile.ProfileSelector;
28  import org.apache.maven.profiles.activation.ProfileActivationException;
29  import org.codehaus.plexus.MutablePlexusContainer;
30  import org.codehaus.plexus.PlexusContainer;
31  import org.codehaus.plexus.component.annotations.Requirement;
32  import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
33  import org.codehaus.plexus.logging.Logger;
34  
35  import java.util.ArrayList;
36  import java.util.LinkedHashMap;
37  import java.util.List;
38  import java.util.Map;
39  import java.util.Properties;
40  import org.apache.maven.model.building.ModelProblemCollectorRequest;
41  
42  @Deprecated
43  public class DefaultProfileManager
44      implements ProfileManager
45  {
46  
47      @Requirement
48      private Logger logger;
49  
50      @Requirement
51      private ProfileSelector profileSelector;
52  
53      private List activatedIds = new ArrayList();
54  
55      private List deactivatedIds = new ArrayList();
56  
57      private List defaultIds = new ArrayList();
58  
59      private Map profilesById = new LinkedHashMap();
60  
61      private Properties requestProperties;
62  
63      
64  
65  
66  
67      public DefaultProfileManager( PlexusContainer container )
68      {
69          this( container, null );
70      }
71  
72      
73  
74  
75  
76  
77      public DefaultProfileManager( PlexusContainer container, Properties props )
78      {
79          try
80          {
81              this.profileSelector = container.lookup( ProfileSelector.class );
82              this.logger = ( (MutablePlexusContainer) container ).getLogger();
83          }
84          catch ( ComponentLookupException e )
85          {
86              throw new IllegalStateException( e );
87          }
88          this.requestProperties = props;
89      }
90  
91      public Properties getRequestProperties()
92      {
93          return requestProperties;
94      }
95  
96      public Map getProfilesById()
97      {
98          return profilesById;
99      }
100 
101     
102 
103 
104     public void addProfile( Profile profile )
105     {
106         String profileId = profile.getId();
107 
108         Profile existing = (Profile) profilesById.get( profileId );
109         if ( existing != null )
110         {
111             logger.warn( "Overriding profile: \'" + profileId + "\' (source: " + existing.getSource()
112                 + ") with new instance from source: " + profile.getSource() );
113         }
114 
115         profilesById.put( profile.getId(), profile );
116 
117         Activation activation = profile.getActivation();
118 
119         if ( activation != null && activation.isActiveByDefault() )
120         {
121             activateAsDefault( profileId );
122         }
123     }
124 
125     
126 
127 
128     public void explicitlyActivate( String profileId )
129     {
130         if ( !activatedIds.contains( profileId ) )
131         {
132             logger.debug( "Profile with id: \'" + profileId + "\' has been explicitly activated." );
133 
134             activatedIds.add( profileId );
135         }
136     }
137 
138     
139 
140 
141     public void explicitlyActivate( List profileIds )
142     {
143         for ( Object profileId1 : profileIds )
144         {
145             String profileId = (String) profileId1;
146 
147             explicitlyActivate( profileId );
148         }
149     }
150 
151     
152 
153 
154     public void explicitlyDeactivate( String profileId )
155     {
156         if ( !deactivatedIds.contains( profileId ) )
157         {
158             logger.debug( "Profile with id: \'" + profileId + "\' has been explicitly deactivated." );
159 
160             deactivatedIds.add( profileId );
161         }
162     }
163 
164     
165 
166 
167     public void explicitlyDeactivate( List profileIds )
168     {
169         for ( Object profileId1 : profileIds )
170         {
171             String profileId = (String) profileId1;
172 
173             explicitlyDeactivate( profileId );
174         }
175     }
176 
177     
178 
179 
180     public List getActiveProfiles()
181         throws ProfileActivationException
182     {
183         DefaultProfileActivationContext context = new DefaultProfileActivationContext();
184         context.setActiveProfileIds( activatedIds );
185         context.setInactiveProfileIds( deactivatedIds );
186         context.setSystemProperties( System.getProperties() );
187         context.setUserProperties( requestProperties );
188 
189         final List<ProfileActivationException> errors = new ArrayList<ProfileActivationException>();
190 
191         List<Profile> profiles =
192             profileSelector.getActiveProfiles( profilesById.values(), context, new ModelProblemCollector()
193             {
194 
195                 public void add( ModelProblemCollectorRequest req )
196                 {
197                     if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) )
198                     {
199                         errors.add( new ProfileActivationException( req.getMessage(), req.getException() ) );
200                     }
201                 }
202             } );
203 
204         if ( !errors.isEmpty() )
205         {
206             throw errors.get( 0 );
207         }
208 
209         return profiles;
210     }
211 
212     
213 
214 
215     public void addProfiles( List profiles )
216     {
217         for ( Object profile1 : profiles )
218         {
219             Profile profile = (Profile) profile1;
220 
221             addProfile( profile );
222         }
223     }
224 
225     public void activateAsDefault( String profileId )
226     {
227         if ( !defaultIds.contains( profileId ) )
228         {
229             defaultIds.add( profileId );
230         }
231     }
232 
233     public List getExplicitlyActivatedIds()
234     {
235         return activatedIds;
236     }
237 
238     public List getExplicitlyDeactivatedIds()
239     {
240         return deactivatedIds;
241     }
242 
243     public List getIdsActivatedByDefault()
244     {
245         return defaultIds;
246     }
247 
248 }