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.core.model.util.JsonUtil;
009import gov.nist.secauto.metaschema.core.model.util.XmlUtil;
010import gov.nist.secauto.metaschema.core.util.CollectionUtil;
011import gov.nist.secauto.metaschema.core.util.ObjectUtils;
012import gov.nist.secauto.oscal.lib.OscalBindingContext;
013
014import org.json.JSONObject;
015
016import java.io.IOException;
017import java.io.InputStream;
018import java.util.LinkedList;
019import java.util.List;
020
021import javax.xml.transform.Source;
022
023import edu.umd.cs.findbugs.annotations.NonNull;
024
025public class ValidateCommand
026    extends AbstractOscalValidationCommand {
027  @Override
028  public String getDescription() {
029    return "Check that the specified OSCAL instance is well-formed and valid to an OSCAL model.";
030  }
031
032  @Override
033  @NonNull
034  public List<Source> getOscalXmlSchemas() throws IOException {
035    List<Source> retval = new LinkedList<>();
036    retval.add(
037        XmlUtil.getStreamSource(ObjectUtils.requireNonNull(
038            OscalBindingContext.class.getResource("/schema/xml/oscal-complete_schema.xsd"))));
039    return CollectionUtil.unmodifiableList(retval);
040  }
041
042  @Override
043  @NonNull
044  public JSONObject getOscalJsonSchema() throws IOException {
045    try (InputStream is = ObjectUtils.requireNonNull(
046        OscalBindingContext.class.getResourceAsStream("/schema/json/oscal-complete_schema.json"))) {
047      return JsonUtil.toJsonObject(is);
048    }
049  }
050}