1 package org.apache.maven.model.profile.activation;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.profile.ProfileActivationContext;
28 import org.codehaus.plexus.component.annotations.Component;
29 import org.codehaus.plexus.util.StringUtils;
30
31
32
33
34
35
36 @Component( role = ProfileActivator.class, hint = "property" )
37 public class PropertyProfileActivator
38 implements ProfileActivator
39 {
40
41 public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
42 {
43 boolean active = false;
44
45 Activation activation = profile.getActivation();
46
47 if ( activation != null )
48 {
49 ActivationProperty property = activation.getProperty();
50
51 if ( property != null )
52 {
53 String name = property.getName();
54 boolean reverseName = false;
55
56 if ( name != null && name.startsWith( "!" ) )
57 {
58 reverseName = true;
59 name = name.substring( 1 );
60 }
61
62 if ( name == null || name.length() <= 0 )
63 {
64 problems.add( Severity.ERROR, "The property name is required to activate the profile "
65 + profile.getId(), property.getLocation( "" ), null );
66 return false;
67 }
68
69 String sysValue = context.getUserProperties().get( name );
70 if ( sysValue == null )
71 {
72 sysValue = context.getSystemProperties().get( name );
73 }
74
75 String propValue = property.getValue();
76 if ( StringUtils.isNotEmpty( propValue ) )
77 {
78 boolean reverseValue = false;
79 if ( propValue.startsWith( "!" ) )
80 {
81 reverseValue = true;
82 propValue = propValue.substring( 1 );
83 }
84
85
86 boolean result = propValue.equals( sysValue );
87
88 if ( reverseValue )
89 {
90 active = !result;
91 }
92 else
93 {
94 active = result;
95 }
96 }
97 else
98 {
99 boolean result = StringUtils.isNotEmpty( sysValue );
100
101 if ( reverseName )
102 {
103 active = !result;
104 }
105 else
106 {
107 active = result;
108 }
109 }
110 }
111 }
112
113 return active;
114 }
115
116 }