View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.api.services;
20  
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.Collections;
24  
25  import org.apache.maven.api.ArtifactCoordinate;
26  import org.apache.maven.api.Dependency;
27  import org.apache.maven.api.Exclusion;
28  import org.apache.maven.api.Session;
29  import org.apache.maven.api.annotations.Experimental;
30  import org.apache.maven.api.annotations.Immutable;
31  import org.apache.maven.api.annotations.Nonnull;
32  import org.apache.maven.api.annotations.NotThreadSafe;
33  
34  import static org.apache.maven.api.services.BaseRequest.nonNull;
35  
36  /**
37   *
38   * @since 4.0.0
39   */
40  @Experimental
41  @Immutable
42  public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFactoryRequest {
43  
44      String getScope();
45  
46      boolean isOptional();
47  
48      @Nonnull
49      Collection<Exclusion> getExclusions();
50  
51      @Nonnull
52      static DependencyCoordinateFactoryRequest build(
53              @Nonnull Session session,
54              String groupId,
55              String artifactId,
56              String version,
57              String classifier,
58              String extension,
59              String type) {
60          return DependencyCoordinateFactoryRequest.builder()
61                  .session(nonNull(session, "session cannot be null"))
62                  .groupId(groupId)
63                  .artifactId(artifactId)
64                  .version(version)
65                  .classifier(classifier)
66                  .extension(extension)
67                  .type(type)
68                  .build();
69      }
70  
71      @Nonnull
72      static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
73          return builder()
74                  .session(nonNull(session, "session cannot be null"))
75                  .groupId(nonNull(coordinate, "coordinate cannot be null").getGroupId())
76                  .artifactId(coordinate.getArtifactId())
77                  .version(coordinate.getVersion().asString())
78                  .classifier(coordinate.getClassifier())
79                  .extension(coordinate.getExtension())
80                  .build();
81      }
82  
83      @Nonnull
84      static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull Dependency dependency) {
85          return builder()
86                  .session(nonNull(session, "session cannot be null"))
87                  .groupId(nonNull(dependency, "dependency").getGroupId())
88                  .artifactId(dependency.getArtifactId())
89                  .version(dependency.getVersion().asString())
90                  .classifier(dependency.getClassifier())
91                  .extension(dependency.getExtension())
92                  .type(dependency.getType().id())
93                  .scope(dependency.getScope().id())
94                  .optional(dependency.isOptional())
95                  .build();
96      }
97  
98      @Nonnull
99      static DependencyCoordinateFactoryRequestBuilder builder() {
100         return new DependencyCoordinateFactoryRequestBuilder();
101     }
102 
103     @NotThreadSafe
104     class DependencyCoordinateFactoryRequestBuilder {
105         private Session session;
106         private String groupId;
107         private String artifactId;
108         private String version;
109         private String classifier;
110         private String extension;
111         private String type;
112         private String coordinateString;
113         private String scope;
114         private boolean optional;
115         private Collection<Exclusion> exclusions = Collections.emptyList();
116 
117         DependencyCoordinateFactoryRequestBuilder() {}
118 
119         public DependencyCoordinateFactoryRequestBuilder session(Session session) {
120             this.session = session;
121             return this;
122         }
123 
124         public DependencyCoordinateFactoryRequestBuilder groupId(String groupId) {
125             this.groupId = groupId;
126             return this;
127         }
128 
129         public DependencyCoordinateFactoryRequestBuilder artifactId(String artifactId) {
130             this.artifactId = artifactId;
131             return this;
132         }
133 
134         public DependencyCoordinateFactoryRequestBuilder version(String version) {
135             this.version = version;
136             return this;
137         }
138 
139         public DependencyCoordinateFactoryRequestBuilder classifier(String classifier) {
140             this.classifier = classifier;
141             return this;
142         }
143 
144         public DependencyCoordinateFactoryRequestBuilder extension(String extension) {
145             this.extension = extension;
146             return this;
147         }
148 
149         public DependencyCoordinateFactoryRequestBuilder type(String type) {
150             this.type = type;
151             return this;
152         }
153 
154         public DependencyCoordinateFactoryRequestBuilder coordinateString(String coordinateString) {
155             this.coordinateString = coordinateString;
156             return this;
157         }
158 
159         public DependencyCoordinateFactoryRequestBuilder scope(String scope) {
160             this.scope = scope;
161             return this;
162         }
163 
164         public DependencyCoordinateFactoryRequestBuilder optional(boolean optional) {
165             this.optional = optional;
166             return this;
167         }
168 
169         public DependencyCoordinateFactoryRequestBuilder exclusions(Collection<Exclusion> exclusions) {
170             if (exclusions != null) {
171                 if (this.exclusions.isEmpty()) {
172                     this.exclusions = new ArrayList<>();
173                 }
174                 this.exclusions.addAll(exclusions);
175             }
176             return this;
177         }
178 
179         public DependencyCoordinateFactoryRequestBuilder exclusion(Exclusion exclusion) {
180             if (exclusion != null) {
181                 if (this.exclusions.isEmpty()) {
182                     this.exclusions = new ArrayList<>();
183                 }
184                 this.exclusions.add(exclusion);
185             }
186             return this;
187         }
188 
189         public DependencyCoordinateFactoryRequest build() {
190             return new DefaultDependencyCoordinateFactoryRequest(
191                     session,
192                     groupId,
193                     artifactId,
194                     version,
195                     classifier,
196                     extension,
197                     type,
198                     coordinateString,
199                     scope,
200                     optional,
201                     exclusions);
202         }
203 
204         private static class DefaultDependencyCoordinateFactoryRequest extends BaseRequest
205                 implements DependencyCoordinateFactoryRequest {
206             private final String groupId;
207             private final String artifactId;
208             private final String version;
209             private final String classifier;
210             private final String extension;
211             private final String type;
212             private final String coordinateString;
213             private final String scope;
214             private final boolean optional;
215             private final Collection<Exclusion> exclusions;
216 
217             @SuppressWarnings("checkstyle:ParameterNumber")
218             private DefaultDependencyCoordinateFactoryRequest(
219                     @Nonnull Session session,
220                     String groupId,
221                     String artifactId,
222                     String version,
223                     String classifier,
224                     String extension,
225                     String type,
226                     String coordinateString,
227                     String scope,
228                     boolean optional,
229                     Collection<Exclusion> exclusions) {
230                 super(session);
231                 this.groupId = groupId;
232                 this.artifactId = artifactId;
233                 this.version = version;
234                 this.classifier = classifier;
235                 this.extension = extension;
236                 this.type = type;
237                 this.coordinateString = coordinateString;
238                 this.scope = scope;
239                 this.optional = optional;
240                 this.exclusions = exclusions;
241             }
242 
243             @Override
244             public String getGroupId() {
245                 return groupId;
246             }
247 
248             @Override
249             public String getArtifactId() {
250                 return artifactId;
251             }
252 
253             @Override
254             public String getVersion() {
255                 return version;
256             }
257 
258             @Override
259             public String getClassifier() {
260                 return classifier;
261             }
262 
263             @Override
264             public String getExtension() {
265                 return extension;
266             }
267 
268             @Override
269             public String getType() {
270                 return type;
271             }
272 
273             public String getCoordinateString() {
274                 return coordinateString;
275             }
276 
277             @Override
278             public String getScope() {
279                 return scope;
280             }
281 
282             @Override
283             public boolean isOptional() {
284                 return optional;
285             }
286 
287             @Nonnull
288             @Override
289             public Collection<Exclusion> getExclusions() {
290                 return exclusions;
291             }
292         }
293     }
294 }