1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.cling.invoker.mvnup;
20
21 import java.util.List;
22 import java.util.Optional;
23 import java.util.function.Consumer;
24
25 import org.apache.commons.cli.CommandLine;
26 import org.apache.commons.cli.Option;
27 import org.apache.commons.cli.ParseException;
28 import org.apache.maven.api.annotations.Nonnull;
29 import org.apache.maven.api.cli.Options;
30 import org.apache.maven.api.cli.ParserRequest;
31 import org.apache.maven.api.cli.mvnup.UpgradeOptions;
32 import org.apache.maven.cling.invoker.CommonsCliOptions;
33
34
35
36
37 public class CommonsCliUpgradeOptions extends CommonsCliOptions implements UpgradeOptions {
38 public static CommonsCliUpgradeOptions parse(String[] args) throws ParseException {
39 CLIManager cliManager = new CLIManager();
40 return new CommonsCliUpgradeOptions(Options.SOURCE_CLI, cliManager, cliManager.parse(args));
41 }
42
43 protected CommonsCliUpgradeOptions(String source, CLIManager cliManager, CommandLine commandLine) {
44 super(source, cliManager, commandLine);
45 }
46
47 @Override
48 @Nonnull
49 public Optional<Boolean> force() {
50 if (commandLine.hasOption(CLIManager.FORCE)) {
51 return Optional.of(Boolean.TRUE);
52 }
53 return Optional.empty();
54 }
55
56 @Override
57 @Nonnull
58 public Optional<Boolean> yes() {
59 if (commandLine.hasOption(CLIManager.YES)) {
60 return Optional.of(Boolean.TRUE);
61 }
62 return Optional.empty();
63 }
64
65 @Override
66 @Nonnull
67 public Optional<List<String>> goals() {
68 if (!commandLine.getArgList().isEmpty()) {
69 return Optional.of(commandLine.getArgList());
70 }
71 return Optional.empty();
72 }
73
74 @Override
75 @Nonnull
76 public Optional<String> modelVersion() {
77 if (commandLine.hasOption(CLIManager.MODEL_VERSION)) {
78 return Optional.of(commandLine.getOptionValue(CLIManager.MODEL_VERSION));
79 }
80 return Optional.empty();
81 }
82
83 @Override
84 @Nonnull
85 public Optional<String> directory() {
86 if (commandLine.hasOption(CLIManager.DIRECTORY)) {
87 return Optional.of(commandLine.getOptionValue(CLIManager.DIRECTORY));
88 }
89 return Optional.empty();
90 }
91
92 @Override
93 @Nonnull
94 public Optional<Boolean> infer() {
95 if (commandLine.hasOption(CLIManager.INFER)) {
96 return Optional.of(Boolean.TRUE);
97 }
98 return Optional.empty();
99 }
100
101 @Override
102 @Nonnull
103 public Optional<Boolean> model() {
104 if (commandLine.hasOption(CLIManager.MODEL)) {
105 return Optional.of(Boolean.TRUE);
106 }
107 return Optional.empty();
108 }
109
110 @Override
111 @Nonnull
112 public Optional<Boolean> plugins() {
113 if (commandLine.hasOption(CLIManager.PLUGINS)) {
114 return Optional.of(Boolean.TRUE);
115 }
116 return Optional.empty();
117 }
118
119 @Override
120 @Nonnull
121 public Optional<Boolean> all() {
122 if (commandLine.hasOption(CLIManager.ALL)) {
123 return Optional.of(Boolean.TRUE);
124 }
125 return Optional.empty();
126 }
127
128 @Override
129 public void displayHelp(ParserRequest request, Consumer<String> printStream) {
130 super.displayHelp(request, printStream);
131 printStream.accept("");
132
133 printStream.accept("Goals:");
134 printStream.accept(" help - display this help message");
135 printStream.accept(" check - check for available upgrades");
136 printStream.accept(" apply - apply available upgrades");
137 printStream.accept("");
138 printStream.accept("Options:");
139 printStream.accept(" -m, --model-version <version> Target POM model version (4.0.0 or 4.1.0)");
140 printStream.accept(" -d, --directory <path> Directory to use as starting point for POM discovery");
141 printStream.accept(" -i, --infer Remove redundant information that can be inferred by Maven");
142 printStream.accept(" --model Fix Maven 4 compatibility issues in POM files");
143 printStream.accept(" --plugins Upgrade plugins known to fail with Maven 4");
144 printStream.accept(
145 " -a, --all Apply all upgrades (equivalent to --model-version 4.1.0 --infer --model --plugins)");
146 printStream.accept(" -f, --force Overwrite files without asking for confirmation");
147 printStream.accept(" -y, --yes Answer \"yes\" to all prompts automatically");
148 printStream.accept("");
149 printStream.accept("Default behavior: --model and --plugins are applied if no other options are specified");
150 printStream.accept("");
151 }
152
153 @Override
154 protected CommonsCliUpgradeOptions copy(
155 String source, CommonsCliOptions.CLIManager cliManager, CommandLine commandLine) {
156 return new CommonsCliUpgradeOptions(source, (CLIManager) cliManager, commandLine);
157 }
158
159 protected static class CLIManager extends CommonsCliOptions.CLIManager {
160 public static final String FORCE = "f";
161 public static final String YES = "y";
162 public static final String MODEL_VERSION = "m";
163 public static final String DIRECTORY = "d";
164 public static final String INFER = "i";
165 public static final String MODEL = "model";
166 public static final String PLUGINS = "plugins";
167 public static final String ALL = "a";
168
169 @Override
170 protected void prepareOptions(org.apache.commons.cli.Options options) {
171 super.prepareOptions(options);
172 options.addOption(Option.builder(FORCE)
173 .longOpt("force")
174 .desc("Should overwrite without asking any configuration?")
175 .build());
176 options.addOption(Option.builder(YES)
177 .longOpt("yes")
178 .desc("Should imply user answered \"yes\" to all incoming questions?")
179 .build());
180 options.addOption(Option.builder(MODEL_VERSION)
181 .longOpt("model-version")
182 .hasArg()
183 .argName("version")
184 .desc("Target POM model version (4.0.0 or 4.1.0)")
185 .build());
186 options.addOption(Option.builder(DIRECTORY)
187 .longOpt("directory")
188 .hasArg()
189 .argName("path")
190 .desc("Directory to use as starting point for POM discovery")
191 .build());
192 options.addOption(Option.builder(INFER)
193 .longOpt("infer")
194 .desc("Use inference when upgrading (remove redundant information)")
195 .build());
196 options.addOption(Option.builder(MODEL)
197 .longOpt("model")
198 .desc("Fix Maven 4 compatibility issues in POM files")
199 .build());
200 options.addOption(Option.builder(PLUGINS)
201 .longOpt("plugins")
202 .desc("Upgrade plugins known to fail with Maven 4 to their minimum compatible versions")
203 .build());
204 options.addOption(Option.builder(ALL)
205 .longOpt("all")
206 .desc("Apply all upgrades (equivalent to --model-version 4.1.0 --infer --model --plugins)")
207 .build());
208 }
209 }
210 }