View Javadoc

1   package org.apache.maven.model.profile.activation;
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.ActivationProperty;
24  import org.apache.maven.model.Profile;
25  import org.apache.maven.model.building.ModelProblemCollector;
26  import org.apache.maven.model.building.ModelProblem.Severity;
27  import org.apache.maven.model.building.ModelProblem.Version;
28  import org.apache.maven.model.building.ModelProblemCollectorRequest;
29  import org.apache.maven.model.profile.ProfileActivationContext;
30  import org.codehaus.plexus.component.annotations.Component;
31  import org.codehaus.plexus.util.StringUtils;
32  
33  /**
34   * Determines profile activation based on the existence or value of some execution property.
35   * 
36   * @author Benjamin Bentmann
37   */
38  @Component( role = ProfileActivator.class, hint = "property" )
39  public class PropertyProfileActivator
40      implements ProfileActivator
41  {
42  
43      public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
44      {
45          boolean active = false;
46  
47          Activation activation = profile.getActivation();
48  
49          if ( activation != null )
50          {
51              ActivationProperty property = activation.getProperty();
52  
53              if ( property != null )
54              {
55                  String name = property.getName();
56                  boolean reverseName = false;
57  
58                  if ( name != null && name.startsWith( "!" ) )
59                  {
60                      reverseName = true;
61                      name = name.substring( 1 );
62                  }
63  
64                  if ( name == null || name.length() <= 0 )
65                  {
66                      problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE)
67                              .setMessage( "The property name is required to activate the profile " + profile.getId())
68                              .setLocation( property.getLocation( "" )));
69                      return false;
70                  }
71  
72                  String sysValue = context.getUserProperties().get( name );
73                  if ( sysValue == null )
74                  {
75                      sysValue = context.getSystemProperties().get( name );
76                  }
77  
78                  String propValue = property.getValue();
79                  if ( StringUtils.isNotEmpty( propValue ) )
80                  {
81                      boolean reverseValue = false;
82                      if ( propValue.startsWith( "!" ) )
83                      {
84                          reverseValue = true;
85                          propValue = propValue.substring( 1 );
86                      }
87  
88                      // we have a value, so it has to match the system value...
89                      boolean result = propValue.equals( sysValue );
90  
91                      if ( reverseValue )
92                      {
93                          active = !result;
94                      }
95                      else
96                      {
97                          active = result;
98                      }
99                  }
100                 else
101                 {
102                     boolean result = StringUtils.isNotEmpty( sysValue );
103 
104                     if ( reverseName )
105                     {
106                         active = !result;
107                     }
108                     else
109                     {
110                         active = result;
111                     }
112                 }
113             }
114         }
115 
116         return active;
117     }
118 
119 }