001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package gov.nist.secauto.oscal.tools.cli.core.commands; 007 008import gov.nist.secauto.metaschema.cli.commands.AbstractConvertSubcommand; 009import gov.nist.secauto.metaschema.cli.processor.CLIProcessor.CallingContext; 010import gov.nist.secauto.metaschema.cli.processor.ExitStatus; 011import gov.nist.secauto.metaschema.cli.processor.command.ICommandExecutor; 012import gov.nist.secauto.metaschema.core.model.IBoundObject; 013import gov.nist.secauto.metaschema.databind.IBindingContext; 014import gov.nist.secauto.metaschema.databind.io.Format; 015import gov.nist.secauto.metaschema.databind.io.IBoundLoader; 016import gov.nist.secauto.oscal.lib.OscalBindingContext; 017 018import org.apache.commons.cli.CommandLine; 019import org.apache.logging.log4j.LogManager; 020import org.apache.logging.log4j.Logger; 021 022import java.io.FileNotFoundException; 023import java.io.IOException; 024import java.io.Writer; 025import java.net.URI; 026 027import edu.umd.cs.findbugs.annotations.NonNull; 028 029public abstract class AbstractOscalConvertCommand 030 extends AbstractConvertSubcommand { 031 private static final Logger LOGGER = LogManager.getLogger(AbstractOscalConvertCommand.class); 032 033 @NonNull 034 public abstract Class<? extends IBoundObject> getOscalClass(); 035 036 @Override 037 public ICommandExecutor newExecutor(CallingContext callingContext, CommandLine commandLine) { 038 return new OscalCommandExecutor(callingContext, commandLine); 039 } 040 041 private final class OscalCommandExecutor 042 extends AbstractConversionCommandExecutor { 043 044 private OscalCommandExecutor( 045 @NonNull CallingContext callingContext, 046 @NonNull CommandLine commandLine) { 047 super(callingContext, commandLine); 048 } 049 050 @Override 051 protected IBindingContext getBindingContext() { 052 return OscalBindingContext.instance(); 053 } 054 055 @Override 056 public ExitStatus execute() { 057 LOGGER.atWarn().log("This command path is deprecated. Please use 'convert'."); 058 059 return super.execute(); 060 } 061 062 @Override 063 protected void handleConversion(URI source, Format toFormat, Writer writer, IBoundLoader loader) 064 throws FileNotFoundException, IOException { 065 Class<? extends IBoundObject> clazz = getOscalClass(); 066 loader.convert(source, writer, toFormat, clazz); 067 } 068 } 069}