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 }