001    package org.apache.maven.profiles.activation;
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    
022    import java.util.Properties;
023    import org.apache.maven.model.Activation;
024    import org.apache.maven.model.ActivationProperty;
025    import org.apache.maven.model.Profile;
026    import org.codehaus.plexus.context.Context;
027    import org.codehaus.plexus.context.ContextException;
028    import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
029    import org.codehaus.plexus.util.StringUtils;
030    
031    @Deprecated
032    public class SystemPropertyProfileActivator
033        extends DetectedProfileActivator implements Contextualizable
034    {
035        private Properties properties;
036    
037        public void contextualize( Context context )
038            throws ContextException
039        {
040            properties = (Properties) context.get( "SystemProperties" );
041        }
042    
043        protected boolean canDetectActivation( Profile profile )
044        {
045            return profile.getActivation() != null && profile.getActivation().getProperty() != null;
046        }
047    
048        public boolean isActive( Profile profile )
049            throws ProfileActivationException
050        {
051            Activation activation = profile.getActivation();
052    
053            ActivationProperty property = activation.getProperty();
054    
055            if ( property != null )
056            {
057                String name = property.getName();
058                boolean reverseName = false;
059    
060                if ( name == null )
061                {
062                    throw new ProfileActivationException( "The property name is required to activate the profile '"
063                        + profile.getId() + "'" );
064                }
065    
066                if ( name.startsWith("!") )
067                {
068                    reverseName = true;
069                    name = name.substring( 1 );
070                }
071    
072                String sysValue = properties.getProperty( name );
073    
074                String propValue = property.getValue();
075                if ( StringUtils.isNotEmpty( propValue ) )
076                {
077                    boolean reverseValue = false;
078                    if ( propValue.startsWith( "!" ) )
079                    {
080                        reverseValue = true;
081                        propValue = propValue.substring( 1 );
082                    }
083    
084                    // we have a value, so it has to match the system value...
085                    boolean result = propValue.equals( sysValue );
086    
087                    if ( reverseValue )
088                    {
089                        return !result;
090                    }
091                    else
092                    {
093                        return result;
094                    }
095                }
096                else
097                {
098                    boolean result = StringUtils.isNotEmpty( sysValue );
099    
100                    if ( reverseName )
101                    {
102                        return !result;
103                    }
104                    else
105                    {
106                        return result;
107                    }
108                }
109            }
110    
111            return false;
112        }
113    
114    }