1 package org.apache.maven.execution;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25 import java.util.Set;
26 import java.util.function.Predicate;
27 import java.util.stream.Collectors;
28 import java.util.stream.Stream;
29
30 import static java.util.stream.Collectors.toSet;
31
32
33
34
35
36 public class ProjectActivation
37 {
38 private static class ProjectActivationSettings
39 {
40
41
42
43 final String selector;
44
45
46
47
48 final ActivationSettings activationSettings;
49
50 ProjectActivationSettings( String selector, ActivationSettings activationSettings )
51 {
52 this.selector = selector;
53 this.activationSettings = activationSettings;
54 }
55 }
56
57
58
59
60 private final List<ProjectActivationSettings> activations = new ArrayList<>();
61
62
63
64
65
66
67
68 public void addProjectActivation( String selector, boolean active, boolean optional )
69 {
70 final ActivationSettings settings = ActivationSettings.of( active, optional );
71 this.activations.add( new ProjectActivationSettings( selector, settings ) );
72 }
73
74 private Stream<ProjectActivationSettings> getProjects( final Predicate<ActivationSettings> predicate )
75 {
76 return this.activations.stream()
77 .filter( activation -> predicate.test( activation.activationSettings ) );
78 }
79
80 private Set<String> getProjectSelectors( final Predicate<ActivationSettings> predicate )
81 {
82 return getProjects( predicate )
83 .map( activation -> activation.selector )
84 .collect( toSet() );
85 }
86
87
88
89
90 public Set<String> getRequiredActiveProjectSelectors()
91 {
92 return getProjectSelectors( pa -> !pa.optional && pa.active );
93 }
94
95
96
97
98 public Set<String> getOptionalActiveProjectSelectors()
99 {
100 return getProjectSelectors( pa -> pa.optional && pa.active );
101 }
102
103
104
105
106 public Set<String> getRequiredInactiveProjectSelectors()
107 {
108 return getProjectSelectors( pa -> !pa.optional && !pa.active );
109 }
110
111
112
113
114 public Set<String> getOptionalInactiveProjectSelectors()
115 {
116 return getProjectSelectors( pa -> pa.optional && !pa.active );
117 }
118
119
120
121
122
123
124 @Deprecated
125 public List<String> getSelectedProjects()
126 {
127 return Collections.unmodifiableList( new ArrayList<>( getProjectSelectors( pa -> pa.active ) ) );
128 }
129
130
131
132
133
134
135 @Deprecated
136 public List<String> getExcludedProjects()
137 {
138 return Collections.unmodifiableList( new ArrayList<>( getProjectSelectors( pa -> !pa.active ) ) );
139 }
140
141
142
143
144
145
146 @Deprecated
147 public void overwriteActiveProjects( List<String> activeProjectSelectors )
148 {
149 List<ProjectActivationSettings> projects = getProjects( pa -> pa.active ).collect( Collectors.toList() );
150 this.activations.removeAll( projects );
151 activeProjectSelectors.forEach( this::activateOptionalProject );
152 }
153
154
155
156
157
158
159 @Deprecated
160 public void overwriteInactiveProjects( List<String> inactiveProjectSelectors )
161 {
162 List<ProjectActivationSettings> projects = getProjects( pa -> !pa.active ).collect( Collectors.toList() );
163 this.activations.removeAll( projects );
164 inactiveProjectSelectors.forEach( this::deactivateOptionalProject );
165 }
166
167
168
169
170
171 public void activateRequiredProject( String selector )
172 {
173 this.activations.add( new ProjectActivationSettings( selector, ActivationSettings.ACTIVATION_REQUIRED ) );
174 }
175
176
177
178
179
180 public void activateOptionalProject( String selector )
181 {
182 this.activations.add( new ProjectActivationSettings( selector, ActivationSettings.ACTIVATION_OPTIONAL ) );
183 }
184
185
186
187
188
189 public void deactivateRequiredProject( String selector )
190 {
191 this.activations.add( new ProjectActivationSettings( selector, ActivationSettings.DEACTIVATION_REQUIRED ) );
192 }
193
194
195
196
197
198 public void deactivateOptionalProject( String selector )
199 {
200 this.activations.add( new ProjectActivationSettings( selector, ActivationSettings.DEACTIVATION_OPTIONAL ) );
201 }
202
203 public boolean isEmpty()
204 {
205 return this.activations.isEmpty();
206 }
207 }