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 static org.apache.maven.api.services.BaseRequest.nonNull;
22  
23  import java.util.Collection;
24  import org.apache.maven.api.ArtifactCoordinate;
25  import org.apache.maven.api.Session;
26  import org.apache.maven.api.annotations.Experimental;
27  import org.apache.maven.api.annotations.Immutable;
28  import org.apache.maven.api.annotations.Nonnull;
29  import org.apache.maven.api.annotations.NotThreadSafe;
30  
31  /**
32   * A request for resolving an artifact.
33   *
34   * @since 4.0
35   */
36  @Experimental
37  @Immutable
38  public interface ArtifactResolverRequest {
39      @Nonnull
40      Session getSession();
41  
42      @Nonnull
43      Collection<? extends ArtifactCoordinate> getCoordinates();
44  
45      @Nonnull
46      static ArtifactResolverRequestBuilder builder() {
47          return new ArtifactResolverRequestBuilder();
48      }
49  
50      @Nonnull
51      static ArtifactResolverRequest build(
52              @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinate> coordinates) {
53          return builder()
54                  .session(nonNull(session, "session cannot be null"))
55                  .coordinates(nonNull(coordinates, "coordinates cannot be null"))
56                  .build();
57      }
58  
59      @NotThreadSafe
60      class ArtifactResolverRequestBuilder {
61          Session session;
62          Collection<? extends ArtifactCoordinate> coordinates;
63  
64          ArtifactResolverRequestBuilder() {}
65  
66          @Nonnull
67          public ArtifactResolverRequestBuilder session(Session session) {
68              this.session = session;
69              return this;
70          }
71  
72          @Nonnull
73          public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactCoordinate> coordinates) {
74              this.coordinates = coordinates;
75              return this;
76          }
77  
78          @Nonnull
79          public ArtifactResolverRequest build() {
80              return new DefaultArtifactResolverRequest(session, coordinates);
81          }
82  
83          private static class DefaultArtifactResolverRequest extends BaseRequest implements ArtifactResolverRequest {
84              @Nonnull
85              private final Collection<? extends ArtifactCoordinate> coordinates;
86  
87              DefaultArtifactResolverRequest(
88                      @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinate> coordinates) {
89                  super(session);
90                  this.coordinates = unmodifiable(nonNull(coordinates, "coordinates cannot be null"));
91              }
92  
93              @Nonnull
94              @Override
95              public Collection<? extends ArtifactCoordinate> getCoordinates() {
96                  return coordinates;
97              }
98          }
99      }
100 }