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