View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.profiles;
20  
21  import java.util.ArrayList;
22  import java.util.LinkedHashMap;
23  import java.util.List;
24  import java.util.Map;
25  import java.util.Properties;
26  
27  import org.apache.maven.model.Activation;
28  import org.apache.maven.model.Profile;
29  import org.apache.maven.model.building.ModelProblem;
30  import org.apache.maven.model.building.ModelProblemCollector;
31  import org.apache.maven.model.building.ModelProblemCollectorRequest;
32  import org.apache.maven.model.profile.DefaultProfileActivationContext;
33  import org.apache.maven.model.profile.ProfileSelector;
34  import org.apache.maven.profiles.activation.ProfileActivationException;
35  import org.codehaus.plexus.MutablePlexusContainer;
36  import org.codehaus.plexus.PlexusContainer;
37  import org.codehaus.plexus.component.annotations.Requirement;
38  import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
39  import org.codehaus.plexus.logging.Logger;
40  
41  /**
42   * DefaultProfileManager
43   */
44  @Deprecated
45  public class DefaultProfileManager implements ProfileManager {
46  
47      @Requirement
48      private Logger logger;
49  
50      @Requirement
51      private ProfileSelector profileSelector;
52  
53      private List<String> activatedIds = new ArrayList<>();
54  
55      private List<String> deactivatedIds = new ArrayList<>();
56  
57      private List<String> defaultIds = new ArrayList<>();
58  
59      private Map<String, Profile> 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 environments.
66       */
67      @Deprecated
68      public DefaultProfileManager(PlexusContainer container) {
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          try {
79              this.profileSelector = container.lookup(ProfileSelector.class);
80              this.logger = ((MutablePlexusContainer) container).getLogger();
81          } catch (ComponentLookupException e) {
82              throw new IllegalStateException(e);
83          }
84          this.requestProperties = props;
85      }
86  
87      public Properties getRequestProperties() {
88          return requestProperties;
89      }
90  
91      public Map<String, Profile> getProfilesById() {
92          return profilesById;
93      }
94  
95      /* (non-Javadoc)
96       * @see org.apache.maven.profiles.ProfileManager#addProfile(org.apache.maven.model.Profile)
97       */
98      public void addProfile(Profile profile) {
99          String profileId = profile.getId();
100 
101         Profile existing = profilesById.get(profileId);
102         if (existing != null) {
103             logger.warn("Overriding profile: \'" + profileId + "\' (source: " + existing.getSource()
104                     + ") with new instance from source: " + profile.getSource());
105         }
106 
107         profilesById.put(profile.getId(), profile);
108 
109         Activation activation = profile.getActivation();
110 
111         if (activation != null && activation.isActiveByDefault()) {
112             activateAsDefault(profileId);
113         }
114     }
115 
116     /* (non-Javadoc)
117      * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.lang.String)
118      */
119     public void explicitlyActivate(String profileId) {
120         if (!activatedIds.contains(profileId)) {
121             logger.debug("Profile with id: \'" + profileId + "\' has been explicitly activated.");
122 
123             activatedIds.add(profileId);
124         }
125     }
126 
127     /* (non-Javadoc)
128      * @see org.apache.maven.profiles.ProfileManager#explicitlyActivate(java.util.List)
129      */
130     public void explicitlyActivate(List<String> profileIds) {
131         for (String profileId1 : profileIds) {
132             explicitlyActivate(profileId1);
133         }
134     }
135 
136     /* (non-Javadoc)
137      * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.lang.String)
138      */
139     public void explicitlyDeactivate(String profileId) {
140         if (!deactivatedIds.contains(profileId)) {
141             logger.debug("Profile with id: \'" + profileId + "\' has been explicitly deactivated.");
142 
143             deactivatedIds.add(profileId);
144         }
145     }
146 
147     /* (non-Javadoc)
148      * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.util.List)
149      */
150     public void explicitlyDeactivate(List<String> profileIds) {
151         for (String profileId1 : profileIds) {
152             explicitlyDeactivate(profileId1);
153         }
154     }
155 
156     /* (non-Javadoc)
157      * @see org.apache.maven.profiles.ProfileManager#getActiveProfiles()
158      */
159     public List getActiveProfiles() throws ProfileActivationException {
160         DefaultProfileActivationContext context = new DefaultProfileActivationContext();
161         context.setActiveProfileIds(activatedIds);
162         context.setInactiveProfileIds(deactivatedIds);
163         context.setSystemProperties(System.getProperties());
164         context.setUserProperties(requestProperties);
165 
166         final List<ProfileActivationException> errors = new ArrayList<>();
167 
168         List<Profile> profiles =
169                 profileSelector.getActiveProfiles(profilesById.values(), context, new ModelProblemCollector() {
170 
171                     public void add(ModelProblemCollectorRequest req) {
172                         if (!ModelProblem.Severity.WARNING.equals(req.getSeverity())) {
173                             errors.add(new ProfileActivationException(req.getMessage(), req.getException()));
174                         }
175                     }
176                 });
177 
178         if (!errors.isEmpty()) {
179             throw errors.get(0);
180         }
181 
182         return profiles;
183     }
184 
185     /* (non-Javadoc)
186      * @see org.apache.maven.profiles.ProfileManager#addProfiles(java.util.List)
187      */
188     public void addProfiles(List<Profile> profiles) {
189         for (Profile profile1 : profiles) {
190             addProfile(profile1);
191         }
192     }
193 
194     public void activateAsDefault(String profileId) {
195         if (!defaultIds.contains(profileId)) {
196             defaultIds.add(profileId);
197         }
198     }
199 
200     public List<String> getExplicitlyActivatedIds() {
201         return activatedIds;
202     }
203 
204     public List<String> getExplicitlyDeactivatedIds() {
205         return deactivatedIds;
206     }
207 
208     public List getIdsActivatedByDefault() {
209         return defaultIds;
210     }
211 }