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.Objects;
22  
23  import org.apache.maven.api.ArtifactCoordinates;
24  import org.apache.maven.api.Session;
25  import org.apache.maven.api.annotations.Experimental;
26  import org.apache.maven.api.annotations.Immutable;
27  import org.apache.maven.api.annotations.Nonnull;
28  import org.apache.maven.api.annotations.NotThreadSafe;
29  
30  import static java.util.Objects.requireNonNull;
31  
32  /**
33   * A request for creating a {@link ArtifactCoordinates} object.
34   *
35   * @since 4.0.0
36   */
37  @Experimental
38  @Immutable
39  public interface ArtifactCoordinatesFactoryRequest extends Request<Session> {
40  
41      String getGroupId();
42  
43      String getArtifactId();
44  
45      String getVersion();
46  
47      String getClassifier();
48  
49      String getExtension();
50  
51      String getType();
52  
53      String getCoordinatesString();
54  
55      @Nonnull
56      static ArtifactCoordinatesFactoryRequest build(
57              @Nonnull Session session, String groupId, String artifactId, String version, String extension) {
58          return ArtifactCoordinatesFactoryRequest.builder()
59                  .session(requireNonNull(session, "session"))
60                  .groupId(groupId)
61                  .artifactId(artifactId)
62                  .version(version)
63                  .extension(extension)
64                  .build();
65      }
66  
67      @Nonnull
68      static ArtifactCoordinatesFactoryRequest build(
69              @Nonnull Session session,
70              String groupId,
71              String artifactId,
72              String version,
73              String classifier,
74              String extension,
75              String type) {
76          return ArtifactCoordinatesFactoryRequest.builder()
77                  .session(requireNonNull(session, "session"))
78                  .groupId(groupId)
79                  .artifactId(artifactId)
80                  .version(version)
81                  .classifier(classifier)
82                  .extension(extension)
83                  .type(type)
84                  .build();
85      }
86  
87      @Nonnull
88      static ArtifactCoordinatesFactoryRequest build(@Nonnull Session session, @Nonnull String coordinateString) {
89          return ArtifactCoordinatesFactoryRequest.builder()
90                  .session(requireNonNull(session, "session"))
91                  .coordinateString(requireNonNull(coordinateString, "coordinateString"))
92                  .build();
93      }
94  
95      @Nonnull
96      static ArtifactCoordinatesFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinates coordinates) {
97          return ArtifactCoordinatesFactoryRequest.builder()
98                  .session(requireNonNull(session, "session"))
99                  .groupId(requireNonNull(coordinates, "coordinates").getGroupId())
100                 .artifactId(coordinates.getArtifactId())
101                 .classifier(coordinates.getClassifier())
102                 .version(coordinates.getVersionConstraint().asString())
103                 .extension(coordinates.getExtension())
104                 .build();
105     }
106 
107     static ArtifactFactoryRequestBuilder builder() {
108         return new ArtifactFactoryRequestBuilder();
109     }
110 
111     @NotThreadSafe
112     class ArtifactFactoryRequestBuilder {
113         private Session session;
114         private RequestTrace trace;
115         private String groupId;
116         private String artifactId;
117         private String version;
118         private String classifier;
119         private String extension;
120         private String type;
121         private String coordinateString;
122 
123         ArtifactFactoryRequestBuilder() {}
124 
125         public ArtifactFactoryRequestBuilder session(Session session) {
126             this.session = session;
127             return this;
128         }
129 
130         public ArtifactFactoryRequestBuilder trace(RequestTrace trace) {
131             this.trace = trace;
132             return this;
133         }
134 
135         public ArtifactFactoryRequestBuilder groupId(String groupId) {
136             this.groupId = groupId;
137             return this;
138         }
139 
140         public ArtifactFactoryRequestBuilder artifactId(String artifactId) {
141             this.artifactId = artifactId;
142             return this;
143         }
144 
145         public ArtifactFactoryRequestBuilder version(String version) {
146             this.version = version;
147             return this;
148         }
149 
150         public ArtifactFactoryRequestBuilder classifier(String classifier) {
151             this.classifier = classifier;
152             return this;
153         }
154 
155         public ArtifactFactoryRequestBuilder extension(String extension) {
156             this.extension = extension;
157             return this;
158         }
159 
160         public ArtifactFactoryRequestBuilder type(String type) {
161             this.type = type;
162             return this;
163         }
164 
165         public ArtifactFactoryRequestBuilder coordinateString(String coordinateString) {
166             this.coordinateString = coordinateString;
167             return this;
168         }
169 
170         public ArtifactCoordinatesFactoryRequest build() {
171             return new DefaultArtifactFactoryRequestArtifact(
172                     session, trace, groupId, artifactId, version, classifier, extension, type, coordinateString);
173         }
174 
175         private static class DefaultArtifactFactoryRequestArtifact extends BaseRequest<Session>
176                 implements ArtifactCoordinatesFactoryRequest {
177             private final String groupId;
178             private final String artifactId;
179             private final String version;
180             private final String classifier;
181             private final String extension;
182             private final String type;
183             private final String coordinatesString;
184 
185             @SuppressWarnings("checkstyle:ParameterNumber")
186             DefaultArtifactFactoryRequestArtifact(
187                     @Nonnull Session session,
188                     RequestTrace trace,
189                     String groupId,
190                     String artifactId,
191                     String version,
192                     String classifier,
193                     String extension,
194                     String type,
195                     String coordinatesString) {
196                 super(session, trace);
197                 this.groupId = groupId;
198                 this.artifactId = artifactId;
199                 this.version = version;
200                 this.classifier = classifier;
201                 this.extension = extension;
202                 this.type = type;
203                 this.coordinatesString = coordinatesString;
204             }
205 
206             @Override
207             public String getGroupId() {
208                 return groupId;
209             }
210 
211             @Override
212             public String getArtifactId() {
213                 return artifactId;
214             }
215 
216             @Override
217             public String getVersion() {
218                 return version;
219             }
220 
221             @Override
222             public String getClassifier() {
223                 return classifier;
224             }
225 
226             @Override
227             public String getExtension() {
228                 return extension;
229             }
230 
231             @Override
232             public String getType() {
233                 return type;
234             }
235 
236             public String getCoordinatesString() {
237                 return coordinatesString;
238             }
239 
240             @Override
241             public boolean equals(Object o) {
242                 return o instanceof DefaultArtifactFactoryRequestArtifact that
243                         && Objects.equals(groupId, that.groupId)
244                         && Objects.equals(artifactId, that.artifactId)
245                         && Objects.equals(version, that.version)
246                         && Objects.equals(classifier, that.classifier)
247                         && Objects.equals(extension, that.extension)
248                         && Objects.equals(type, that.type)
249                         && Objects.equals(coordinatesString, that.coordinatesString);
250             }
251 
252             @Override
253             public int hashCode() {
254                 return Objects.hash(groupId, artifactId, version, classifier, extension, type, coordinatesString);
255             }
256 
257             @Override
258             public String toString() {
259                 return "ArtifactFactoryRequestArtifact[" + "groupId='"
260                         + groupId + '\'' + ", artifactId='"
261                         + artifactId + '\'' + ", version='"
262                         + version + '\'' + ", classifier='"
263                         + classifier + '\'' + ", extension='"
264                         + extension + '\'' + ", type='"
265                         + type + '\'' + ", coordinatesString='"
266                         + coordinatesString + '\'' + ']';
267             }
268         }
269     }
270 }