001package org.apache.maven.profiles; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import org.apache.maven.model.Activation; 023import org.apache.maven.model.Profile; 024import org.apache.maven.model.building.ModelProblem; 025import org.apache.maven.model.building.ModelProblemCollector; 026import org.apache.maven.model.profile.DefaultProfileActivationContext; 027import org.apache.maven.model.profile.ProfileSelector; 028import org.apache.maven.profiles.activation.ProfileActivationException; 029import org.codehaus.plexus.MutablePlexusContainer; 030import org.codehaus.plexus.PlexusContainer; 031import org.codehaus.plexus.component.annotations.Requirement; 032import org.codehaus.plexus.component.repository.exception.ComponentLookupException; 033import org.codehaus.plexus.logging.Logger; 034 035import java.util.ArrayList; 036import java.util.LinkedHashMap; 037import java.util.List; 038import java.util.Map; 039import java.util.Properties; 040import org.apache.maven.model.building.ModelProblemCollectorRequest; 041 042@Deprecated 043public class DefaultProfileManager 044 implements ProfileManager 045{ 046 047 @Requirement 048 private Logger logger; 049 050 @Requirement 051 private ProfileSelector profileSelector; 052 053 private List<String> activatedIds = new ArrayList<>(); 054 055 private List<String> deactivatedIds = new ArrayList<>(); 056 057 private List<String> defaultIds = new ArrayList<>(); 058 059 private Map<String, Profile> profilesById = new LinkedHashMap<>(); 060 061 private Properties requestProperties; 062 063 /** 064 * @deprecated without passing in the system properties, the SystemPropertiesProfileActivator will not work 065 * correctly in embedded envirnments. 066 */ 067 public DefaultProfileManager( PlexusContainer container ) 068 { 069 this( container, null ); 070 } 071 072 /** 073 * the properties passed to the profile manager are the props that 074 * are passed to maven, possibly containing profile activator properties 075 * 076 */ 077 public DefaultProfileManager( PlexusContainer container, Properties props ) 078 { 079 try 080 { 081 this.profileSelector = container.lookup( ProfileSelector.class ); 082 this.logger = ( (MutablePlexusContainer) container ).getLogger(); 083 } 084 catch ( ComponentLookupException e ) 085 { 086 throw new IllegalStateException( e ); 087 } 088 this.requestProperties = props; 089 } 090 091 public Properties getRequestProperties() 092 { 093 return requestProperties; 094 } 095 096 public Map<String, Profile> getProfilesById() 097 { 098 return profilesById; 099 } 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 = 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<String> profileIds ) 142 { 143 for ( String profileId1 : profileIds ) 144 { 145 explicitlyActivate( profileId1 ); 146 } 147 } 148 149 /* (non-Javadoc) 150 * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.lang.String) 151 */ 152 public void explicitlyDeactivate( String profileId ) 153 { 154 if ( !deactivatedIds.contains( profileId ) ) 155 { 156 logger.debug( "Profile with id: \'" + profileId + "\' has been explicitly deactivated." ); 157 158 deactivatedIds.add( profileId ); 159 } 160 } 161 162 /* (non-Javadoc) 163 * @see org.apache.maven.profiles.ProfileManager#explicitlyDeactivate(java.util.List) 164 */ 165 public void explicitlyDeactivate( List<String> profileIds ) 166 { 167 for ( String profileId1 : profileIds ) 168 { 169 explicitlyDeactivate( profileId1 ); 170 } 171 } 172 173 /* (non-Javadoc) 174 * @see org.apache.maven.profiles.ProfileManager#getActiveProfiles() 175 */ 176 public List getActiveProfiles() 177 throws ProfileActivationException 178 { 179 DefaultProfileActivationContext context = new DefaultProfileActivationContext(); 180 context.setActiveProfileIds( activatedIds ); 181 context.setInactiveProfileIds( deactivatedIds ); 182 context.setSystemProperties( System.getProperties() ); 183 context.setUserProperties( requestProperties ); 184 185 final List<ProfileActivationException> errors = new ArrayList<>(); 186 187 List<Profile> profiles = 188 profileSelector.getActiveProfiles( profilesById.values(), context, new ModelProblemCollector() 189 { 190 191 public void add( ModelProblemCollectorRequest req ) 192 { 193 if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) ) 194 { 195 errors.add( new ProfileActivationException( req.getMessage(), req.getException() ) ); 196 } 197 } 198 } ); 199 200 if ( !errors.isEmpty() ) 201 { 202 throw errors.get( 0 ); 203 } 204 205 return profiles; 206 } 207 208 /* (non-Javadoc) 209 * @see org.apache.maven.profiles.ProfileManager#addProfiles(java.util.List) 210 */ 211 public void addProfiles( List<Profile> profiles ) 212 { 213 for ( Profile profile1 : profiles ) 214 { 215 addProfile( profile1 ); 216 } 217 } 218 219 public void activateAsDefault( String profileId ) 220 { 221 if ( !defaultIds.contains( profileId ) ) 222 { 223 defaultIds.add( profileId ); 224 } 225 } 226 227 public List<String> getExplicitlyActivatedIds() 228 { 229 return activatedIds; 230 } 231 232 public List<String> getExplicitlyDeactivatedIds() 233 { 234 return deactivatedIds; 235 } 236 237 public List getIdsActivatedByDefault() 238 { 239 return defaultIds; 240 } 241 242}