SystemSecurityPlan.java

package gov.nist.secauto.oscal.lib.model;

import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
import gov.nist.secauto.metaschema.binding.model.annotations.Index;
import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
import java.lang.Override;
import java.lang.String;
import java.util.UUID;
import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

/**
 * A system security plan, such as those described in NIST SP 800-18.
 */
@MetaschemaAssembly(
    formalName = "System Security Plan (SSP)",
    description = "A system security plan, such as those described in NIST SP 800-18.",
    name = "system-security-plan",
    metaschema = OscalSspMetaschema.class,
    rootName = "system-security-plan"
)
@AssemblyConstraints(
    index = @Index(level = IConstraint.Level.ERROR, target = "control-implementation/implemented-requirement//by-component|doc(system-implementation/leveraged-authorization/link[@rel='system-security-plan']/@href)/system-security-plan/control-implementation/implemented-requirement//by-component", name = "by-component-uuid", keyFields = @KeyField(target = "@uuid"))
)
public class SystemSecurityPlan extends AbstractOscalInstance {
  @BoundFlag(
      formalName = "System Security Plan Universally Unique Identifier",
      description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented), [globally unique](https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique) identifier with [cross-instance](https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance) scope that can be used to reference this system security plan (SSP) elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `SSP` can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance).This UUID should be assigned [per-subject](https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency), which means it should be consistently used to identify the same subject across revisions of the document.",
      useName = "uuid",
      required = true,
      typeAdapter = UuidAdapter.class
  )
  private UUID _uuid;

  @BoundAssembly(
      formalName = "Document Metadata",
      description = "Provides information about the containing document, and defines concepts that are shared across the document.",
      useName = "metadata",
      minOccurs = 1
  )
  private Metadata _metadata;

  @BoundAssembly(
      formalName = "Import Profile",
      description = "Used to import the OSCAL profile representing the system's control baseline.",
      useName = "import-profile",
      minOccurs = 1
  )
  private ImportProfile _importProfile;

  @BoundAssembly(
      formalName = "System Characteristics",
      description = "Contains the characteristics of the system, such as its name, purpose, and security impact level.",
      useName = "system-characteristics",
      minOccurs = 1
  )
  private SystemCharacteristics _systemCharacteristics;

  @BoundAssembly(
      formalName = "System Implementation",
      description = "Provides information as to how the system is implemented.",
      useName = "system-implementation",
      minOccurs = 1
  )
  private SystemImplementation _systemImplementation;

  @BoundAssembly(
      formalName = "Control Implementation",
      description = "Describes how the system satisfies a set of controls.",
      useName = "control-implementation",
      minOccurs = 1
  )
  private ControlImplementation _controlImplementation;

  @BoundAssembly(
      formalName = "Back matter",
      description = "A collection of resources that may be referenced from within the OSCAL document instance.",
      useName = "back-matter"
  )
  private BackMatter _backMatter;

  public SystemSecurityPlan() {
  }

  public UUID getUuid() {
    return _uuid;
  }

  public void setUuid(UUID value) {
    _uuid = value;
  }

  public Metadata getMetadata() {
    return _metadata;
  }

  public void setMetadata(Metadata value) {
    _metadata = value;
  }

  public ImportProfile getImportProfile() {
    return _importProfile;
  }

  public void setImportProfile(ImportProfile value) {
    _importProfile = value;
  }

  public SystemCharacteristics getSystemCharacteristics() {
    return _systemCharacteristics;
  }

  public void setSystemCharacteristics(SystemCharacteristics value) {
    _systemCharacteristics = value;
  }

  public SystemImplementation getSystemImplementation() {
    return _systemImplementation;
  }

  public void setSystemImplementation(SystemImplementation value) {
    _systemImplementation = value;
  }

  public ControlImplementation getControlImplementation() {
    return _controlImplementation;
  }

  public void setControlImplementation(ControlImplementation value) {
    _controlImplementation = value;
  }

  public BackMatter getBackMatter() {
    return _backMatter;
  }

  public void setBackMatter(BackMatter value) {
    _backMatter = value;
  }

  @Override
  public String toString() {
    return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
  }
}