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 }