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 static org.apache.maven.api.services.BaseRequest.nonNull;
22  
23  import java.nio.file.Path;
24  import java.util.Optional;
25  import org.apache.maven.api.Artifact;
26  import org.apache.maven.api.ArtifactCoordinate;
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  /**
35   * Request used to build a {@link org.apache.maven.api.Project} using
36   * the {@link ProjectBuilder} service.
37   *
38   * @since 4.0
39   */
40  @Experimental
41  @Immutable
42  public interface ProjectBuilderRequest {
43  
44      @Nonnull
45      Session getSession();
46  
47      @Nonnull
48      Optional<Path> getPath();
49  
50      @Nonnull
51      Optional<Source> getSource();
52  
53      @Nonnull
54      Optional<Artifact> getArtifact();
55  
56      @Nonnull
57      Optional<ArtifactCoordinate> getCoordinate();
58  
59      boolean isAllowStubModel();
60  
61      boolean isRecursive();
62  
63      boolean isProcessPlugins();
64  
65      boolean isResolveDependencies();
66  
67      @Nonnull
68      static ProjectBuilderRequest build(@Nonnull Session session, @Nonnull Source source) {
69          return builder()
70                  .session(nonNull(session, "session cannot be null"))
71                  .source(nonNull(source, "source cannot be null"))
72                  .build();
73      }
74  
75      @Nonnull
76      static ProjectBuilderRequest build(@Nonnull Session session, @Nonnull Path path) {
77          return builder()
78                  .session(nonNull(session, "session cannot be null"))
79                  .path(nonNull(path, "path cannot be null"))
80                  .build();
81      }
82  
83      @Nonnull
84      static ProjectBuilderRequest build(@Nonnull Session session, @Nonnull Artifact artifact) {
85          return builder()
86                  .session(nonNull(session, "session cannot be null"))
87                  .artifact(nonNull(artifact, "artifact cannot be null"))
88                  .build();
89      }
90  
91      @Nonnull
92      static ProjectBuilderRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
93          return builder()
94                  .session(nonNull(session, "session cannot be null"))
95                  .coordinate(nonNull(coordinate, "coordinate cannot be null"))
96                  .build();
97      }
98  
99      @Nonnull
100     static ProjectBuilderRequestBuilder builder() {
101         return new ProjectBuilderRequestBuilder();
102     }
103 
104     @NotThreadSafe
105     class ProjectBuilderRequestBuilder {
106         Session session;
107         Path path;
108         Source source;
109         Artifact artifact;
110         ArtifactCoordinate coordinate;
111         boolean allowStubModel;
112         boolean recursive;
113         boolean processPlugins = true;
114         boolean resolveDependencies = true;
115 
116         ProjectBuilderRequestBuilder() {}
117 
118         public ProjectBuilderRequestBuilder session(Session session) {
119             this.session = session;
120             return this;
121         }
122 
123         public ProjectBuilderRequestBuilder path(Path path) {
124             this.path = path;
125             return this;
126         }
127 
128         public ProjectBuilderRequestBuilder source(Source source) {
129             this.source = source;
130             return this;
131         }
132 
133         public ProjectBuilderRequestBuilder artifact(Artifact artifact) {
134             this.artifact = artifact;
135             return this;
136         }
137 
138         public ProjectBuilderRequestBuilder coordinate(ArtifactCoordinate coordinate) {
139             this.coordinate = coordinate;
140             return this;
141         }
142 
143         public ProjectBuilderRequestBuilder processPlugins(boolean processPlugins) {
144             this.processPlugins = processPlugins;
145             return this;
146         }
147 
148         public ProjectBuilderRequestBuilder resolveDependencies(boolean resolveDependencies) {
149             this.resolveDependencies = resolveDependencies;
150             return this;
151         }
152 
153         public ProjectBuilderRequest build() {
154             return new DefaultProjectBuilderRequest(
155                     session,
156                     path,
157                     source,
158                     artifact,
159                     coordinate,
160                     allowStubModel,
161                     recursive,
162                     processPlugins,
163                     resolveDependencies);
164         }
165 
166         private static class DefaultProjectBuilderRequest extends BaseRequest implements ProjectBuilderRequest {
167             private final Path path;
168             private final Source source;
169             private final Artifact artifact;
170             private final ArtifactCoordinate coordinate;
171             private final boolean allowStubModel;
172             private final boolean recursive;
173             private final boolean processPlugins;
174             private final boolean resolveDependencies;
175 
176             @SuppressWarnings("checkstyle:ParameterNumber")
177             DefaultProjectBuilderRequest(
178                     @Nonnull Session session,
179                     @Nullable Path path,
180                     @Nullable Source source,
181                     @Nullable Artifact artifact,
182                     @Nullable ArtifactCoordinate coordinate,
183                     boolean allowStubModel,
184                     boolean recursive,
185                     boolean processPlugins,
186                     boolean resolveDependencies) {
187                 super(session);
188                 this.path = path;
189                 this.source = source;
190                 this.artifact = artifact;
191                 this.coordinate = coordinate;
192                 this.allowStubModel = allowStubModel;
193                 this.recursive = recursive;
194                 this.processPlugins = processPlugins;
195                 this.resolveDependencies = resolveDependencies;
196             }
197 
198             @Nonnull
199             @Override
200             public Optional<Path> getPath() {
201                 return Optional.ofNullable(path);
202             }
203 
204             @Nonnull
205             @Override
206             public Optional<Source> getSource() {
207                 return Optional.ofNullable(source);
208             }
209 
210             @Nonnull
211             @Override
212             public Optional<Artifact> getArtifact() {
213                 return Optional.ofNullable(artifact);
214             }
215 
216             @Nonnull
217             @Override
218             public Optional<ArtifactCoordinate> getCoordinate() {
219                 return Optional.ofNullable(coordinate);
220             }
221 
222             @Override
223             public boolean isAllowStubModel() {
224                 return allowStubModel;
225             }
226 
227             @Override
228             public boolean isRecursive() {
229                 return recursive;
230             }
231 
232             @Override
233             public boolean isProcessPlugins() {
234                 return processPlugins;
235             }
236 
237             @Override
238             public boolean isResolveDependencies() {
239                 return resolveDependencies;
240             }
241         }
242     }
243 }