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.ProtoSession;
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      ProtoSession getSession();
41  
42      /**
43       * Gets the installation Toolchains source.
44       *
45       * @return the installation Toolchains source or {@code null} if none
46       */
47      @Nonnull
48      Optional<Source> getInstallationToolchainsSource();
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 ProtoSession session,
61              @Nullable Source installationToolchainsFile,
62              @Nullable Source userToolchainsSource) {
63          return builder()
64                  .session(nonNull(session, "session cannot be null"))
65                  .installationToolchainsSource(installationToolchainsFile)
66                  .userToolchainsSource(userToolchainsSource)
67                  .build();
68      }
69  
70      @Nonnull
71      static ToolchainsBuilderRequest build(
72              @Nonnull ProtoSession session,
73              @Nullable Path installationToolchainsFile,
74              @Nullable Path userToolchainsPath) {
75          return builder()
76                  .session(nonNull(session, "session cannot be null"))
77                  .installationToolchainsSource(
78                          installationToolchainsFile != null && Files.exists(installationToolchainsFile)
79                                  ? Source.fromPath(installationToolchainsFile)
80                                  : null)
81                  .userToolchainsSource(
82                          userToolchainsPath != null && Files.exists(userToolchainsPath)
83                                  ? Source.fromPath(userToolchainsPath)
84                                  : null)
85                  .build();
86      }
87  
88      @Nonnull
89      static ToolchainsBuilderRequestBuilder builder() {
90          return new ToolchainsBuilderRequestBuilder();
91      }
92  
93      @NotThreadSafe
94      class ToolchainsBuilderRequestBuilder {
95          ProtoSession session;
96          Source installationToolchainsSource;
97          Source userToolchainsSource;
98  
99          public ToolchainsBuilderRequestBuilder session(ProtoSession session) {
100             this.session = session;
101             return this;
102         }
103 
104         public ToolchainsBuilderRequestBuilder installationToolchainsSource(Source installationToolchainsSource) {
105             this.installationToolchainsSource = installationToolchainsSource;
106             return this;
107         }
108 
109         public ToolchainsBuilderRequestBuilder userToolchainsSource(Source userToolchainsSource) {
110             this.userToolchainsSource = userToolchainsSource;
111             return this;
112         }
113 
114         public ToolchainsBuilderRequest build() {
115             return new ToolchainsBuilderRequestBuilder.DefaultToolchainsBuilderRequest(
116                     session, installationToolchainsSource, userToolchainsSource);
117         }
118 
119         private static class DefaultToolchainsBuilderRequest extends BaseRequest<ProtoSession>
120                 implements ToolchainsBuilderRequest {
121             private final Source installationToolchainsSource;
122             private final Source userToolchainsSource;
123 
124             @SuppressWarnings("checkstyle:ParameterNumber")
125             DefaultToolchainsBuilderRequest(
126                     @Nonnull ProtoSession session,
127                     @Nullable Source installationToolchainsSource,
128                     @Nullable Source userToolchainsSource) {
129                 super(session);
130                 this.installationToolchainsSource = installationToolchainsSource;
131                 this.userToolchainsSource = userToolchainsSource;
132             }
133 
134             @Nonnull
135             @Override
136             public Optional<Source> getInstallationToolchainsSource() {
137                 return Optional.ofNullable(installationToolchainsSource);
138             }
139 
140             @Nonnull
141             @Override
142             public Optional<Source> getUserToolchainsSource() {
143                 return Optional.ofNullable(userToolchainsSource);
144             }
145         }
146     }
147 }