View Javadoc
1   package org.apache.maven.api.services;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.api.ArtifactCoordinate;
23  import org.apache.maven.api.annotations.Experimental;
24  import org.apache.maven.api.annotations.Immutable;
25  import org.apache.maven.api.annotations.Nonnull;
26  import org.apache.maven.api.annotations.NotThreadSafe;
27  import org.apache.maven.api.annotations.Nullable;
28  
29  import java.nio.file.Path;
30  import java.util.Optional;
31  
32  import org.apache.maven.api.Session;
33  import org.apache.maven.api.Artifact;
34  
35  import static org.apache.maven.api.services.BaseRequest.nonNull;
36  
37  /**
38   * Request used to build a {@link org.apache.maven.api.Project} using
39   * the {@link ProjectBuilder} service.
40   *
41   * @since 4.0
42   */
43  @Experimental
44  @Immutable
45  public interface ProjectBuilderRequest
46  {
47  
48      @Nonnull
49      Session getSession();
50  
51      @Nonnull
52      Optional<Path> getPath();
53  
54      @Nonnull
55      Optional<ProjectBuilderSource> getSource();
56  
57      @Nonnull
58      Optional<Artifact> getArtifact();
59  
60      @Nonnull
61      Optional<ArtifactCoordinate> getCoordinate();
62  
63      boolean isAllowStubModel();
64  
65      boolean isRecursive();
66  
67      boolean isProcessPlugins();
68  
69      boolean isResolveDependencies();
70  
71      @Nonnull
72      static ProjectBuilderRequest build( @Nonnull Session session, @Nonnull ProjectBuilderSource source )
73      {
74          return builder()
75                  .session( nonNull( session, "session cannot be null" ) )
76                  .source( nonNull( source, "source cannot be null" ) )
77                  .build();
78      }
79  
80      @Nonnull
81      static ProjectBuilderRequest build( @Nonnull Session session, @Nonnull Path path )
82      {
83          return builder()
84                  .session( nonNull( session, "session cannot be null" ) )
85                  .path( nonNull( path, "path cannot be null" ) )
86                  .build();
87      }
88  
89      @Nonnull
90      static ProjectBuilderRequest build( @Nonnull Session session, @Nonnull Artifact artifact )
91      {
92          return builder()
93                  .session( nonNull( session, "session cannot be null" ) )
94                  .artifact( nonNull( artifact, "artifact cannot be null" ) )
95                  .build();
96      }
97  
98      @Nonnull
99      static ProjectBuilderRequest build( @Nonnull Session session, @Nonnull ArtifactCoordinate coordinate )
100     {
101         return builder()
102                 .session( nonNull( session, "session cannot be null" ) )
103                 .coordinate( nonNull( coordinate, "coordinate cannot be null" ) )
104                 .build();
105     }
106 
107     @Nonnull
108     static ProjectBuilderRequestBuilder builder()
109     {
110         return new ProjectBuilderRequestBuilder();
111     }
112 
113     @NotThreadSafe
114     class ProjectBuilderRequestBuilder
115     {
116         Session session;
117         Path path;
118         ProjectBuilderSource source;
119         Artifact artifact;
120         ArtifactCoordinate coordinate;
121         boolean allowStubModel;
122         boolean recursive;
123         boolean processPlugins = true;
124         boolean resolveDependencies = true;
125 
126         ProjectBuilderRequestBuilder()
127         {
128         }
129 
130         public ProjectBuilderRequestBuilder session( Session session )
131         {
132             this.session = session;
133             return this;
134         }
135 
136         public ProjectBuilderRequestBuilder path( Path path )
137         {
138             this.path = path;
139             return this;
140         }
141 
142         public ProjectBuilderRequestBuilder source( ProjectBuilderSource source )
143         {
144             this.source = source;
145             return this;
146         }
147 
148         public ProjectBuilderRequestBuilder artifact( Artifact artifact )
149         {
150             this.artifact = artifact;
151             return this;
152         }
153 
154         public ProjectBuilderRequestBuilder coordinate( ArtifactCoordinate coordinate )
155         {
156             this.coordinate = coordinate;
157             return this;
158         }
159 
160         public ProjectBuilderRequestBuilder processPlugins( boolean processPlugins )
161         {
162             this.processPlugins = processPlugins;
163             return this;
164         }
165 
166         public ProjectBuilderRequestBuilder resolveDependencies( boolean resolveDependencies )
167         {
168             this.resolveDependencies = resolveDependencies;
169             return this;
170         }
171 
172         public ProjectBuilderRequest build()
173         {
174             return new DefaultProjectBuilderRequest( session, path, source, artifact, coordinate,
175                     allowStubModel, recursive, processPlugins, resolveDependencies );
176         }
177 
178         private static class DefaultProjectBuilderRequest extends BaseRequest
179             implements ProjectBuilderRequest
180         {
181             private final Path path;
182             private final ProjectBuilderSource source;
183             private final Artifact artifact;
184             private final ArtifactCoordinate coordinate;
185             private final boolean allowStubModel;
186             private final boolean recursive;
187             private final boolean processPlugins;
188             private final boolean resolveDependencies;
189 
190             @SuppressWarnings( "checkstyle:ParameterNumber" )
191             DefaultProjectBuilderRequest( @Nonnull Session session,
192                                           @Nullable Path path,
193                                           @Nullable ProjectBuilderSource source,
194                                           @Nullable Artifact artifact,
195                                           @Nullable ArtifactCoordinate coordinate,
196                                           boolean allowStubModel,
197                                           boolean recursive,
198                                           boolean processPlugins,
199                                           boolean resolveDependencies )
200             {
201                 super( session );
202                 this.path = path;
203                 this.source = source;
204                 this.artifact = artifact;
205                 this.coordinate = coordinate;
206                 this.allowStubModel = allowStubModel;
207                 this.recursive = recursive;
208                 this.processPlugins = processPlugins;
209                 this.resolveDependencies = resolveDependencies;
210             }
211 
212             @Nonnull
213             @Override
214             public Optional<Path> getPath()
215             {
216                 return Optional.ofNullable( path );
217             }
218 
219             @Nonnull
220             @Override
221             public Optional<ProjectBuilderSource> getSource()
222             {
223                 return Optional.ofNullable( source );
224             }
225 
226             @Nonnull
227             @Override
228             public Optional<Artifact> getArtifact()
229             {
230                 return Optional.ofNullable( artifact );
231             }
232 
233             @Nonnull
234             @Override
235             public Optional<ArtifactCoordinate> getCoordinate()
236             {
237                 return Optional.ofNullable( coordinate );
238             }
239 
240             @Override
241             public boolean isAllowStubModel()
242             {
243                 return allowStubModel;
244             }
245 
246             @Override
247             public boolean isRecursive()
248             {
249                 return recursive;
250             }
251 
252             @Override
253             public boolean isProcessPlugins()
254             {
255                 return processPlugins;
256             }
257 
258             @Override
259             public boolean isResolveDependencies()
260             {
261                 return resolveDependencies;
262             }
263         }
264 
265     }
266 }