1
2
3
4
5
6 package gov.nist.secauto.metaschema.cli;
7
8 import gov.nist.secauto.metaschema.cli.commands.MetaschemaCommands;
9 import gov.nist.secauto.metaschema.cli.processor.CLIProcessor;
10 import gov.nist.secauto.metaschema.cli.processor.ExitStatus;
11 import gov.nist.secauto.metaschema.cli.processor.command.CommandService;
12 import gov.nist.secauto.metaschema.core.MetaschemaConstants;
13 import gov.nist.secauto.metaschema.core.MetaschemaJavaVersion;
14 import gov.nist.secauto.metaschema.core.model.MetaschemaVersion;
15 import gov.nist.secauto.metaschema.core.util.IVersionInfo;
16
17 import java.io.PrintStream;
18 import java.util.LinkedHashMap;
19 import java.util.Map;
20
21 import edu.umd.cs.findbugs.annotations.NonNull;
22 import edu.umd.cs.findbugs.annotations.Nullable;
23
24
25
26
27 @SuppressWarnings("PMD.ShortClassName")
28 public final class CLI {
29
30
31
32
33
34
35 public static void main(String[] args) {
36 System.exit(runCli(args).getExitCode().getStatusCode());
37 }
38
39
40
41
42
43
44
45
46 @NonNull
47 public static ExitStatus runCli(String... args) {
48 return runCli(null, args);
49 }
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 @NonNull
65 public static ExitStatus runCli(@Nullable PrintStream outputStream, String... args) {
66 System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
67
68 @SuppressWarnings("PMD.UseConcurrentHashMap")
69 Map<String, IVersionInfo> versions = new LinkedHashMap<>();
70 versions.put(CLIProcessor.COMMAND_VERSION, new MetaschemaJavaVersion());
71 versions.put(MetaschemaConstants.METASCHEMA_NAMESPACE, new MetaschemaVersion());
72
73 CLIProcessor processor = new CLIProcessor("metaschema-cli", versions, outputStream);
74 MetaschemaCommands.COMMANDS.forEach(processor::addCommandHandler);
75
76 CommandService.getInstance().getCommands().stream().forEach(command -> {
77 assert command != null;
78 processor.addCommandHandler(command);
79 });
80 return processor.process(args);
81 }
82
83 private CLI() {
84
85 }
86 }