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.Objects;
24  import java.util.Optional;
25  
26  import org.apache.maven.api.ProtoSession;
27  import org.apache.maven.api.annotations.Experimental;
28  import org.apache.maven.api.annotations.Nonnull;
29  import org.apache.maven.api.annotations.NotThreadSafe;
30  import org.apache.maven.api.annotations.Nullable;
31  
32  import static java.util.Objects.requireNonNull;
33  
34  /**
35   *
36   * @since 4.0.0
37   */
38  @Experimental
39  public interface ToolchainsBuilderRequest extends Request<ProtoSession> {
40  
41      /**
42       * Gets the installation Toolchains source.
43       *
44       * @return the installation Toolchains source or {@code null} if none
45       */
46      @Nonnull
47      Optional<Source> getInstallationToolchainsSource();
48  
49      /**
50       * Gets the user Toolchains source.
51       *
52       * @return the user Toolchains source or {@code null} if none
53       */
54      @Nonnull
55      Optional<Source> getUserToolchainsSource();
56  
57      @Nonnull
58      static ToolchainsBuilderRequest build(
59              @Nonnull ProtoSession session,
60              @Nullable Source installationToolchainsFile,
61              @Nullable Source userToolchainsSource) {
62          return builder()
63                  .session(requireNonNull(session, "session cannot be null"))
64                  .installationToolchainsSource(installationToolchainsFile)
65                  .userToolchainsSource(userToolchainsSource)
66                  .build();
67      }
68  
69      @Nonnull
70      static ToolchainsBuilderRequest build(
71              @Nonnull ProtoSession session,
72              @Nullable Path installationToolchainsFile,
73              @Nullable Path userToolchainsPath) {
74          return builder()
75                  .session(requireNonNull(session, "session cannot be null"))
76                  .installationToolchainsSource(
77                          installationToolchainsFile != null && Files.exists(installationToolchainsFile)
78                                  ? Sources.fromPath(installationToolchainsFile)
79                                  : null)
80                  .userToolchainsSource(
81                          userToolchainsPath != null && Files.exists(userToolchainsPath)
82                                  ? Sources.fromPath(userToolchainsPath)
83                                  : null)
84                  .build();
85      }
86  
87      @Nonnull
88      static ToolchainsBuilderRequestBuilder builder() {
89          return new ToolchainsBuilderRequestBuilder();
90      }
91  
92      @NotThreadSafe
93      class ToolchainsBuilderRequestBuilder {
94          ProtoSession session;
95          RequestTrace trace;
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 trace(RequestTrace trace) {
105             this.trace = trace;
106             return this;
107         }
108 
109         public ToolchainsBuilderRequestBuilder installationToolchainsSource(Source installationToolchainsSource) {
110             this.installationToolchainsSource = installationToolchainsSource;
111             return this;
112         }
113 
114         public ToolchainsBuilderRequestBuilder userToolchainsSource(Source userToolchainsSource) {
115             this.userToolchainsSource = userToolchainsSource;
116             return this;
117         }
118 
119         public ToolchainsBuilderRequest build() {
120             return new ToolchainsBuilderRequestBuilder.DefaultToolchainsBuilderRequest(
121                     session, trace, installationToolchainsSource, userToolchainsSource);
122         }
123 
124         private static class DefaultToolchainsBuilderRequest extends BaseRequest<ProtoSession>
125                 implements ToolchainsBuilderRequest {
126             private final Source installationToolchainsSource;
127             private final Source userToolchainsSource;
128 
129             @SuppressWarnings("checkstyle:ParameterNumber")
130             DefaultToolchainsBuilderRequest(
131                     @Nonnull ProtoSession session,
132                     @Nullable RequestTrace trace,
133                     @Nullable Source installationToolchainsSource,
134                     @Nullable Source userToolchainsSource) {
135                 super(session, trace);
136                 this.installationToolchainsSource = installationToolchainsSource;
137                 this.userToolchainsSource = userToolchainsSource;
138             }
139 
140             @Nonnull
141             @Override
142             public Optional<Source> getInstallationToolchainsSource() {
143                 return Optional.ofNullable(installationToolchainsSource);
144             }
145 
146             @Nonnull
147             @Override
148             public Optional<Source> getUserToolchainsSource() {
149                 return Optional.ofNullable(userToolchainsSource);
150             }
151 
152             @Override
153             public boolean equals(Object o) {
154                 return o instanceof DefaultToolchainsBuilderRequest that
155                         && Objects.equals(installationToolchainsSource, that.installationToolchainsSource)
156                         && Objects.equals(userToolchainsSource, that.userToolchainsSource);
157             }
158 
159             @Override
160             public int hashCode() {
161                 return Objects.hash(installationToolchainsSource, userToolchainsSource);
162             }
163 
164             @Override
165             public String toString() {
166                 return "ToolchainsBuilderRequest[" + "installationToolchainsSource="
167                         + installationToolchainsSource + ", userToolchainsSource="
168                         + userToolchainsSource + ']';
169             }
170         }
171     }
172 }