001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package gov.nist.secauto.oscal.tools.cli.core;
007
008import gov.nist.secauto.metaschema.cli.processor.CLIProcessor;
009import gov.nist.secauto.metaschema.cli.processor.ExitStatus;
010import gov.nist.secauto.metaschema.core.MetaschemaJavaVersion;
011import gov.nist.secauto.metaschema.core.model.MetaschemaVersion;
012import gov.nist.secauto.metaschema.core.util.IVersionInfo;
013import gov.nist.secauto.metaschema.core.util.ObjectUtils;
014import gov.nist.secauto.oscal.lib.LibOscalVersion;
015import gov.nist.secauto.oscal.lib.OscalVersion;
016import gov.nist.secauto.oscal.tools.cli.core.commands.ConvertCommand;
017import gov.nist.secauto.oscal.tools.cli.core.commands.ListAllowedValuesCommand;
018import gov.nist.secauto.oscal.tools.cli.core.commands.ResolveCommand;
019import gov.nist.secauto.oscal.tools.cli.core.commands.ValidateCommand;
020import gov.nist.secauto.oscal.tools.cli.core.commands.assessmentplan.AssessmentPlanCommand;
021import gov.nist.secauto.oscal.tools.cli.core.commands.assessmentresults.AssessmentResultsCommand;
022import gov.nist.secauto.oscal.tools.cli.core.commands.catalog.CatalogCommand;
023import gov.nist.secauto.oscal.tools.cli.core.commands.componentdefinition.ComponentDefinitionCommand;
024import gov.nist.secauto.oscal.tools.cli.core.commands.metaschema.MetaschemaCommand;
025import gov.nist.secauto.oscal.tools.cli.core.commands.poam.PlanOfActionsAndMilestonesCommand;
026import gov.nist.secauto.oscal.tools.cli.core.commands.profile.ProfileCommand;
027import gov.nist.secauto.oscal.tools.cli.core.commands.ssp.SystemSecurityPlanCommand;
028
029import java.util.LinkedHashMap;
030import java.util.Map;
031
032import edu.umd.cs.findbugs.annotations.NonNull;
033
034@SuppressWarnings("PMD.ShortClassName")
035public final class CLI {
036  public static void main(String[] args) {
037    System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
038
039    ExitStatus status = runCli(args);
040    int exitCode = status.getExitCode().getStatusCode();
041    System.exit(exitCode);
042  }
043
044  @NonNull
045  public static ExitStatus runCli(String... args) {
046    @SuppressWarnings("serial") Map<String, IVersionInfo> versions = ObjectUtils.notNull(
047        new LinkedHashMap<>() {
048          {
049            put(CLIProcessor.COMMAND_VERSION, new OscalCliVersion());
050            put("https://github.com/usnistgov/liboscal-java", new LibOscalVersion());
051            put("https://github.com/usnistgov/OSCAL", new OscalVersion());
052            put("https://github.com/usnistgov/metaschema-java", new MetaschemaJavaVersion());
053            put("https://github.com/usnistgov/metaschema", new MetaschemaVersion());
054          }
055        });
056    CLIProcessor processor = new CLIProcessor("oscal-cli", versions);
057    processor.addCommandHandler(new CatalogCommand());
058    processor.addCommandHandler(new ProfileCommand());
059    processor.addCommandHandler(new ComponentDefinitionCommand());
060    processor.addCommandHandler(new SystemSecurityPlanCommand());
061    processor.addCommandHandler(new AssessmentPlanCommand());
062    processor.addCommandHandler(new AssessmentResultsCommand());
063    processor.addCommandHandler(new PlanOfActionsAndMilestonesCommand());
064    processor.addCommandHandler(new MetaschemaCommand());
065    processor.addCommandHandler(new ValidateCommand());
066    processor.addCommandHandler(new ConvertCommand());
067    processor.addCommandHandler(new ResolveCommand());
068    processor.addCommandHandler(new ListAllowedValuesCommand());
069    return processor.process(args);
070  }
071
072  private CLI() {
073    // disable construction
074  }
075}