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