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}