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 RepositoryAwareRequest {
44  
45      @Nonnull
46      Collection<? extends ArtifactCoordinates> getCoordinates();
47  
48      @Nonnull
49      static ArtifactResolverRequestBuilder builder() {
50          return new ArtifactResolverRequestBuilder();
51      }
52  
53      @Nonnull
54      static ArtifactResolverRequest build(
55              @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinates> coordinates) {
56          return builder()
57                  .session(requireNonNull(session, "session cannot be null"))
58                  .coordinates(requireNonNull(coordinates, "coordinates cannot be null"))
59                  .build();
60      }
61  
62      @Nonnull
63      static ArtifactResolverRequest build(
64              @Nonnull Session session,
65              @Nonnull Collection<? extends ArtifactCoordinates> coordinates,
66              List<RemoteRepository> repositories) {
67          return builder()
68                  .session(requireNonNull(session, "session cannot be null"))
69                  .coordinates(requireNonNull(coordinates, "coordinates cannot be null"))
70                  .repositories(repositories)
71                  .build();
72      }
73  
74      @NotThreadSafe
75      class ArtifactResolverRequestBuilder {
76          Session session;
77          RequestTrace trace;
78          Collection<? extends ArtifactCoordinates> coordinates;
79          List<RemoteRepository> repositories;
80  
81          ArtifactResolverRequestBuilder() {}
82  
83          @Nonnull
84          public ArtifactResolverRequestBuilder session(Session session) {
85              this.session = session;
86              return this;
87          }
88  
89          @Nonnull
90          public ArtifactResolverRequestBuilder trace(RequestTrace trace) {
91              this.trace = trace;
92              return this;
93          }
94  
95          @Nonnull
96          public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactCoordinates> coordinates) {
97              this.coordinates = coordinates;
98              return this;
99          }
100 
101         @Nonnull
102         public ArtifactResolverRequestBuilder repositories(List<RemoteRepository> repositories) {
103             this.repositories = repositories;
104             return this;
105         }
106 
107         @Nonnull
108         public ArtifactResolverRequest build() {
109             return new DefaultArtifactResolverRequest(session, trace, coordinates, repositories);
110         }
111 
112         private static class DefaultArtifactResolverRequest extends BaseRequest<Session>
113                 implements ArtifactResolverRequest {
114             @Nonnull
115             private final Collection<? extends ArtifactCoordinates> coordinates;
116 
117             @Nullable
118             private final List<RemoteRepository> repositories;
119 
120             DefaultArtifactResolverRequest(
121                     @Nonnull Session session,
122                     @Nullable RequestTrace trace,
123                     @Nonnull Collection<? extends ArtifactCoordinates> coordinates,
124                     @Nonnull List<RemoteRepository> repositories) {
125                 super(session, trace);
126                 this.coordinates = List.copyOf(requireNonNull(coordinates, "coordinates cannot be null"));
127                 this.repositories = validate(repositories);
128             }
129 
130             @Nonnull
131             @Override
132             public Collection<? extends ArtifactCoordinates> getCoordinates() {
133                 return coordinates;
134             }
135 
136             @Nullable
137             @Override
138             public List<RemoteRepository> getRepositories() {
139                 return repositories;
140             }
141 
142             @Override
143             public boolean equals(Object o) {
144                 return o instanceof DefaultArtifactResolverRequest that
145                         && Objects.equals(coordinates, that.coordinates)
146                         && Objects.equals(repositories, that.repositories);
147             }
148 
149             @Override
150             public int hashCode() {
151                 return Objects.hash(coordinates, repositories);
152             }
153 
154             @Override
155             @Nonnull
156             public String toString() {
157                 return "ArtifactResolverRequest[" + "coordinates="
158                         + coordinates + ", repositories="
159                         + repositories + ']';
160             }
161         }
162     }
163 }