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