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.cli;
20
21 import java.io.IOException;
22
23 import org.apache.maven.api.annotations.Experimental;
24 import org.apache.maven.api.annotations.Nonnull;
25 import org.apache.maven.api.services.MessageBuilderFactory;
26
27 /**
28 * Defines the contract for parsing Maven command-line arguments and creating an InvokerRequest.
29 * This interface is responsible for interpreting the command-line input and constructing
30 * the appropriate {@link InvokerRequest} object.
31 *
32 * @param <R> the type of {@link InvokerRequest} produced by this parser, extending {@link InvokerRequest}
33 *
34 * @since 4.0.0
35 */
36 @Experimental
37 public interface Parser<R extends InvokerRequest<? extends Options>> {
38 /**
39 * Parses the given Maven arguments to create an InvokerRequest.
40 * This is a convenience method that internally creates a ParserRequest using
41 * {@link ParserRequest#mvn(String[], Logger, MessageBuilderFactory)}.
42 *
43 * @param args the command-line arguments
44 * @param logger the logger to use during parsing
45 * @param messageBuilderFactory the factory for creating message builders
46 * @return the parsed InvokerRequest
47 * @throws ParserException if there's an error during parsing of the command or arguments
48 * @throws IOException if there's an I/O error during the parsing process
49 */
50 @Nonnull
51 default R mvn(@Nonnull String[] args, @Nonnull Logger logger, @Nonnull MessageBuilderFactory messageBuilderFactory)
52 throws ParserException, IOException {
53 return parse(ParserRequest.mvn(args, logger, messageBuilderFactory).build());
54 }
55
56 /**
57 * Parses the given ParserRequest to create an InvokerRequest.
58 * This method is responsible for interpreting the contents of the ParserRequest
59 * and constructing the appropriate InvokerRequest object.
60 *
61 * @param parserRequest the request containing all necessary information for parsing
62 * @return the parsed InvokerRequest
63 * @throws ParserException if there's an error during parsing of the request
64 * @throws IOException if there's an I/O error during the parsing process
65 */
66 @Nonnull
67 R parse(@Nonnull ParserRequest parserRequest) throws ParserException, IOException;
68 }