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.Files;
22  import java.nio.file.Path;
23  import java.util.Optional;
24  
25  import org.apache.maven.api.Session;
26  import org.apache.maven.api.annotations.Experimental;
27  import org.apache.maven.api.annotations.Nonnull;
28  import org.apache.maven.api.annotations.NotThreadSafe;
29  import org.apache.maven.api.annotations.Nullable;
30  
31  import static org.apache.maven.api.services.BaseRequest.nonNull;
32  
33  /**
34   *
35   * @since 4.0.0
36   */
37  @Experimental
38  public interface ToolchainsBuilderRequest {
39      @Nonnull
40      Session getSession();
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 source.
52       *
53       * @return the user Toolchains source or {@code null} if none
54       */
55      @Nonnull
56      Optional<Source> getUserToolchainsSource();
57  
58      @Nonnull
59      static ToolchainsBuilderRequest build(
60              @Nonnull Session session, @Nullable Source globalToolchainsSource, @Nullable Source userToolchainsSource) {
61          return builder()
62                  .session(nonNull(session, "session cannot be null"))
63                  .globalToolchainsSource(globalToolchainsSource)
64                  .userToolchainsSource(userToolchainsSource)
65                  .build();
66      }
67  
68      @Nonnull
69      static ToolchainsBuilderRequest build(
70              @Nonnull Session session, @Nullable Path globalToolchainsPath, @Nullable Path userToolchainsPath) {
71          return builder()
72                  .session(nonNull(session, "session cannot be null"))
73                  .globalToolchainsSource(
74                          globalToolchainsPath != null && Files.exists(globalToolchainsPath)
75                                  ? Source.fromPath(globalToolchainsPath)
76                                  : null)
77                  .userToolchainsSource(
78                          userToolchainsPath != null && Files.exists(userToolchainsPath)
79                                  ? Source.fromPath(userToolchainsPath)
80                                  : null)
81                  .build();
82      }
83  
84      @Nonnull
85      static ToolchainsBuilderRequestBuilder builder() {
86          return new ToolchainsBuilderRequestBuilder();
87      }
88  
89      @NotThreadSafe
90      class ToolchainsBuilderRequestBuilder {
91          Session session;
92          Source globalToolchainsSource;
93          Source userToolchainsSource;
94  
95          public ToolchainsBuilderRequestBuilder session(Session session) {
96              this.session = session;
97              return this;
98          }
99  
100         public ToolchainsBuilderRequestBuilder globalToolchainsSource(Source globalToolchainsSource) {
101             this.globalToolchainsSource = globalToolchainsSource;
102             return this;
103         }
104 
105         public ToolchainsBuilderRequestBuilder userToolchainsSource(Source userToolchainsSource) {
106             this.userToolchainsSource = userToolchainsSource;
107             return this;
108         }
109 
110         public ToolchainsBuilderRequest build() {
111             return new ToolchainsBuilderRequestBuilder.DefaultToolchainsBuilderRequest(
112                     session, globalToolchainsSource, userToolchainsSource);
113         }
114 
115         private static class DefaultToolchainsBuilderRequest extends BaseRequest implements ToolchainsBuilderRequest {
116             private final Source globalToolchainsSource;
117             private final Source userToolchainsSource;
118 
119             @SuppressWarnings("checkstyle:ParameterNumber")
120             DefaultToolchainsBuilderRequest(
121                     @Nonnull Session session,
122                     @Nullable Source globalToolchainsSource,
123                     @Nullable Source userToolchainsSource) {
124                 super(session);
125                 this.globalToolchainsSource = globalToolchainsSource;
126                 this.userToolchainsSource = userToolchainsSource;
127             }
128 
129             @Nonnull
130             @Override
131             public Optional<Source> getGlobalToolchainsSource() {
132                 return Optional.ofNullable(globalToolchainsSource);
133             }
134 
135             @Nonnull
136             @Override
137             public Optional<Source> getUserToolchainsSource() {
138                 return Optional.ofNullable(userToolchainsSource);
139             }
140         }
141     }
142 }