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.Session;
26  import org.apache.maven.api.annotations.Nonnull;
27  import org.apache.maven.api.annotations.NotThreadSafe;
28  import org.apache.maven.api.annotations.Nullable;
29  
30  public interface ToolchainsBuilderRequest {
31      @Nonnull
32      Session getSession();
33  
34      /**
35       * Gets the global Toolchains path.
36       *
37       * @return the global Toolchains path or {@code null} if none
38       */
39      @Nonnull
40      Optional<Path> getGlobalToolchainsPath();
41  
42      /**
43       * Gets the global Toolchains source.
44       *
45       * @return the global Toolchains source or {@code null} if none
46       */
47      @Nonnull
48      Optional<Source> getGlobalToolchainsSource();
49  
50      /**
51       * Gets the user Toolchains path.
52       *
53       * @return the user Toolchains path or {@code null} if none
54       */
55      @Nonnull
56      Optional<Path> getUserToolchainsPath();
57  
58      /**
59       * Gets the user Toolchains source.
60       *
61       * @return the user Toolchains source or {@code null} if none
62       */
63      @Nonnull
64      Optional<Source> getUserToolchainsSource();
65  
66      @Nonnull
67      static ToolchainsBuilderRequest build(
68              @Nonnull Session session, @Nonnull Source globalToolchainsSource, @Nonnull Source userToolchainsSource) {
69          return builder()
70                  .session(nonNull(session, "session cannot be null"))
71                  .globalToolchainsSource(nonNull(globalToolchainsSource, "globalToolchainsSource cannot be null"))
72                  .userToolchainsSource(nonNull(userToolchainsSource, "userToolchainsSource cannot be null"))
73                  .build();
74      }
75  
76      @Nonnull
77      static ToolchainsBuilderRequest build(
78              @Nonnull Session session, @Nonnull Path globalToolchainsPath, @Nonnull Path userToolchainsPath) {
79          return builder()
80                  .session(nonNull(session, "session cannot be null"))
81                  .globalToolchainsPath(nonNull(globalToolchainsPath, "globalToolchainsPath cannot be null"))
82                  .userToolchainsPath(nonNull(userToolchainsPath, "userToolchainsPath cannot be null"))
83                  .build();
84      }
85  
86      @Nonnull
87      static ToolchainsBuilderRequestBuilder builder() {
88          return new ToolchainsBuilderRequestBuilder();
89      }
90  
91      @NotThreadSafe
92      class ToolchainsBuilderRequestBuilder {
93          Session session;
94          Path globalToolchainsPath;
95          Source globalToolchainsSource;
96          Path userToolchainsPath;
97          Source userToolchainsSource;
98  
99          public ToolchainsBuilderRequestBuilder session(Session session) {
100             this.session = session;
101             return this;
102         }
103 
104         public ToolchainsBuilderRequestBuilder globalToolchainsPath(Path globalToolchainsPath) {
105             this.globalToolchainsPath = globalToolchainsPath;
106             return this;
107         }
108 
109         public ToolchainsBuilderRequestBuilder globalToolchainsSource(Source globalToolchainsSource) {
110             this.globalToolchainsSource = globalToolchainsSource;
111             return this;
112         }
113 
114         public ToolchainsBuilderRequestBuilder userToolchainsPath(Path userToolchainsPath) {
115             this.userToolchainsPath = userToolchainsPath;
116             return this;
117         }
118 
119         public ToolchainsBuilderRequestBuilder userToolchainsSource(Source userToolchainsSource) {
120             this.userToolchainsSource = userToolchainsSource;
121             return this;
122         }
123 
124         public ToolchainsBuilderRequest build() {
125             return new ToolchainsBuilderRequestBuilder.DefaultToolchainsBuilderRequest(
126                     session, globalToolchainsPath, globalToolchainsSource, userToolchainsPath, userToolchainsSource);
127         }
128 
129         private static class DefaultToolchainsBuilderRequest extends BaseRequest implements ToolchainsBuilderRequest {
130             private final Path globalToolchainsPath;
131             private final Source globalToolchainsSource;
132             private final Path userToolchainsPath;
133             private final Source userToolchainsSource;
134 
135             @SuppressWarnings("checkstyle:ParameterNumber")
136             DefaultToolchainsBuilderRequest(
137                     @Nonnull Session session,
138                     @Nullable Path globalToolchainsPath,
139                     @Nullable Source globalToolchainsSource,
140                     @Nullable Path userToolchainsPath,
141                     @Nullable Source userToolchainsSource) {
142                 super(session);
143                 this.globalToolchainsPath = globalToolchainsPath;
144                 this.globalToolchainsSource = globalToolchainsSource;
145                 this.userToolchainsPath = userToolchainsPath;
146                 this.userToolchainsSource = userToolchainsSource;
147             }
148 
149             @Nonnull
150             @Override
151             public Optional<Path> getGlobalToolchainsPath() {
152                 return Optional.ofNullable(globalToolchainsPath);
153             }
154 
155             @Nonnull
156             @Override
157             public Optional<Source> getGlobalToolchainsSource() {
158                 return Optional.ofNullable(globalToolchainsSource);
159             }
160 
161             @Nonnull
162             @Override
163             public Optional<Path> getUserToolchainsPath() {
164                 return Optional.ofNullable(userToolchainsPath);
165             }
166 
167             @Nonnull
168             @Override
169             public Optional<Source> getUserToolchainsSource() {
170                 return Optional.ofNullable(userToolchainsSource);
171             }
172         }
173     }
174 }