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}