1 package org.apache.maven.profiles.activation;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Properties;
23 import org.apache.maven.model.Activation;
24 import org.apache.maven.model.ActivationProperty;
25 import org.apache.maven.model.Profile;
26 import org.codehaus.plexus.context.Context;
27 import org.codehaus.plexus.context.ContextException;
28 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
29 import org.codehaus.plexus.util.StringUtils;
30
31 public class SystemPropertyProfileActivator
32 extends DetectedProfileActivator implements Contextualizable
33 {
34 private Properties properties;
35
36 public void contextualize(Context context) throws ContextException
37 {
38 properties = (Properties)context.get("SystemProperties");
39 }
40
41 protected boolean canDetectActivation( Profile profile )
42 {
43 return profile.getActivation() != null && profile.getActivation().getProperty() != null;
44 }
45
46 public boolean isActive( Profile profile )
47 throws ProfileActivationException
48 {
49 Activation activation = profile.getActivation();
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 )
59 {
60 throw new ProfileActivationException( "The property name is required to activate the profile '"
61 + profile.getId() + "'" );
62 }
63
64 if ( name.startsWith("!") )
65 {
66 reverseName = true;
67 name = name.substring( 1 );
68 }
69
70 String sysValue = properties.getProperty( name );
71
72 String propValue = property.getValue();
73 if ( StringUtils.isNotEmpty( propValue ) )
74 {
75 boolean reverseValue = false;
76 if ( propValue.startsWith( "!" ) )
77 {
78 reverseValue = true;
79 propValue = propValue.substring( 1 );
80 }
81
82
83 boolean result = propValue.equals( sysValue );
84
85 if ( reverseValue )
86 {
87 return !result;
88 }
89 else
90 {
91 return result;
92 }
93 }
94 else
95 {
96 boolean result = StringUtils.isNotEmpty( sysValue );
97
98 if ( reverseName )
99 {
100 return !result;
101 }
102 else
103 {
104 return result;
105 }
106 }
107 }
108
109 return false;
110 }
111
112 }