001// Generated from: ../../../../../../../../oscal/src/metaschema/oscal_ssp_metaschema.xml 002// Do not edit - changes will be lost when regenerated. 003package dev.metaschema.oscal.lib.model; 004 005import dev.metaschema.core.datatype.adapter.DateAdapter; 006import dev.metaschema.core.datatype.adapter.StringAdapter; 007import dev.metaschema.core.datatype.markup.MarkupMultiline; 008import dev.metaschema.core.datatype.markup.MarkupMultilineAdapter; 009import dev.metaschema.core.datatype.object.AmbiguousDate; 010import dev.metaschema.core.model.IBoundObject; 011import dev.metaschema.core.model.IMetaschemaData; 012import dev.metaschema.core.model.JsonGroupAsBehavior; 013import dev.metaschema.core.model.constraint.IConstraint; 014import dev.metaschema.core.util.ObjectUtils; 015import dev.metaschema.databind.model.annotations.AllowedValue; 016import dev.metaschema.databind.model.annotations.AllowedValues; 017import dev.metaschema.databind.model.annotations.AssemblyConstraints; 018import dev.metaschema.databind.model.annotations.BoundAssembly; 019import dev.metaschema.databind.model.annotations.BoundField; 020import dev.metaschema.databind.model.annotations.GroupAs; 021import dev.metaschema.databind.model.annotations.IsUnique; 022import dev.metaschema.databind.model.annotations.KeyField; 023import dev.metaschema.databind.model.annotations.MetaschemaAssembly; 024import dev.metaschema.databind.model.annotations.ValueConstraints; 025import edu.umd.cs.findbugs.annotations.NonNull; 026import edu.umd.cs.findbugs.annotations.Nullable; 027import java.util.LinkedList; 028import java.util.List; 029import org.apache.commons.lang3.builder.ReflectionToStringBuilder; 030import org.apache.commons.lang3.builder.ToStringStyle; 031 032/** 033 * Contains the characteristics of the system, such as its name, purpose, and security impact level. 034 */ 035@MetaschemaAssembly( 036 formalName = "System Characteristics", 037 description = "Contains the characteristics of the system, such as its name, purpose, and security impact level.", 038 name = "system-characteristics", 039 moduleClass = OscalSspModule.class, 040 valueConstraints = @ValueConstraints(allowedValues = {@AllowedValues(id = "oscal-system-characteristics-prop-name-values", level = IConstraint.Level.ERROR, target = "prop[has-oscal-namespace('http://csrc.nist.gov/ns/oscal')]/@name", values = {@AllowedValue(value = "identity-assurance-level", description = "A value of 1, 2, or 3 as defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3)."), @AllowedValue(value = "authenticator-assurance-level", description = "A value of 1, 2, or 3 as defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3)."), @AllowedValue(value = "federation-assurance-level", description = "A value of 1, 2, or 3 as defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3).")}), @AllowedValues(id = "oscal-system-characteristics-prop-sp-800-63-assurance-level-values", level = IConstraint.Level.ERROR, target = "prop[@name=('identity-assurance-level','authenticator-assurance-level','federation-assurance-level')]/@value", values = {@AllowedValue(value = "1", description = "As defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3)."), @AllowedValue(value = "2", description = "As defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3)."), @AllowedValue(value = "3", description = "As defined by [SP 800-63-3](https://doi.org/10.6028/NIST.SP.800-63-3).")}), @AllowedValues(id = "oscal-system-characteristics-prop-name-values", level = IConstraint.Level.ERROR, target = "prop[has-oscal-namespace('http://csrc.nist.gov/ns/oscal')]/@name", values = {@AllowedValue(value = "cloud-deployment-model", description = "The associated value is one of: public-cloud, private-cloud, community-cloud, government-only-cloud, hybrid-cloud, or other."), @AllowedValue(value = "cloud-service-model", description = "The associated value is one of: saas, paas, iaas, or other.")}), @AllowedValues(id = "oscal-system-characteristics-prop-cloud-deployment-model-values", level = IConstraint.Level.ERROR, target = "prop[has-oscal-namespace('http://csrc.nist.gov/ns/oscal') and @name='cloud-deployment-model']/@value", values = {@AllowedValue(value = "public-cloud", description = "The public cloud deployment model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "private-cloud", description = "The private cloud deployment model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "community-cloud", description = "The community cloud deployment model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "hybrid-cloud", description = "The hybrid cloud deployment model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "government-only-cloud", description = "A specific type of community-cloud for use only by government services."), @AllowedValue(value = "other", description = "Any other type of cloud deployment model that is exclusive to the other choices.")}, remarks = "The hybrid cloud deployment model, as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145), can be supported by selecting two or more of the existing deployment models."), @AllowedValues(id = "oscal-system-characteristics-prop-cloud-service-model-values", level = IConstraint.Level.ERROR, target = "prop[has-oscal-namespace('http://csrc.nist.gov/ns/oscal') and @name='cloud-service-model']/@value", values = {@AllowedValue(value = "saas", description = "Software as a service (SaaS) cloud service model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "paas", description = "Platform as a service (PaaS) cloud service model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "iaas", description = "Infrastructure as a service (IaaS) cloud service model as defined by [The NIST Definition of Cloud Computing](https://doi.org/10.6028/NIST.SP.800-145)."), @AllowedValue(value = "other", description = "Any other type of cloud service model that is exclusive to the other choices.")}), @AllowedValues(id = "oscal-system-characteristics-responsible-party-role-id-values", level = IConstraint.Level.ERROR, target = "responsible-party/@role-id", allowOthers = true, values = {@AllowedValue(value = "authorizing-official", description = "The authorizing official for this system."), @AllowedValue(value = "authorizing-official-poc", description = "The authorizing official's designated point of contact (POC) for this system."), @AllowedValue(value = "system-owner", description = "The executive ultimately accountable for the system."), @AllowedValue(value = "system-poc-management", description = "The primary management-level point of contact (POC) for the system."), @AllowedValue(value = "system-poc-technical", description = "The primary technical point of contact (POC) for the system."), @AllowedValue(value = "system-poc-other", description = "Other point of contact (POC) for the system that is not the management or technical POC."), @AllowedValue(value = "information-system-security-officer", description = "The primary role responsible for ensuring the organization operates the system securely."), @AllowedValue(value = "privacy-poc", description = "The point of contact (POC) responsible for identifying privacy information within the system, and ensuring its protection if present.")})}), 041 modelConstraints = @AssemblyConstraints(unique = @IsUnique(id = "oscal-unique-ssp-system-characteristics-responsible-party", level = IConstraint.Level.ERROR, target = "responsible-party", keyFields = @KeyField(target = "@role-id"), remarks = "Since `responsible-party` associates multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")) 042) 043public class SystemCharacteristics implements IBoundObject { 044 private final IMetaschemaData __metaschemaData; 045 046 /** 047 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#human-oriented">human-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 identification property elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. When referencing an externally defined <code>system identification</code>, the <code>system identification</code> must be used in the context of the external / imported OSCAL instance (e.g., uri-reference). This string 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 system across revisions of the document. 048 */ 049 @BoundField( 050 formalName = "System Identification", 051 description = "A [human-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#human-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 identification property elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope). When referencing an externally defined `system identification`, the `system identification` must be used in the context of the external / imported OSCAL instance (e.g., uri-reference). This string 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 system across revisions of the document.", 052 useName = "system-id", 053 minOccurs = 1, 054 maxOccurs = -1, 055 groupAs = @GroupAs(name = "system-ids", inJson = JsonGroupAsBehavior.LIST) 056 ) 057 private List<SystemId> _systemIds; 058 059 /** 060 * The full name of the system. 061 */ 062 @BoundField( 063 formalName = "System Name - Full", 064 description = "The full name of the system.", 065 useName = "system-name", 066 minOccurs = 1, 067 typeAdapter = StringAdapter.class 068 ) 069 private String _systemName; 070 071 /** 072 * A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. 073 */ 074 @BoundField( 075 formalName = "System Name - Short", 076 description = "A short name for the system, such as an acronym, that is suitable for display in a data table or summary list.", 077 useName = "system-name-short", 078 remarks = "Since `system-name-short` is optional, if the `system-name-short` is not provided, the `system-name` can be used as a substitute.", 079 typeAdapter = StringAdapter.class 080 ) 081 private String _systemNameShort; 082 083 /** 084 * A summary of the system. 085 */ 086 @BoundField( 087 formalName = "System Description", 088 description = "A summary of the system.", 089 useName = "description", 090 minOccurs = 1, 091 typeAdapter = MarkupMultilineAdapter.class 092 ) 093 private MarkupMultiline _description; 094 095 /** 096 * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair. 097 */ 098 @BoundAssembly( 099 formalName = "Property", 100 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.", 101 useName = "prop", 102 maxOccurs = -1, 103 groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST) 104 ) 105 private List<Property> _props; 106 107 /** 108 * A reference to a local or remote resource, that has a specific relation to the containing object. 109 */ 110 @BoundAssembly( 111 formalName = "Link", 112 description = "A reference to a local or remote resource, that has a specific relation to the containing object.", 113 useName = "link", 114 maxOccurs = -1, 115 groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST) 116 ) 117 private List<Link> _links; 118 119 /** 120 * The date the system received its authorization. 121 */ 122 @BoundField( 123 formalName = "System Authorization Date", 124 description = "The date the system received its authorization.", 125 useName = "date-authorized", 126 typeAdapter = DateAdapter.class 127 ) 128 private AmbiguousDate _dateAuthorized; 129 130 /** 131 * The overall information system sensitivity categorization, such as defined by <a href="https://doi.org/10.6028/NIST.FIPS.199">FIPS-199</a>. 132 */ 133 @BoundField( 134 formalName = "Security Sensitivity Level", 135 description = "The overall information system sensitivity categorization, such as defined by [FIPS-199](https://doi.org/10.6028/NIST.FIPS.199).", 136 useName = "security-sensitivity-level", 137 remarks = "Often, organizations require the security sensitivity level to correspond with the highest confidentiality, integrity, or availability level identified by `security-impact-level`.", 138 typeAdapter = StringAdapter.class 139 ) 140 private String _securitySensitivityLevel; 141 142 /** 143 * Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in <a href="https://doi.org/10.6028/NIST.SP.800-60v2r1">NIST SP 800-60</a>. 144 */ 145 @BoundAssembly( 146 formalName = "System Information", 147 description = "Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in [NIST SP 800-60](https://doi.org/10.6028/NIST.SP.800-60v2r1).", 148 useName = "system-information", 149 minOccurs = 1 150 ) 151 private SystemInformation _systemInformation; 152 153 /** 154 * The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. 155 */ 156 @BoundAssembly( 157 formalName = "Security Impact Level", 158 description = "The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information.", 159 useName = "security-impact-level" 160 ) 161 private SecurityImpactLevel _securityImpactLevel; 162 163 /** 164 * Describes the operational status of the system. 165 */ 166 @BoundAssembly( 167 formalName = "Status", 168 description = "Describes the operational status of the system.", 169 useName = "status", 170 minOccurs = 1 171 ) 172 private Status _status; 173 174 /** 175 * A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. 176 */ 177 @BoundAssembly( 178 formalName = "Authorization Boundary", 179 description = "A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary.", 180 useName = "authorization-boundary", 181 minOccurs = 1 182 ) 183 private AuthorizationBoundary _authorizationBoundary; 184 185 /** 186 * A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. 187 */ 188 @BoundAssembly( 189 formalName = "Network Architecture", 190 description = "A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture.", 191 useName = "network-architecture" 192 ) 193 private NetworkArchitecture _networkArchitecture; 194 195 /** 196 * A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. 197 */ 198 @BoundAssembly( 199 formalName = "Data Flow", 200 description = "A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows.", 201 useName = "data-flow" 202 ) 203 private DataFlow _dataFlow; 204 205 /** 206 * A reference to a set of persons and/or organizations that have responsibility for performing the referenced role in the context of the containing object. 207 */ 208 @BoundAssembly( 209 formalName = "Responsible Party", 210 description = "A reference to a set of persons and/or organizations that have responsibility for performing the referenced role in the context of the containing object.", 211 useName = "responsible-party", 212 maxOccurs = -1, 213 groupAs = @GroupAs(name = "responsible-parties", inJson = JsonGroupAsBehavior.LIST) 214 ) 215 private List<ResponsibleParty> _responsibleParties; 216 217 /** 218 * Additional commentary about the containing object. 219 */ 220 @BoundField( 221 formalName = "Remarks", 222 description = "Additional commentary about the containing object.", 223 useName = "remarks", 224 typeAdapter = MarkupMultilineAdapter.class 225 ) 226 private MarkupMultiline _remarks; 227 228 /** 229 * Constructs a new {@code dev.metaschema.oscal.lib.model.SystemCharacteristics} instance with no metadata. 230 */ 231 public SystemCharacteristics() { 232 this(null); 233 } 234 235 /** 236 * Constructs a new {@code dev.metaschema.oscal.lib.model.SystemCharacteristics} instance with the specified metadata. 237 * 238 * @param data 239 * the metaschema data, or {@code null} if none 240 */ 241 public SystemCharacteristics(IMetaschemaData data) { 242 this.__metaschemaData = data; 243 } 244 245 @Override 246 public IMetaschemaData getMetaschemaData() { 247 return __metaschemaData; 248 } 249 250 /** 251 * Get the "{@literal System Identification}". 252 * 253 * <p> 254 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#human-oriented">human-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 identification property elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. When referencing an externally defined <code>system identification</code>, the <code>system identification</code> must be used in the context of the external / imported OSCAL instance (e.g., uri-reference). This string 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 system across revisions of the document. 255 * 256 * @return the system-id value 257 */ 258 @NonNull 259 public List<SystemId> getSystemIds() { 260 if (_systemIds == null) { 261 _systemIds = new LinkedList<>(); 262 } 263 return ObjectUtils.notNull(_systemIds); 264 } 265 266 /** 267 * Set the "{@literal System Identification}". 268 * 269 * <p> 270 * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#human-oriented">human-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 identification property elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. When referencing an externally defined <code>system identification</code>, the <code>system identification</code> must be used in the context of the external / imported OSCAL instance (e.g., uri-reference). This string 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 system across revisions of the document. 271 * 272 * @param value 273 * the system-id value to set 274 */ 275 public void setSystemIds(@NonNull List<SystemId> value) { 276 _systemIds = value; 277 } 278 279 /** 280 * Add a new {@link SystemId} item to the underlying collection. 281 * @param item the item to add 282 * @return {@code true} 283 */ 284 public boolean addSystemId(SystemId item) { 285 SystemId value = ObjectUtils.requireNonNull(item,"item cannot be null"); 286 if (_systemIds == null) { 287 _systemIds = new LinkedList<>(); 288 } 289 return _systemIds.add(value); 290 } 291 292 /** 293 * Remove the first matching {@link SystemId} item from the underlying collection. 294 * @param item the item to remove 295 * @return {@code true} if the item was removed or {@code false} otherwise 296 */ 297 public boolean removeSystemId(SystemId item) { 298 SystemId value = ObjectUtils.requireNonNull(item,"item cannot be null"); 299 return _systemIds != null && _systemIds.remove(value); 300 } 301 302 /** 303 * Get the "{@literal System Name - Full}". 304 * 305 * <p> 306 * The full name of the system. 307 * 308 * @return the system-name value 309 */ 310 @NonNull 311 public String getSystemName() { 312 return _systemName; 313 } 314 315 /** 316 * Set the "{@literal System Name - Full}". 317 * 318 * <p> 319 * The full name of the system. 320 * 321 * @param value 322 * the system-name value to set 323 */ 324 public void setSystemName(@NonNull String value) { 325 _systemName = value; 326 } 327 328 /** 329 * Get the "{@literal System Name - Short}". 330 * 331 * <p> 332 * A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. 333 * 334 * @return the system-name-short value, or {@code null} if not set 335 */ 336 @Nullable 337 public String getSystemNameShort() { 338 return _systemNameShort; 339 } 340 341 /** 342 * Set the "{@literal System Name - Short}". 343 * 344 * <p> 345 * A short name for the system, such as an acronym, that is suitable for display in a data table or summary list. 346 * 347 * @param value 348 * the system-name-short value to set, or {@code null} to clear 349 */ 350 public void setSystemNameShort(@Nullable String value) { 351 _systemNameShort = value; 352 } 353 354 /** 355 * Get the "{@literal System Description}". 356 * 357 * <p> 358 * A summary of the system. 359 * 360 * @return the description value 361 */ 362 @NonNull 363 public MarkupMultiline getDescription() { 364 return _description; 365 } 366 367 /** 368 * Set the "{@literal System Description}". 369 * 370 * <p> 371 * A summary of the system. 372 * 373 * @param value 374 * the description value to set 375 */ 376 public void setDescription(@NonNull MarkupMultiline value) { 377 _description = value; 378 } 379 380 /** 381 * Get the "{@literal Property}". 382 * 383 * <p> 384 * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair. 385 * 386 * @return the prop value 387 */ 388 @NonNull 389 public List<Property> getProps() { 390 if (_props == null) { 391 _props = new LinkedList<>(); 392 } 393 return ObjectUtils.notNull(_props); 394 } 395 396 /** 397 * Set the "{@literal Property}". 398 * 399 * <p> 400 * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair. 401 * 402 * @param value 403 * the prop value to set 404 */ 405 public void setProps(@NonNull List<Property> value) { 406 _props = value; 407 } 408 409 /** 410 * Add a new {@link Property} item to the underlying collection. 411 * @param item the item to add 412 * @return {@code true} 413 */ 414 public boolean addProp(Property item) { 415 Property value = ObjectUtils.requireNonNull(item,"item cannot be null"); 416 if (_props == null) { 417 _props = new LinkedList<>(); 418 } 419 return _props.add(value); 420 } 421 422 /** 423 * Remove the first matching {@link Property} item from the underlying collection. 424 * @param item the item to remove 425 * @return {@code true} if the item was removed or {@code false} otherwise 426 */ 427 public boolean removeProp(Property item) { 428 Property value = ObjectUtils.requireNonNull(item,"item cannot be null"); 429 return _props != null && _props.remove(value); 430 } 431 432 /** 433 * Get the "{@literal Link}". 434 * 435 * <p> 436 * A reference to a local or remote resource, that has a specific relation to the containing object. 437 * 438 * @return the link value 439 */ 440 @NonNull 441 public List<Link> getLinks() { 442 if (_links == null) { 443 _links = new LinkedList<>(); 444 } 445 return ObjectUtils.notNull(_links); 446 } 447 448 /** 449 * Set the "{@literal Link}". 450 * 451 * <p> 452 * A reference to a local or remote resource, that has a specific relation to the containing object. 453 * 454 * @param value 455 * the link value to set 456 */ 457 public void setLinks(@NonNull List<Link> value) { 458 _links = value; 459 } 460 461 /** 462 * Add a new {@link Link} item to the underlying collection. 463 * @param item the item to add 464 * @return {@code true} 465 */ 466 public boolean addLink(Link item) { 467 Link value = ObjectUtils.requireNonNull(item,"item cannot be null"); 468 if (_links == null) { 469 _links = new LinkedList<>(); 470 } 471 return _links.add(value); 472 } 473 474 /** 475 * Remove the first matching {@link Link} item from the underlying collection. 476 * @param item the item to remove 477 * @return {@code true} if the item was removed or {@code false} otherwise 478 */ 479 public boolean removeLink(Link item) { 480 Link value = ObjectUtils.requireNonNull(item,"item cannot be null"); 481 return _links != null && _links.remove(value); 482 } 483 484 /** 485 * Get the "{@literal System Authorization Date}". 486 * 487 * <p> 488 * The date the system received its authorization. 489 * 490 * @return the date-authorized value, or {@code null} if not set 491 */ 492 @Nullable 493 public AmbiguousDate getDateAuthorized() { 494 return _dateAuthorized; 495 } 496 497 /** 498 * Set the "{@literal System Authorization Date}". 499 * 500 * <p> 501 * The date the system received its authorization. 502 * 503 * @param value 504 * the date-authorized value to set, or {@code null} to clear 505 */ 506 public void setDateAuthorized(@Nullable AmbiguousDate value) { 507 _dateAuthorized = value; 508 } 509 510 /** 511 * Get the "{@literal Security Sensitivity Level}". 512 * 513 * <p> 514 * The overall information system sensitivity categorization, such as defined by <a href="https://doi.org/10.6028/NIST.FIPS.199">FIPS-199</a>. 515 * 516 * @return the security-sensitivity-level value, or {@code null} if not set 517 */ 518 @Nullable 519 public String getSecuritySensitivityLevel() { 520 return _securitySensitivityLevel; 521 } 522 523 /** 524 * Set the "{@literal Security Sensitivity Level}". 525 * 526 * <p> 527 * The overall information system sensitivity categorization, such as defined by <a href="https://doi.org/10.6028/NIST.FIPS.199">FIPS-199</a>. 528 * 529 * @param value 530 * the security-sensitivity-level value to set, or {@code null} to clear 531 */ 532 public void setSecuritySensitivityLevel(@Nullable String value) { 533 _securitySensitivityLevel = value; 534 } 535 536 /** 537 * Get the "{@literal System Information}". 538 * 539 * <p> 540 * Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in <a href="https://doi.org/10.6028/NIST.SP.800-60v2r1">NIST SP 800-60</a>. 541 * 542 * @return the system-information value 543 */ 544 @NonNull 545 public SystemInformation getSystemInformation() { 546 return _systemInformation; 547 } 548 549 /** 550 * Set the "{@literal System Information}". 551 * 552 * <p> 553 * Contains details about all information types that are stored, processed, or transmitted by the system, such as privacy information, and those defined in <a href="https://doi.org/10.6028/NIST.SP.800-60v2r1">NIST SP 800-60</a>. 554 * 555 * @param value 556 * the system-information value to set 557 */ 558 public void setSystemInformation(@NonNull SystemInformation value) { 559 _systemInformation = value; 560 } 561 562 /** 563 * Get the "{@literal Security Impact Level}". 564 * 565 * <p> 566 * The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. 567 * 568 * @return the security-impact-level value, or {@code null} if not set 569 */ 570 @Nullable 571 public SecurityImpactLevel getSecurityImpactLevel() { 572 return _securityImpactLevel; 573 } 574 575 /** 576 * Set the "{@literal Security Impact Level}". 577 * 578 * <p> 579 * The overall level of expected impact resulting from unauthorized disclosure, modification, or loss of access to information. 580 * 581 * @param value 582 * the security-impact-level value to set, or {@code null} to clear 583 */ 584 public void setSecurityImpactLevel(@Nullable SecurityImpactLevel value) { 585 _securityImpactLevel = value; 586 } 587 588 /** 589 * Get the "{@literal Status}". 590 * 591 * <p> 592 * Describes the operational status of the system. 593 * 594 * @return the status value 595 */ 596 @NonNull 597 public Status getStatus() { 598 return _status; 599 } 600 601 /** 602 * Set the "{@literal Status}". 603 * 604 * <p> 605 * Describes the operational status of the system. 606 * 607 * @param value 608 * the status value to set 609 */ 610 public void setStatus(@NonNull Status value) { 611 _status = value; 612 } 613 614 /** 615 * Get the "{@literal Authorization Boundary}". 616 * 617 * <p> 618 * A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. 619 * 620 * @return the authorization-boundary value 621 */ 622 @NonNull 623 public AuthorizationBoundary getAuthorizationBoundary() { 624 return _authorizationBoundary; 625 } 626 627 /** 628 * Set the "{@literal Authorization Boundary}". 629 * 630 * <p> 631 * A description of this system's authorization boundary, optionally supplemented by diagrams that illustrate the authorization boundary. 632 * 633 * @param value 634 * the authorization-boundary value to set 635 */ 636 public void setAuthorizationBoundary(@NonNull AuthorizationBoundary value) { 637 _authorizationBoundary = value; 638 } 639 640 /** 641 * Get the "{@literal Network Architecture}". 642 * 643 * <p> 644 * A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. 645 * 646 * @return the network-architecture value, or {@code null} if not set 647 */ 648 @Nullable 649 public NetworkArchitecture getNetworkArchitecture() { 650 return _networkArchitecture; 651 } 652 653 /** 654 * Set the "{@literal Network Architecture}". 655 * 656 * <p> 657 * A description of the system's network architecture, optionally supplemented by diagrams that illustrate the network architecture. 658 * 659 * @param value 660 * the network-architecture value to set, or {@code null} to clear 661 */ 662 public void setNetworkArchitecture(@Nullable NetworkArchitecture value) { 663 _networkArchitecture = value; 664 } 665 666 /** 667 * Get the "{@literal Data Flow}". 668 * 669 * <p> 670 * A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. 671 * 672 * @return the data-flow value, or {@code null} if not set 673 */ 674 @Nullable 675 public DataFlow getDataFlow() { 676 return _dataFlow; 677 } 678 679 /** 680 * Set the "{@literal Data Flow}". 681 * 682 * <p> 683 * A description of the logical flow of information within the system and across its boundaries, optionally supplemented by diagrams that illustrate these flows. 684 * 685 * @param value 686 * the data-flow value to set, or {@code null} to clear 687 */ 688 public void setDataFlow(@Nullable DataFlow value) { 689 _dataFlow = value; 690 } 691 692 /** 693 * Get the "{@literal Responsible Party}". 694 * 695 * <p> 696 * A reference to a set of persons and/or organizations that have responsibility for performing the referenced role in the context of the containing object. 697 * 698 * @return the responsible-party value 699 */ 700 @NonNull 701 public List<ResponsibleParty> getResponsibleParties() { 702 if (_responsibleParties == null) { 703 _responsibleParties = new LinkedList<>(); 704 } 705 return ObjectUtils.notNull(_responsibleParties); 706 } 707 708 /** 709 * Set the "{@literal Responsible Party}". 710 * 711 * <p> 712 * A reference to a set of persons and/or organizations that have responsibility for performing the referenced role in the context of the containing object. 713 * 714 * @param value 715 * the responsible-party value to set 716 */ 717 public void setResponsibleParties(@NonNull List<ResponsibleParty> value) { 718 _responsibleParties = value; 719 } 720 721 /** 722 * Add a new {@link ResponsibleParty} item to the underlying collection. 723 * @param item the item to add 724 * @return {@code true} 725 */ 726 public boolean addResponsibleParty(ResponsibleParty item) { 727 ResponsibleParty value = ObjectUtils.requireNonNull(item,"item cannot be null"); 728 if (_responsibleParties == null) { 729 _responsibleParties = new LinkedList<>(); 730 } 731 return _responsibleParties.add(value); 732 } 733 734 /** 735 * Remove the first matching {@link ResponsibleParty} item from the underlying collection. 736 * @param item the item to remove 737 * @return {@code true} if the item was removed or {@code false} otherwise 738 */ 739 public boolean removeResponsibleParty(ResponsibleParty item) { 740 ResponsibleParty value = ObjectUtils.requireNonNull(item,"item cannot be null"); 741 return _responsibleParties != null && _responsibleParties.remove(value); 742 } 743 744 /** 745 * Get the "{@literal Remarks}". 746 * 747 * <p> 748 * Additional commentary about the containing object. 749 * 750 * @return the remarks value, or {@code null} if not set 751 */ 752 @Nullable 753 public MarkupMultiline getRemarks() { 754 return _remarks; 755 } 756 757 /** 758 * Set the "{@literal Remarks}". 759 * 760 * <p> 761 * Additional commentary about the containing object. 762 * 763 * @param value 764 * the remarks value to set, or {@code null} to clear 765 */ 766 public void setRemarks(@Nullable MarkupMultiline value) { 767 _remarks = value; 768 } 769 770 @Override 771 public String toString() { 772 return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString()); 773 } 774}