1 package gov.nist.secauto.oscal.lib.model;
2
3 import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
4 import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
5 import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
6 import gov.nist.secauto.metaschema.binding.model.annotations.Index;
7 import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
8 import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
9 import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
10 import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
11 import java.lang.Override;
12 import java.lang.String;
13 import java.util.UUID;
14 import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
15 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
16
17
18
19
20 @MetaschemaAssembly(
21 formalName = "System Security Plan (SSP)",
22 description = "A system security plan, such as those described in NIST SP 800-18.",
23 name = "system-security-plan",
24 metaschema = OscalSspMetaschema.class,
25 rootName = "system-security-plan"
26 )
27 @AssemblyConstraints(
28 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"))
29 )
30 public class SystemSecurityPlan extends AbstractOscalInstance {
31 @BoundFlag(
32 formalName = "System Security Plan Universally Unique Identifier",
33 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.",
34 useName = "uuid",
35 required = true,
36 typeAdapter = UuidAdapter.class
37 )
38 private UUID _uuid;
39
40 @BoundAssembly(
41 formalName = "Document Metadata",
42 description = "Provides information about the containing document, and defines concepts that are shared across the document.",
43 useName = "metadata",
44 minOccurs = 1
45 )
46 private Metadata _metadata;
47
48 @BoundAssembly(
49 formalName = "Import Profile",
50 description = "Used to import the OSCAL profile representing the system's control baseline.",
51 useName = "import-profile",
52 minOccurs = 1
53 )
54 private ImportProfile _importProfile;
55
56 @BoundAssembly(
57 formalName = "System Characteristics",
58 description = "Contains the characteristics of the system, such as its name, purpose, and security impact level.",
59 useName = "system-characteristics",
60 minOccurs = 1
61 )
62 private SystemCharacteristics _systemCharacteristics;
63
64 @BoundAssembly(
65 formalName = "System Implementation",
66 description = "Provides information as to how the system is implemented.",
67 useName = "system-implementation",
68 minOccurs = 1
69 )
70 private SystemImplementation _systemImplementation;
71
72 @BoundAssembly(
73 formalName = "Control Implementation",
74 description = "Describes how the system satisfies a set of controls.",
75 useName = "control-implementation",
76 minOccurs = 1
77 )
78 private ControlImplementation _controlImplementation;
79
80 @BoundAssembly(
81 formalName = "Back matter",
82 description = "A collection of resources that may be referenced from within the OSCAL document instance.",
83 useName = "back-matter"
84 )
85 private BackMatter _backMatter;
86
87 public SystemSecurityPlan() {
88 }
89
90 public UUID getUuid() {
91 return _uuid;
92 }
93
94 public void setUuid(UUID value) {
95 _uuid = value;
96 }
97
98 public Metadata getMetadata() {
99 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 }