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 javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import org.apache.maven.model.Activation;
26 import org.apache.maven.model.ActivationOS;
27 import org.apache.maven.model.Profile;
28 import org.apache.maven.model.building.ModelProblemCollector;
29 import org.apache.maven.model.profile.ProfileActivationContext;
30 import org.codehaus.plexus.util.Os;
31
32
33
34
35
36
37
38 @Named( "os" )
39 @Singleton
40 public class OperatingSystemProfileActivator
41 implements ProfileActivator
42 {
43
44 @Override
45 public boolean isActive( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
46 {
47 Activation activation = profile.getActivation();
48
49 if ( activation == null )
50 {
51 return false;
52 }
53
54 ActivationOS os = activation.getOs();
55
56 if ( os == null )
57 {
58 return false;
59 }
60
61 boolean active = ensureAtLeastOneNonNull( os );
62
63 if ( active && os.getFamily() != null )
64 {
65 active = determineFamilyMatch( os.getFamily() );
66 }
67 if ( active && os.getName() != null )
68 {
69 active = determineNameMatch( os.getName() );
70 }
71 if ( active && os.getArch() != null )
72 {
73 active = determineArchMatch( os.getArch() );
74 }
75 if ( active && os.getVersion() != null )
76 {
77 active = determineVersionMatch( os.getVersion() );
78 }
79
80 return active;
81 }
82
83 @Override
84 public boolean presentInConfig( Profile profile, ProfileActivationContext context, ModelProblemCollector problems )
85 {
86 Activation activation = profile.getActivation();
87
88 if ( activation == null )
89 {
90 return false;
91 }
92
93 ActivationOS os = activation.getOs();
94
95 return os != null;
96 }
97
98 private boolean ensureAtLeastOneNonNull( ActivationOS os )
99 {
100 return os.getArch() != null || os.getFamily() != null || os.getName() != null || os.getVersion() != null;
101 }
102
103 private boolean determineVersionMatch( String version )
104 {
105 String test = version;
106 boolean reverse = false;
107
108 if ( test.startsWith( "!" ) )
109 {
110 reverse = true;
111 test = test.substring( 1 );
112 }
113
114 boolean result = Os.isVersion( test );
115
116 return reverse != result;
117 }
118
119 private boolean determineArchMatch( String arch )
120 {
121 String test = arch;
122 boolean reverse = false;
123
124 if ( test.startsWith( "!" ) )
125 {
126 reverse = true;
127 test = test.substring( 1 );
128 }
129
130 boolean result = Os.isArch( test );
131
132 return reverse != result;
133 }
134
135 private boolean determineNameMatch( String name )
136 {
137 String test = name;
138 boolean reverse = false;
139
140 if ( test.startsWith( "!" ) )
141 {
142 reverse = true;
143 test = test.substring( 1 );
144 }
145
146 boolean result = Os.isName( test );
147
148 return reverse != result;
149 }
150
151 private boolean determineFamilyMatch( String family )
152 {
153 String test = family;
154 boolean reverse = false;
155
156 if ( test.startsWith( "!" ) )
157 {
158 reverse = true;
159 test = test.substring( 1 );
160 }
161
162 boolean result = Os.isFamily( test );
163
164 return reverse != result;
165 }
166
167 }