1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.oscal.tools.cli.core;
7   
8   import gov.nist.secauto.metaschema.cli.processor.CLIProcessor;
9   import gov.nist.secauto.metaschema.cli.processor.ExitStatus;
10  import gov.nist.secauto.metaschema.core.MetaschemaJavaVersion;
11  import gov.nist.secauto.metaschema.core.model.MetaschemaVersion;
12  import gov.nist.secauto.metaschema.core.util.IVersionInfo;
13  import gov.nist.secauto.metaschema.core.util.ObjectUtils;
14  import gov.nist.secauto.oscal.lib.LibOscalVersion;
15  import gov.nist.secauto.oscal.lib.OscalVersion;
16  import gov.nist.secauto.oscal.tools.cli.core.commands.ConvertCommand;
17  import gov.nist.secauto.oscal.tools.cli.core.commands.ListAllowedValuesCommand;
18  import gov.nist.secauto.oscal.tools.cli.core.commands.ResolveCommand;
19  import gov.nist.secauto.oscal.tools.cli.core.commands.ValidateCommand;
20  import gov.nist.secauto.oscal.tools.cli.core.commands.assessmentplan.AssessmentPlanCommand;
21  import gov.nist.secauto.oscal.tools.cli.core.commands.assessmentresults.AssessmentResultsCommand;
22  import gov.nist.secauto.oscal.tools.cli.core.commands.catalog.CatalogCommand;
23  import gov.nist.secauto.oscal.tools.cli.core.commands.componentdefinition.ComponentDefinitionCommand;
24  import gov.nist.secauto.oscal.tools.cli.core.commands.metaschema.MetaschemaCommand;
25  import gov.nist.secauto.oscal.tools.cli.core.commands.poam.PlanOfActionsAndMilestonesCommand;
26  import gov.nist.secauto.oscal.tools.cli.core.commands.profile.ProfileCommand;
27  import gov.nist.secauto.oscal.tools.cli.core.commands.ssp.SystemSecurityPlanCommand;
28  
29  import java.util.LinkedHashMap;
30  import java.util.Map;
31  
32  import edu.umd.cs.findbugs.annotations.NonNull;
33  
34  @SuppressWarnings("PMD.ShortClassName")
35  public final class CLI {
36    public static void main(String[] args) {
37      System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
38  
39      ExitStatus status = runCli(args);
40      int exitCode = status.getExitCode().getStatusCode();
41      System.exit(exitCode);
42    }
43  
44    @NonNull
45    public static ExitStatus runCli(String... args) {
46      @SuppressWarnings("serial") Map<String, IVersionInfo> versions = ObjectUtils.notNull(
47          new LinkedHashMap<>() {
48            {
49              put(CLIProcessor.COMMAND_VERSION, new OscalCliVersion());
50              put("https://github.com/usnistgov/liboscal-java", new LibOscalVersion());
51              put("https://github.com/usnistgov/OSCAL", new OscalVersion());
52              put("https://github.com/usnistgov/metaschema-java", new MetaschemaJavaVersion());
53              put("https://github.com/usnistgov/metaschema", new MetaschemaVersion());
54            }
55          });
56      CLIProcessor processor = new CLIProcessor("oscal-cli", versions);
57      processor.addCommandHandler(new CatalogCommand());
58      processor.addCommandHandler(new ProfileCommand());
59      processor.addCommandHandler(new ComponentDefinitionCommand());
60      processor.addCommandHandler(new SystemSecurityPlanCommand());
61      processor.addCommandHandler(new AssessmentPlanCommand());
62      processor.addCommandHandler(new AssessmentResultsCommand());
63      processor.addCommandHandler(new PlanOfActionsAndMilestonesCommand());
64      processor.addCommandHandler(new MetaschemaCommand());
65      processor.addCommandHandler(new ValidateCommand());
66      processor.addCommandHandler(new ConvertCommand());
67      processor.addCommandHandler(new ResolveCommand());
68      processor.addCommandHandler(new ListAllowedValuesCommand());
69      return processor.process(args);
70    }
71  
72    private CLI() {
73      // disable construction
74    }
75  }