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  
23  import org.apache.maven.api.ArtifactCoordinates;
24  import org.apache.maven.api.RemoteRepository;
25  import org.apache.maven.api.Session;
26  import org.apache.maven.api.annotations.Experimental;
27  import org.apache.maven.api.annotations.Nonnull;
28  import org.apache.maven.api.annotations.NotThreadSafe;
29  import org.apache.maven.api.annotations.Nullable;
30  
31  import static org.apache.maven.api.services.BaseRequest.nonNull;
32  
33  /**
34   *
35   * @since 4.0.0
36   */
37  @Experimental
38  public interface VersionRangeResolverRequest {
39  
40      @Nonnull
41      Session getSession();
42  
43      @Nonnull
44      ArtifactCoordinates getArtifactCoordinates();
45  
46      @Nullable
47      List<RemoteRepository> getRepositories();
48  
49      @Nonnull
50      static VersionRangeResolverRequest build(
51              @Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates) {
52          return build(session, artifactCoordinates, null);
53      }
54  
55      @Nonnull
56      static VersionRangeResolverRequest build(
57              @Nonnull Session session,
58              @Nonnull ArtifactCoordinates artifactCoordinates,
59              @Nullable List<RemoteRepository> repositories) {
60          return builder()
61                  .session(nonNull(session, "session cannot be null"))
62                  .artifactCoordinates(nonNull(artifactCoordinates, "artifactCoordinates cannot be null"))
63                  .repositories(repositories)
64                  .build();
65      }
66  
67      @Nonnull
68      static VersionResolverRequestBuilder builder() {
69          return new VersionResolverRequestBuilder();
70      }
71  
72      @NotThreadSafe
73      class VersionResolverRequestBuilder {
74          Session session;
75          ArtifactCoordinates artifactCoordinates;
76          List<RemoteRepository> repositories;
77  
78          public VersionResolverRequestBuilder session(Session session) {
79              this.session = session;
80              return this;
81          }
82  
83          public VersionResolverRequestBuilder artifactCoordinates(ArtifactCoordinates artifactCoordinates) {
84              this.artifactCoordinates = artifactCoordinates;
85              return this;
86          }
87  
88          public VersionResolverRequestBuilder repositories(List<RemoteRepository> repositories) {
89              this.repositories = repositories;
90              return this;
91          }
92  
93          public VersionRangeResolverRequest build() {
94              return new DefaultVersionResolverRequest(session, artifactCoordinates, repositories);
95          }
96  
97          private static class DefaultVersionResolverRequest extends BaseRequest<Session>
98                  implements VersionRangeResolverRequest {
99              private final ArtifactCoordinates artifactCoordinates;
100             private final List<RemoteRepository> repositories;
101 
102             @SuppressWarnings("checkstyle:ParameterNumber")
103             DefaultVersionResolverRequest(
104                     @Nonnull Session session,
105                     @Nonnull ArtifactCoordinates artifactCoordinates,
106                     @Nullable List<RemoteRepository> repositories) {
107                 super(session);
108                 this.artifactCoordinates = artifactCoordinates;
109                 this.repositories = repositories;
110             }
111 
112             @Nonnull
113             @Override
114             public ArtifactCoordinates getArtifactCoordinates() {
115                 return artifactCoordinates;
116             }
117 
118             @Nullable
119             @Override
120             public List<RemoteRepository> getRepositories() {
121                 return repositories;
122             }
123         }
124     }
125 }