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