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}