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