001package gov.nist.secauto.oscal.lib.model;
002
003import gov.nist.secauto.metaschema.core.datatype.adapter.UuidAdapter;
004import gov.nist.secauto.metaschema.core.model.IBoundObject;
005import gov.nist.secauto.metaschema.core.model.IMetaschemaData;
006import gov.nist.secauto.metaschema.core.model.constraint.IConstraint;
007import gov.nist.secauto.metaschema.databind.model.annotations.AssemblyConstraints;
008import gov.nist.secauto.metaschema.databind.model.annotations.BoundAssembly;
009import gov.nist.secauto.metaschema.databind.model.annotations.BoundFlag;
010import gov.nist.secauto.metaschema.databind.model.annotations.Index;
011import gov.nist.secauto.metaschema.databind.model.annotations.KeyField;
012import gov.nist.secauto.metaschema.databind.model.annotations.MetaschemaAssembly;
013import java.lang.Override;
014import java.lang.String;
015import java.util.UUID;
016import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
017import org.apache.commons.lang3.builder.ToStringStyle;
018
019/**
020 * A system security plan, such as those described in NIST SP 800-18.
021 */
022@MetaschemaAssembly(
023    formalName = "System Security Plan (SSP)",
024    description = "A system security plan, such as those described in NIST SP 800-18.",
025    name = "system-security-plan",
026    moduleClass = OscalSspModule.class,
027    rootName = "system-security-plan",
028    modelConstraints = @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")))
029)
030public class SystemSecurityPlan extends AbstractOscalInstance implements IBoundObject {
031  private final IMetaschemaData __metaschemaData;
032
033  /**
034   * "A <a href=\"https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented\">machine-oriented</a>, <a href=\"https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique\">globally unique</a> identifier with <a href=\"https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance\">cross-instance</a> scope that can be used to reference this system security plan (SSP) elsewhere in <a href=\"https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers\">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>SSP</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance).This UUID should be assigned <a href=\"https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency\">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document."
035   */
036  @BoundFlag(
037      formalName = "System Security Plan Universally Unique Identifier",
038      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.",
039      name = "uuid",
040      required = true,
041      typeAdapter = UuidAdapter.class
042  )
043  private UUID _uuid;
044
045  @BoundAssembly(
046      formalName = "Document Metadata",
047      description = "Provides information about the containing document, and defines concepts that are shared across the document.",
048      useName = "metadata",
049      minOccurs = 1
050  )
051  private Metadata _metadata;
052
053  @BoundAssembly(
054      formalName = "Import Profile",
055      description = "Used to import the OSCAL profile representing the system's control baseline.",
056      useName = "import-profile",
057      minOccurs = 1
058  )
059  private ImportProfile _importProfile;
060
061  @BoundAssembly(
062      formalName = "System Characteristics",
063      description = "Contains the characteristics of the system, such as its name, purpose, and security impact level.",
064      useName = "system-characteristics",
065      minOccurs = 1
066  )
067  private SystemCharacteristics _systemCharacteristics;
068
069  @BoundAssembly(
070      formalName = "System Implementation",
071      description = "Provides information as to how the system is implemented.",
072      useName = "system-implementation",
073      minOccurs = 1
074  )
075  private SystemImplementation _systemImplementation;
076
077  @BoundAssembly(
078      formalName = "Control Implementation",
079      description = "Describes how the system satisfies a set of controls.",
080      useName = "control-implementation",
081      minOccurs = 1
082  )
083  private ControlImplementation _controlImplementation;
084
085  @BoundAssembly(
086      formalName = "Back matter",
087      description = "A collection of resources that may be referenced from within the OSCAL document instance.",
088      useName = "back-matter"
089  )
090  private BackMatter _backMatter;
091
092  public SystemSecurityPlan() {
093    this(null);
094  }
095
096  public SystemSecurityPlan(IMetaschemaData data) {
097    this.__metaschemaData = data;
098  }
099
100  @Override
101  public IMetaschemaData getMetaschemaData() {
102    return __metaschemaData;
103  }
104
105  public UUID getUuid() {
106    return _uuid;
107  }
108
109  public void setUuid(UUID value) {
110    _uuid = value;
111  }
112
113  public Metadata getMetadata() {
114    return _metadata;
115  }
116
117  public void setMetadata(Metadata value) {
118    _metadata = value;
119  }
120
121  public ImportProfile getImportProfile() {
122    return _importProfile;
123  }
124
125  public void setImportProfile(ImportProfile value) {
126    _importProfile = value;
127  }
128
129  public SystemCharacteristics getSystemCharacteristics() {
130    return _systemCharacteristics;
131  }
132
133  public void setSystemCharacteristics(SystemCharacteristics value) {
134    _systemCharacteristics = value;
135  }
136
137  public SystemImplementation getSystemImplementation() {
138    return _systemImplementation;
139  }
140
141  public void setSystemImplementation(SystemImplementation value) {
142    _systemImplementation = value;
143  }
144
145  public ControlImplementation getControlImplementation() {
146    return _controlImplementation;
147  }
148
149  public void setControlImplementation(ControlImplementation value) {
150    _controlImplementation = value;
151  }
152
153  public BackMatter getBackMatter() {
154    return _backMatter;
155  }
156
157  public void setBackMatter(BackMatter value) {
158    _backMatter = value;
159  }
160
161  @Override
162  public String toString() {
163    return new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString();
164  }
165}