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.Collection;
22  import java.util.List;
23  import java.util.Objects;
24  
25  import org.apache.maven.api.ArtifactCoordinates;
26  import org.apache.maven.api.RemoteRepository;
27  import org.apache.maven.api.Session;
28  import org.apache.maven.api.annotations.Experimental;
29  import org.apache.maven.api.annotations.Immutable;
30  import org.apache.maven.api.annotations.Nonnull;
31  import org.apache.maven.api.annotations.NotThreadSafe;
32  import org.apache.maven.api.annotations.Nullable;
33  
34  import static java.util.Objects.requireNonNull;
35  
36  /**
37   * A request for resolving an artifact.
38   *
39   * @since 4.0.0
40   */
41  @Experimental
42  @Immutable
43  public interface ArtifactResolverRequest extends Request<Session> {
44  
45      @Nonnull
46      Collection<? extends ArtifactCoordinates> getCoordinates();
47  
48      @Nullable
49      List<RemoteRepository> getRepositories();
50  
51      @Nonnull
52      static ArtifactResolverRequestBuilder builder() {
53          return new ArtifactResolverRequestBuilder();
54      }
55  
56      @Nonnull
57      static ArtifactResolverRequest build(
58              @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinates> coordinates) {
59          return builder()
60                  .session(requireNonNull(session, "session cannot be null"))
61                  .coordinates(requireNonNull(coordinates, "coordinates cannot be null"))
62                  .build();
63      }
64  
65      @Nonnull
66      static ArtifactResolverRequest build(
67              @Nonnull Session session,
68              @Nonnull Collection<? extends ArtifactCoordinates> coordinates,
69              List<RemoteRepository> repositories) {
70          return builder()
71                  .session(requireNonNull(session, "session cannot be null"))
72                  .coordinates(requireNonNull(coordinates, "coordinates cannot be null"))
73                  .repositories(repositories)
74                  .build();
75      }
76  
77      @NotThreadSafe
78      class ArtifactResolverRequestBuilder {
79          Session session;
80          RequestTrace trace;
81          Collection<? extends ArtifactCoordinates> coordinates;
82          List<RemoteRepository> repositories;
83  
84          ArtifactResolverRequestBuilder() {}
85  
86          @Nonnull
87          public ArtifactResolverRequestBuilder session(Session session) {
88              this.session = session;
89              return this;
90          }
91  
92          @Nonnull
93          public ArtifactResolverRequestBuilder trace(RequestTrace trace) {
94              this.trace = trace;
95              return this;
96          }
97  
98          @Nonnull
99          public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactCoordinates> coordinates) {
100             this.coordinates = coordinates;
101             return this;
102         }
103 
104         @Nonnull
105         public ArtifactResolverRequestBuilder repositories(List<RemoteRepository> repositories) {
106             this.repositories = repositories;
107             return this;
108         }
109 
110         @Nonnull
111         public ArtifactResolverRequest build() {
112             return new DefaultArtifactResolverRequest(session, trace, coordinates, repositories);
113         }
114 
115         private static class DefaultArtifactResolverRequest extends BaseRequest<Session>
116                 implements ArtifactResolverRequest {
117             @Nonnull
118             private final Collection<? extends ArtifactCoordinates> coordinates;
119 
120             @Nullable
121             private final List<RemoteRepository> repositories;
122 
123             DefaultArtifactResolverRequest(
124                     @Nonnull Session session,
125                     @Nullable RequestTrace trace,
126                     @Nonnull Collection<? extends ArtifactCoordinates> coordinates,
127                     @Nonnull List<RemoteRepository> repositories) {
128                 super(session, trace);
129                 this.coordinates = List.copyOf(requireNonNull(coordinates, "coordinates cannot be null"));
130                 this.repositories = repositories;
131             }
132 
133             @Nonnull
134             @Override
135             public Collection<? extends ArtifactCoordinates> getCoordinates() {
136                 return coordinates;
137             }
138 
139             @Nullable
140             @Override
141             public List<RemoteRepository> getRepositories() {
142                 return repositories;
143             }
144 
145             @Override
146             public boolean equals(Object o) {
147                 return o instanceof DefaultArtifactResolverRequest that
148                         && Objects.equals(coordinates, that.coordinates)
149                         && Objects.equals(repositories, that.repositories);
150             }
151 
152             @Override
153             public int hashCode() {
154                 return Objects.hash(coordinates, repositories);
155             }
156 
157             @Override
158             @Nonnull
159             public String toString() {
160                 return "ArtifactResolverRequest[" + "coordinates="
161                         + coordinates + ", repositories="
162                         + repositories + ']';
163             }
164         }
165     }
166 }