1
2
3
4
5
6 package gov.nist.secauto.oscal.tools.cli.core.commands;
7
8 import gov.nist.secauto.metaschema.cli.processor.CLIProcessor.CallingContext;
9 import gov.nist.secauto.metaschema.cli.processor.command.ICommandExecutor;
10 import gov.nist.secauto.metaschema.core.model.util.JsonUtil;
11 import gov.nist.secauto.metaschema.core.model.util.XmlUtil;
12 import gov.nist.secauto.metaschema.core.model.validation.JsonSchemaContentValidator;
13 import gov.nist.secauto.metaschema.core.model.validation.XmlSchemaContentValidator;
14 import gov.nist.secauto.metaschema.core.util.CollectionUtil;
15 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
16 import gov.nist.secauto.oscal.lib.OscalBindingContext;
17
18 import org.apache.commons.cli.CommandLine;
19
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.util.LinkedList;
23 import java.util.List;
24
25 import javax.xml.transform.Source;
26
27 import edu.umd.cs.findbugs.annotations.NonNull;
28
29
30
31
32 public class ValidateCommand
33 extends AbstractOscalValidationCommand {
34 @Override
35 public String getDescription() {
36 return "Check that the specified OSCAL instance is well-formed and valid to an OSCAL model.";
37 }
38
39 @Override
40 public ICommandExecutor newExecutor(CallingContext callingContext, CommandLine commandLine) {
41 return new AbstractOscalValidationCommand.OscalValidationCommandExecutor(callingContext, commandLine);
42 }
43
44 @Override
45 @NonNull
46 public XmlSchemaContentValidator getOscalXmlSchemas() throws IOException {
47 List<Source> retval = new LinkedList<>();
48 retval.add(
49 XmlUtil.getStreamSource(ObjectUtils.requireNonNull(
50 OscalBindingContext.class.getResource("/schema/xml/oscal-complete_schema.xsd"))));
51 return new XmlSchemaContentValidator(CollectionUtil.unmodifiableList(retval));
52 }
53
54 @Override
55 @NonNull
56 public JsonSchemaContentValidator getOscalJsonSchema() throws IOException {
57 try (InputStream is = ObjectUtils.requireNonNull(
58 OscalBindingContext.class.getResourceAsStream("/schema/json/oscal-complete_schema.json"))) {
59 return new JsonSchemaContentValidator(JsonUtil.toJsonObject(is));
60 }
61 }
62 }