1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.oscal.tools.cli.core.commands;
7   
8   import gov.nist.secauto.metaschema.core.model.util.JsonUtil;
9   import gov.nist.secauto.metaschema.core.model.util.XmlUtil;
10  import gov.nist.secauto.metaschema.core.util.CollectionUtil;
11  import gov.nist.secauto.metaschema.core.util.ObjectUtils;
12  import gov.nist.secauto.oscal.lib.OscalBindingContext;
13  
14  import org.json.JSONObject;
15  
16  import java.io.IOException;
17  import java.io.InputStream;
18  import java.util.LinkedList;
19  import java.util.List;
20  
21  import javax.xml.transform.Source;
22  
23  import edu.umd.cs.findbugs.annotations.NonNull;
24  
25  public class ValidateCommand
26      extends AbstractOscalValidationCommand {
27    @Override
28    public String getDescription() {
29      return "Check that the specified OSCAL instance is well-formed and valid to an OSCAL model.";
30    }
31  
32    @Override
33    @NonNull
34    public List<Source> getOscalXmlSchemas() throws IOException {
35      List<Source> retval = new LinkedList<>();
36      retval.add(
37          XmlUtil.getStreamSource(ObjectUtils.requireNonNull(
38              OscalBindingContext.class.getResource("/schema/xml/oscal-complete_schema.xsd"))));
39      return CollectionUtil.unmodifiableList(retval);
40    }
41  
42    @Override
43    @NonNull
44    public JSONObject getOscalJsonSchema() throws IOException {
45      try (InputStream is = ObjectUtils.requireNonNull(
46          OscalBindingContext.class.getResourceAsStream("/schema/json/oscal-complete_schema.json"))) {
47        return JsonUtil.toJsonObject(is);
48      }
49    }
50  }