001package 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
022import org.apache.maven.model.Activation;
023import org.apache.maven.model.ActivationOS;
024import org.apache.maven.model.Profile;
025import org.codehaus.plexus.util.Os;
026
027@Deprecated
028public class OperatingSystemProfileActivator
029    implements ProfileActivator
030{
031
032    public boolean canDetermineActivation( Profile profile )
033    {
034        Activation activation = profile.getActivation();
035        return activation != null && activation.getOs() != null;
036    }
037
038    public boolean isActive( Profile profile )
039    {
040        Activation activation = profile.getActivation();
041        ActivationOS os = activation.getOs();
042
043        boolean result = ensureAtLeastOneNonNull( os );
044
045        if ( result && os.getFamily() != null )
046        {
047            result = determineFamilyMatch( os.getFamily() );
048        }
049        if ( result && os.getName() != null )
050        {
051            result = determineNameMatch( os.getName() );
052        }
053        if ( result && os.getArch() != null )
054        {
055            result = determineArchMatch( os.getArch() );
056        }
057        if ( result && os.getVersion() != null )
058        {
059            result = determineVersionMatch( os.getVersion() );
060        }
061        return result;
062    }
063
064    private boolean ensureAtLeastOneNonNull( ActivationOS os )
065    {
066        return os.getArch() != null || os.getFamily() != null || os.getName() != null || os.getVersion() != null;
067    }
068
069    private boolean determineVersionMatch( String version )
070    {
071        String test = version;
072        boolean reverse = false;
073        
074        if ( test.startsWith( "!" ) )
075        {
076            reverse = true;
077            test = test.substring( 1 );
078        }
079        
080        boolean result = Os.isVersion( test );
081        
082        if ( reverse )
083        {
084            return !result;
085        }
086        else
087        {
088            return result;
089        }
090    }
091
092    private boolean determineArchMatch( String arch )
093    {
094        String test = arch;
095        boolean reverse = false;
096        
097        if ( test.startsWith( "!" ) )
098        {
099            reverse = true;
100            test = test.substring( 1 );
101        }
102        
103        boolean result = Os.isArch( test );
104        
105        if ( reverse )
106        {
107            return !result;
108        }
109        else
110        {
111            return result;
112        }
113    }
114
115    private boolean determineNameMatch( String name )
116    {
117        String test = name;
118        boolean reverse = false;
119        
120        if ( test.startsWith( "!" ) )
121        {
122            reverse = true;
123            test = test.substring( 1 );
124        }
125
126        boolean result = Os.isName( test );
127
128        if ( reverse )
129        {
130            return !result;
131        }
132        else
133        {
134            return result;
135        }
136    }
137
138    private boolean determineFamilyMatch( String family )
139    {
140        String test = family;
141        boolean reverse = false;
142        
143        if ( test.startsWith( "!" ) )
144        {
145            reverse = true;
146            test = test.substring( 1 );
147        }
148        
149        boolean result = Os.isFamily( test );
150        
151        if ( reverse )
152        {
153            return !result;
154        }
155        else
156        {
157            return result;
158        }
159    }
160
161}