001// Generated from: ../../../../../../../../oscal/src/metaschema/oscal_component_metaschema.xml
002// Do not edit - changes will be lost when regenerated.
003package dev.metaschema.oscal.lib.model;
004
005import dev.metaschema.core.datatype.markup.MarkupLine;
006import dev.metaschema.core.datatype.markup.MarkupMultiline;
007import dev.metaschema.databind.IBindingContext;
008import dev.metaschema.databind.model.AbstractBoundModule;
009import dev.metaschema.databind.model.IBoundModule;
010import dev.metaschema.databind.model.annotations.MetaschemaModule;
011import java.net.URI;
012import java.util.List;
013
014/**
015 * OSCAL Component Definition Model
016 * <p>The OSCAL Component Definition Model can be used to describe the implementation of controls in a <code>component</code> or a set of components grouped as a <code>capability</code>. A component can be either a <em>technical component</em> , or a <em>documentary component</em>.</p>
017 * <p>A technical component is a component that is implemented in hardware (physical or virtual) or software. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their hardware and software.</p>
018 * <p>A documentary component is a component implemented for a documented process, procedure, or policy. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their process, procedure, or policy.</p>
019 * <p>The information provided by a technical or documentary component can be used by component consumers to provide starting narratives for documenting control implementations in an OSCAL SSP.</p>
020 * <p>The root of the OSCAL Implementation Layer Component Definition model is <code>component-definition</code>.</p>
021 */
022@MetaschemaModule(
023    assemblies = {
024        ComponentDefinition.class,
025        ImportComponentDefinition.class,
026        DefinedComponent.class,
027        Capability.class,
028        IncorporatesComponent.class,
029        ComponentControlImplementation.class,
030        ComponentImplementedRequirement.class,
031        ComponentStatement.class
032    },
033    imports = OscalImplementationCommonModule.class,
034    remarks = "The OSCAL Component Definition Model can be used to describe the implementation of controls in a `component` or a set of components grouped as a `capability`. A component can be either a *technical component* , or a *documentary component*.\n"
035            + "\n"
036            + "A technical component is a component that is implemented in hardware (physical or virtual) or software. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their hardware and software.\n"
037            + "\n"
038            + "A documentary component is a component implemented for a documented process, procedure, or policy. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their process, procedure, or policy.\n"
039            + "\n"
040            + "The information provided by a technical or documentary component can be used by component consumers to provide starting narratives for documenting control implementations in an OSCAL SSP.\n"
041            + "\n"
042            + "The root of the OSCAL Implementation Layer Component Definition model is `component-definition`."
043)
044public final class OscalComponentDefinitionModule extends AbstractBoundModule {
045  private static final MarkupLine NAME = MarkupLine.fromMarkdown("OSCAL Component Definition Model");
046
047  private static final String SHORT_NAME = "oscal-component-definition";
048
049  private static final String VERSION = "1.1.3";
050
051  private static final URI XML_NAMESPACE = URI.create("http://csrc.nist.gov/ns/oscal/1.0");
052
053  private static final URI JSON_BASE_URI = URI.create("http://csrc.nist.gov/ns/oscal");
054
055  private static final MarkupMultiline REMARKS = MarkupMultiline.fromMarkdown("The OSCAL Component Definition Model can be used to describe the implementation of controls in a `component` or a set of components grouped as a `capability`. A component can be either a *technical component* , or a *documentary component*.\n"
056      + "\n"
057      + "A technical component is a component that is implemented in hardware (physical or virtual) or software. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their hardware and software.\n"
058      + "\n"
059      + "A documentary component is a component implemented for a documented process, procedure, or policy. Suppliers may document components in an OSCAL component definition that describes the implementation of controls in their process, procedure, or policy.\n"
060      + "\n"
061      + "The information provided by a technical or documentary component can be used by component consumers to provide starting narratives for documenting control implementations in an OSCAL SSP.\n"
062      + "\n"
063      + "The root of the OSCAL Implementation Layer Component Definition model is `component-definition`.");
064
065  /**
066   * Construct a new module instance.
067   *
068   * @param importedModules
069   *           modules imported by this module
070   * @param bindingContext
071   *           the binding context to associate with this module
072   */
073  public OscalComponentDefinitionModule(List<? extends IBoundModule> importedModules,
074      IBindingContext bindingContext) {
075    super(importedModules, bindingContext);
076  }
077
078  @Override
079  public MarkupLine getName() {
080    return NAME;
081  }
082
083  @Override
084  public String getShortName() {
085    return SHORT_NAME;
086  }
087
088  @Override
089  public String getVersion() {
090    return VERSION;
091  }
092
093  @Override
094  public URI getXmlNamespace() {
095    return XML_NAMESPACE;
096  }
097
098  @Override
099  public URI getJsonBaseUri() {
100    return JSON_BASE_URI;
101  }
102
103  @Override
104  public MarkupMultiline getRemarks() {
105    return REMARKS;
106  }
107}