001package gov.nist.secauto.oscal.lib.model;
002
003import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
004import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
005import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
006import gov.nist.secauto.metaschema.binding.model.annotations.Index;
007import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
008import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
009import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
010import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
011import java.lang.Override;
012import java.lang.String;
013import java.util.UUID;
014import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
015import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
016
017/**
018 * A system security plan, such as those described in NIST SP 800-18.
019 */
020@MetaschemaAssembly(
021    formalName = "System Security Plan (SSP)",
022    description = "A system security plan, such as those described in NIST SP 800-18.",
023    name = "system-security-plan",
024    metaschema = OscalSspMetaschema.class,
025    rootName = "system-security-plan"
026)
027@AssemblyConstraints(
028    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 {
031  @BoundFlag(
032      formalName = "System Security Plan Universally Unique Identifier",
033      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.",
034      useName = "uuid",
035      required = true,
036      typeAdapter = UuidAdapter.class
037  )
038  private UUID _uuid;
039
040  @BoundAssembly(
041      formalName = "Document Metadata",
042      description = "Provides information about the containing document, and defines concepts that are shared across the document.",
043      useName = "metadata",
044      minOccurs = 1
045  )
046  private Metadata _metadata;
047
048  @BoundAssembly(
049      formalName = "Import Profile",
050      description = "Used to import the OSCAL profile representing the system's control baseline.",
051      useName = "import-profile",
052      minOccurs = 1
053  )
054  private ImportProfile _importProfile;
055
056  @BoundAssembly(
057      formalName = "System Characteristics",
058      description = "Contains the characteristics of the system, such as its name, purpose, and security impact level.",
059      useName = "system-characteristics",
060      minOccurs = 1
061  )
062  private SystemCharacteristics _systemCharacteristics;
063
064  @BoundAssembly(
065      formalName = "System Implementation",
066      description = "Provides information as to how the system is implemented.",
067      useName = "system-implementation",
068      minOccurs = 1
069  )
070  private SystemImplementation _systemImplementation;
071
072  @BoundAssembly(
073      formalName = "Control Implementation",
074      description = "Describes how the system satisfies a set of controls.",
075      useName = "control-implementation",
076      minOccurs = 1
077  )
078  private ControlImplementation _controlImplementation;
079
080  @BoundAssembly(
081      formalName = "Back matter",
082      description = "A collection of resources that may be referenced from within the OSCAL document instance.",
083      useName = "back-matter"
084  )
085  private BackMatter _backMatter;
086
087  public SystemSecurityPlan() {
088  }
089
090  public UUID getUuid() {
091    return _uuid;
092  }
093
094  public void setUuid(UUID value) {
095    _uuid = value;
096  }
097
098  public Metadata getMetadata() {
099    return _metadata;
100  }
101
102  public void setMetadata(Metadata value) {
103    _metadata = value;
104  }
105
106  public ImportProfile getImportProfile() {
107    return _importProfile;
108  }
109
110  public void setImportProfile(ImportProfile value) {
111    _importProfile = value;
112  }
113
114  public SystemCharacteristics getSystemCharacteristics() {
115    return _systemCharacteristics;
116  }
117
118  public void setSystemCharacteristics(SystemCharacteristics value) {
119    _systemCharacteristics = value;
120  }
121
122  public SystemImplementation getSystemImplementation() {
123    return _systemImplementation;
124  }
125
126  public void setSystemImplementation(SystemImplementation value) {
127    _systemImplementation = value;
128  }
129
130  public ControlImplementation getControlImplementation() {
131    return _controlImplementation;
132  }
133
134  public void setControlImplementation(ControlImplementation value) {
135    _controlImplementation = value;
136  }
137
138  public BackMatter getBackMatter() {
139    return _backMatter;
140  }
141
142  public void setBackMatter(BackMatter value) {
143    _backMatter = value;
144  }
145
146  @Override
147  public String toString() {
148    return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
149  }
150}