1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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 }