View Javadoc
1   package org.apache.maven.profiles;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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       * @deprecated without passing in the system properties, the SystemPropertiesProfileActivator will not work
65       *             correctly in embedded envirnments.
66       */
67      public DefaultProfileManager( PlexusContainer container )
68      {
69          this( container, null );
70      }
71  
72      /**
73       * the properties passed to the profile manager are the props that
74       * are passed to maven, possibly containing profile activator properties
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     /* (non-Javadoc)
102     * @see org.apache.maven.profiles.ProfileManager#addProfile(org.apache.maven.model.Profile)
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     /* (non-Javadoc)
126     * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.lang.String)
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     /* (non-Javadoc)
139     * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.util.List)
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     /* (non-Javadoc)
152     * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.lang.String)
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     /* (non-Javadoc)
165     * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.util.List)
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     /* (non-Javadoc)
178     * @see org.apache.maven.profiles.ProfileManager#getActiveProfiles()
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     /* (non-Javadoc)
213      * @see org.apache.maven.profiles.ProfileManager#addProfiles(java.util.List)
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 }