1 package gov.nist.secauto.oscal.lib.model;
2
3 import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValue;
4 import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValues;
5 import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
6 import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
7 import gov.nist.secauto.metaschema.binding.model.annotations.BoundField;
8 import gov.nist.secauto.metaschema.binding.model.annotations.BoundFieldValue;
9 import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
10 import gov.nist.secauto.metaschema.binding.model.annotations.GroupAs;
11 import gov.nist.secauto.metaschema.binding.model.annotations.HasCardinality;
12 import gov.nist.secauto.metaschema.binding.model.annotations.IndexHasKey;
13 import gov.nist.secauto.metaschema.binding.model.annotations.IsUnique;
14 import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
15 import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
16 import gov.nist.secauto.metaschema.binding.model.annotations.ValueConstraints;
17 import gov.nist.secauto.metaschema.model.common.JsonGroupAsBehavior;
18 import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
19 import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
20 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
21 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultilineAdapter;
22 import gov.nist.secauto.metaschema.model.common.util.ObjectUtils;
23 import java.lang.Override;
24 import java.lang.String;
25 import java.util.LinkedList;
26 import java.util.List;
27 import java.util.UUID;
28 import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
29 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
30
31
32
33
34 @MetaschemaAssembly(
35 formalName = "Component Control Implementation",
36 description = "Defines how the referenced component implements a set of controls.",
37 name = "by-component",
38 metaschema = OscalSspMetaschema.class,
39 remarks = "Use of `set-parameter` in this context, sets the parameter for the control referenced in the containing `implemented-requirement` applied to the referenced component. If the `by-component` is used as a child of a `statement`, then the parameter value also applies only in the context of the referenced statement. If the same parameter is also set in the `control-implementation` or a specific `implemented-requirement`, then this `by-component/set-parameter` value will override the other value(s) in the context of the referenced component, control, and statement (if parent)."
40 )
41 @ValueConstraints(
42 allowedValues = {
43 @AllowedValues(level = IConstraint.Level.ERROR, target = "link/@rel", allowOthers = true, values = @AllowedValue(value = "imported-from", description = "The hyperlink identifies a URI pointing to the `component` in a `component-definition` that originally described the `component` this component was based on.")),
44 @AllowedValues(level = IConstraint.Level.ERROR, target = ".//responsible-role/@role-id", allowOthers = true, values = {@AllowedValue(value = "asset-owner", description = "Accountable for ensuring the asset is managed in accordance with organizational policies and procedures."), @AllowedValue(value = "asset-administrator", description = "Responsible for administering a set of assets."), @AllowedValue(value = "security-operations", description = "Members of the security operations center (SOC)."), @AllowedValue(value = "network-operations", description = "Members of the network operations center (NOC)."), @AllowedValue(value = "incident-response", description = "Responsible for responding to an event that could lead to loss of, or disruption to, an organization's operations, services or functions."), @AllowedValue(value = "help-desk", description = "Responsible for providing information and support to users."), @AllowedValue(value = "configuration-management", description = "Responsible for the configuration management processes governing changes to the asset."), @AllowedValue(value = "maintainer", description = "Responsible for the creation and maintenance of a component."), @AllowedValue(value = "provider", description = "Organization responsible for providing the component, if this is different from the \"maintainer\" (e.g., a reseller).")}),
45 @AllowedValues(level = IConstraint.Level.ERROR, target = "link/@rel", allowOthers = true, values = @AllowedValue(value = "provided-by", description = "A reference to the UUID of a control or statement `by-component` object that is used as evidence of implementation."))
46 },
47 indexHasKey = @IndexHasKey(level = IConstraint.Level.ERROR, target = "link[@rel='provided-by']", indexName = "by-component-uuid", keyFields = @KeyField(target = "@href", pattern = "#(.*)"))
48 )
49 @AssemblyConstraints(
50 isUnique = @IsUnique(id = "unique-ssp-by-component-set-parameter", level = IConstraint.Level.ERROR, target = "set-parameter", keyFields = @KeyField(target = "@param-id"), remarks = "Since multiple `set-parameter` entries can be provided, each parameter must be set only once.")
51 )
52 public class ByComponent {
53 @BoundFlag(
54 formalName = "Component Universally Unique Identifier Reference",
55 description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to the `component` that is implemeting a given control.",
56 useName = "component-uuid",
57 required = true,
58 typeAdapter = UuidAdapter.class
59 )
60 private UUID _componentUuid;
61
62 @BoundFlag(
63 formalName = "By-Component Universally Unique Identifier",
64 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 by-component entry elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `by-component` entry 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.",
65 useName = "uuid",
66 required = true,
67 typeAdapter = UuidAdapter.class
68 )
69 private UUID _uuid;
70
71
72
73
74 @BoundField(
75 formalName = "Control Implementation Description",
76 description = "An implementation statement that describes how a control or a control statement is implemented within the referenced system component.",
77 useName = "description",
78 minOccurs = 1
79 )
80 @BoundFieldValue(
81 typeAdapter = MarkupMultilineAdapter.class
82 )
83 private MarkupMultiline _description;
84
85 @BoundAssembly(
86 formalName = "Property",
87 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
88 useName = "prop",
89 maxOccurs = -1
90 )
91 @GroupAs(
92 name = "props",
93 inJson = JsonGroupAsBehavior.LIST
94 )
95 private List<Property> _props;
96
97 @BoundAssembly(
98 formalName = "Link",
99 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
100 useName = "link",
101 maxOccurs = -1
102 )
103 @GroupAs(
104 name = "links",
105 inJson = JsonGroupAsBehavior.LIST
106 )
107 private List<Link> _links;
108
109 @BoundAssembly(
110 formalName = "Set Parameter Value",
111 description = "Identifies the parameter that will be set by the enclosed value.",
112 useName = "set-parameter",
113 maxOccurs = -1
114 )
115 @GroupAs(
116 name = "set-parameters",
117 inJson = JsonGroupAsBehavior.LIST
118 )
119 private List<SetParameter> _setParameters;
120
121 @BoundAssembly(
122 formalName = "Implementation Status",
123 description = "Indicates the degree to which the a given control is implemented.",
124 useName = "implementation-status",
125 remarks = "The `implementation-status` is used to qualify the `status` value to indicate the degree to which the control is implemented."
126 )
127 private ImplementationStatus _implementationStatus;
128
129
130
131
132 @BoundAssembly(
133 formalName = "Export",
134 description = "Identifies content intended for external consumption, such as with leveraged organizations.",
135 useName = "export"
136 )
137 private Export _export;
138
139
140
141
142 @BoundAssembly(
143 formalName = "Inherited Control Implementation",
144 description = "Describes a control implementation inherited by a leveraging system.",
145 useName = "inherited",
146 maxOccurs = -1
147 )
148 @GroupAs(
149 name = "inherited",
150 inJson = JsonGroupAsBehavior.LIST
151 )
152 private List<Inherited> _inherited;
153
154
155
156
157 @BoundAssembly(
158 formalName = "Satisfied Control Implementation Responsibility",
159 description = "Describes how this system satisfies a responsibility imposed by a leveraged system.",
160 useName = "satisfied",
161 maxOccurs = -1
162 )
163 @GroupAs(
164 name = "satisfied",
165 inJson = JsonGroupAsBehavior.LIST
166 )
167 private List<Satisfied> _satisfied;
168
169 @BoundAssembly(
170 formalName = "Responsible Role",
171 description = "A reference to a role with responsibility for performing a function relative to the containing object, optionally associated with a set of persons and/or organizations that perform that role.",
172 useName = "responsible-role",
173 maxOccurs = -1
174 )
175 @GroupAs(
176 name = "responsible-roles",
177 inJson = JsonGroupAsBehavior.LIST
178 )
179 private List<ResponsibleRole> _responsibleRoles;
180
181 @BoundField(
182 formalName = "Remarks",
183 description = "Additional commentary about the containing object.",
184 useName = "remarks"
185 )
186 @BoundFieldValue(
187 typeAdapter = MarkupMultilineAdapter.class
188 )
189 private MarkupMultiline _remarks;
190
191 public ByComponent() {
192 }
193
194 public UUID getComponentUuid() {
195 return _componentUuid;
196 }
197
198 public void setComponentUuid(UUID value) {
199 _componentUuid = value;
200 }
201
202 public UUID getUuid() {
203 return _uuid;
204 }
205
206 public void setUuid(UUID value) {
207 _uuid = value;
208 }
209
210 public MarkupMultiline getDescription() {
211 return _description;
212 }
213
214 public void setDescription(MarkupMultiline value) {
215 _description = value;
216 }
217
218 public List<Property> getProps() {
219 return _props;
220 }
221
222 public void setProps(List<Property> value) {
223 _props = value;
224 }
225
226
227
228
229
230
231 public boolean addProp(Property item) {
232 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
233 if (_props == null) {
234 _props = new LinkedList<>();
235 }
236 return _props.add(value);
237 }
238
239
240
241
242
243
244 public boolean removeProp(Property item) {
245 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
246 return _props == null ? false : _props.remove(value);
247 }
248
249 public List<Link> getLinks() {
250 return _links;
251 }
252
253 public void setLinks(List<Link> value) {
254 _links = value;
255 }
256
257
258
259
260
261
262 public boolean addLink(Link item) {
263 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
264 if (_links == null) {
265 _links = new LinkedList<>();
266 }
267 return _links.add(value);
268 }
269
270
271
272
273
274
275 public boolean removeLink(Link item) {
276 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
277 return _links == null ? false : _links.remove(value);
278 }
279
280 public List<SetParameter> getSetParameters() {
281 return _setParameters;
282 }
283
284 public void setSetParameters(List<SetParameter> value) {
285 _setParameters = value;
286 }
287
288
289
290
291
292
293 public boolean addSetParameter(SetParameter item) {
294 SetParameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
295 if (_setParameters == null) {
296 _setParameters = new LinkedList<>();
297 }
298 return _setParameters.add(value);
299 }
300
301
302
303
304
305
306 public boolean removeSetParameter(SetParameter item) {
307 SetParameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
308 return _setParameters == null ? false : _setParameters.remove(value);
309 }
310
311 public ImplementationStatus getImplementationStatus() {
312 return _implementationStatus;
313 }
314
315 public void setImplementationStatus(ImplementationStatus value) {
316 _implementationStatus = value;
317 }
318
319 public Export getExport() {
320 return _export;
321 }
322
323 public void setExport(Export value) {
324 _export = value;
325 }
326
327 public List<Inherited> getInherited() {
328 return _inherited;
329 }
330
331 public void setInherited(List<Inherited> value) {
332 _inherited = value;
333 }
334
335
336
337
338
339
340 public boolean addInherited(Inherited item) {
341 Inherited value = ObjectUtils.requireNonNull(item,"item cannot be null");
342 if (_inherited == null) {
343 _inherited = new LinkedList<>();
344 }
345 return _inherited.add(value);
346 }
347
348
349
350
351
352
353 public boolean removeInherited(Inherited item) {
354 Inherited value = ObjectUtils.requireNonNull(item,"item cannot be null");
355 return _inherited == null ? false : _inherited.remove(value);
356 }
357
358 public List<Satisfied> getSatisfied() {
359 return _satisfied;
360 }
361
362 public void setSatisfied(List<Satisfied> value) {
363 _satisfied = value;
364 }
365
366
367
368
369
370
371 public boolean addSatisfied(Satisfied item) {
372 Satisfied value = ObjectUtils.requireNonNull(item,"item cannot be null");
373 if (_satisfied == null) {
374 _satisfied = new LinkedList<>();
375 }
376 return _satisfied.add(value);
377 }
378
379
380
381
382
383
384 public boolean removeSatisfied(Satisfied item) {
385 Satisfied value = ObjectUtils.requireNonNull(item,"item cannot be null");
386 return _satisfied == null ? false : _satisfied.remove(value);
387 }
388
389 public List<ResponsibleRole> getResponsibleRoles() {
390 return _responsibleRoles;
391 }
392
393 public void setResponsibleRoles(List<ResponsibleRole> value) {
394 _responsibleRoles = value;
395 }
396
397
398
399
400
401
402 public boolean addResponsibleRole(ResponsibleRole item) {
403 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
404 if (_responsibleRoles == null) {
405 _responsibleRoles = new LinkedList<>();
406 }
407 return _responsibleRoles.add(value);
408 }
409
410
411
412
413
414
415 public boolean removeResponsibleRole(ResponsibleRole item) {
416 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
417 return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
418 }
419
420 public MarkupMultiline getRemarks() {
421 return _remarks;
422 }
423
424 public void setRemarks(MarkupMultiline value) {
425 _remarks = value;
426 }
427
428 @Override
429 public String toString() {
430 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
431 }
432
433
434
435
436 @MetaschemaAssembly(
437 formalName = "Inherited Control Implementation",
438 description = "Describes a control implementation inherited by a leveraging system.",
439 name = "inherited",
440 metaschema = OscalSspMetaschema.class
441 )
442 @AssemblyConstraints(
443 isUnique = @IsUnique(id = "unique-inherited-responsible-role", level = IConstraint.Level.ERROR, target = "responsible-role", keyFields = @KeyField(target = "@role-id"), remarks = "Since `responsible-role` associates multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")
444 )
445 public static class Inherited {
446 @BoundFlag(
447 formalName = "Inherited Universally Unique Identifier",
448 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 inherited entry elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `inherited control implementation` 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.",
449 useName = "uuid",
450 required = true,
451 typeAdapter = UuidAdapter.class
452 )
453 private UUID _uuid;
454
455 @BoundFlag(
456 formalName = "Provided UUID",
457 description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to an inherited control implementation that a leveraging system is inheriting from a leveraged system.",
458 useName = "provided-uuid",
459 typeAdapter = UuidAdapter.class
460 )
461 private UUID _providedUuid;
462
463
464
465
466 @BoundField(
467 formalName = "Inherited Control Implementation Description",
468 description = "An implementation statement that describes the aspects of a control or control statement implementation that a leveraging system is inheriting from a leveraged system.",
469 useName = "description",
470 minOccurs = 1
471 )
472 @BoundFieldValue(
473 typeAdapter = MarkupMultilineAdapter.class
474 )
475 private MarkupMultiline _description;
476
477 @BoundAssembly(
478 formalName = "Property",
479 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
480 useName = "prop",
481 maxOccurs = -1
482 )
483 @GroupAs(
484 name = "props",
485 inJson = JsonGroupAsBehavior.LIST
486 )
487 private List<Property> _props;
488
489 @BoundAssembly(
490 formalName = "Link",
491 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
492 useName = "link",
493 maxOccurs = -1
494 )
495 @GroupAs(
496 name = "links",
497 inJson = JsonGroupAsBehavior.LIST
498 )
499 private List<Link> _links;
500
501 @BoundAssembly(
502 formalName = "Responsible Role",
503 description = "A reference to a role with responsibility for performing a function relative to the containing object, optionally associated with a set of persons and/or organizations that perform that role.",
504 useName = "responsible-role",
505 maxOccurs = -1
506 )
507 @GroupAs(
508 name = "responsible-roles",
509 inJson = JsonGroupAsBehavior.LIST
510 )
511 private List<ResponsibleRole> _responsibleRoles;
512
513 public Inherited() {
514 }
515
516 public UUID getUuid() {
517 return _uuid;
518 }
519
520 public void setUuid(UUID value) {
521 _uuid = value;
522 }
523
524 public UUID getProvidedUuid() {
525 return _providedUuid;
526 }
527
528 public void setProvidedUuid(UUID value) {
529 _providedUuid = value;
530 }
531
532 public MarkupMultiline getDescription() {
533 return _description;
534 }
535
536 public void setDescription(MarkupMultiline value) {
537 _description = value;
538 }
539
540 public List<Property> getProps() {
541 return _props;
542 }
543
544 public void setProps(List<Property> value) {
545 _props = value;
546 }
547
548
549
550
551
552
553 public boolean addProp(Property item) {
554 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
555 if (_props == null) {
556 _props = new LinkedList<>();
557 }
558 return _props.add(value);
559 }
560
561
562
563
564
565
566 public boolean removeProp(Property item) {
567 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
568 return _props == null ? false : _props.remove(value);
569 }
570
571 public List<Link> getLinks() {
572 return _links;
573 }
574
575 public void setLinks(List<Link> value) {
576 _links = value;
577 }
578
579
580
581
582
583
584 public boolean addLink(Link item) {
585 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
586 if (_links == null) {
587 _links = new LinkedList<>();
588 }
589 return _links.add(value);
590 }
591
592
593
594
595
596
597 public boolean removeLink(Link item) {
598 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
599 return _links == null ? false : _links.remove(value);
600 }
601
602 public List<ResponsibleRole> getResponsibleRoles() {
603 return _responsibleRoles;
604 }
605
606 public void setResponsibleRoles(List<ResponsibleRole> value) {
607 _responsibleRoles = value;
608 }
609
610
611
612
613
614
615 public boolean addResponsibleRole(ResponsibleRole item) {
616 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
617 if (_responsibleRoles == null) {
618 _responsibleRoles = new LinkedList<>();
619 }
620 return _responsibleRoles.add(value);
621 }
622
623
624
625
626
627
628 public boolean removeResponsibleRole(ResponsibleRole item) {
629 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
630 return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
631 }
632
633 @Override
634 public String toString() {
635 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
636 }
637 }
638
639
640
641
642 @MetaschemaAssembly(
643 formalName = "Satisfied Control Implementation Responsibility",
644 description = "Describes how this system satisfies a responsibility imposed by a leveraged system.",
645 name = "satisfied",
646 metaschema = OscalSspMetaschema.class
647 )
648 @AssemblyConstraints(
649 isUnique = @IsUnique(id = "unique-satisfied-responsible-role", level = IConstraint.Level.ERROR, target = "responsible-role", keyFields = @KeyField(target = "@role-id"), remarks = "Since `responsible-role` associates multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")
650 )
651 public static class Satisfied {
652 @BoundFlag(
653 formalName = "Satisfied Universally Unique Identifier",
654 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 satisfied control implementation entry elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `control implementation` 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.",
655 useName = "uuid",
656 required = true,
657 typeAdapter = UuidAdapter.class
658 )
659 private UUID _uuid;
660
661 @BoundFlag(
662 formalName = "Responsibility UUID",
663 description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to a control implementation that satisfies a responsibility imposed by a leveraged system.",
664 useName = "responsibility-uuid",
665 typeAdapter = UuidAdapter.class
666 )
667 private UUID _responsibilityUuid;
668
669
670
671
672 @BoundField(
673 formalName = "Satisfied Control Implementation Responsibility Description",
674 description = "An implementation statement that describes the aspects of a control or control statement implementation that a leveraging system is implementing based on a requirement from a leveraged system.",
675 useName = "description",
676 minOccurs = 1
677 )
678 @BoundFieldValue(
679 typeAdapter = MarkupMultilineAdapter.class
680 )
681 private MarkupMultiline _description;
682
683 @BoundAssembly(
684 formalName = "Property",
685 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
686 useName = "prop",
687 maxOccurs = -1
688 )
689 @GroupAs(
690 name = "props",
691 inJson = JsonGroupAsBehavior.LIST
692 )
693 private List<Property> _props;
694
695 @BoundAssembly(
696 formalName = "Link",
697 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
698 useName = "link",
699 maxOccurs = -1
700 )
701 @GroupAs(
702 name = "links",
703 inJson = JsonGroupAsBehavior.LIST
704 )
705 private List<Link> _links;
706
707 @BoundAssembly(
708 formalName = "Responsible Role",
709 description = "A reference to a role with responsibility for performing a function relative to the containing object, optionally associated with a set of persons and/or organizations that perform that role.",
710 useName = "responsible-role",
711 maxOccurs = -1
712 )
713 @GroupAs(
714 name = "responsible-roles",
715 inJson = JsonGroupAsBehavior.LIST
716 )
717 private List<ResponsibleRole> _responsibleRoles;
718
719 @BoundField(
720 formalName = "Remarks",
721 description = "Additional commentary about the containing object.",
722 useName = "remarks"
723 )
724 @BoundFieldValue(
725 typeAdapter = MarkupMultilineAdapter.class
726 )
727 private MarkupMultiline _remarks;
728
729 public Satisfied() {
730 }
731
732 public UUID getUuid() {
733 return _uuid;
734 }
735
736 public void setUuid(UUID value) {
737 _uuid = value;
738 }
739
740 public UUID getResponsibilityUuid() {
741 return _responsibilityUuid;
742 }
743
744 public void setResponsibilityUuid(UUID value) {
745 _responsibilityUuid = value;
746 }
747
748 public MarkupMultiline getDescription() {
749 return _description;
750 }
751
752 public void setDescription(MarkupMultiline value) {
753 _description = value;
754 }
755
756 public List<Property> getProps() {
757 return _props;
758 }
759
760 public void setProps(List<Property> value) {
761 _props = value;
762 }
763
764
765
766
767
768
769 public boolean addProp(Property item) {
770 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
771 if (_props == null) {
772 _props = new LinkedList<>();
773 }
774 return _props.add(value);
775 }
776
777
778
779
780
781
782 public boolean removeProp(Property item) {
783 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
784 return _props == null ? false : _props.remove(value);
785 }
786
787 public List<Link> getLinks() {
788 return _links;
789 }
790
791 public void setLinks(List<Link> value) {
792 _links = value;
793 }
794
795
796
797
798
799
800 public boolean addLink(Link item) {
801 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
802 if (_links == null) {
803 _links = new LinkedList<>();
804 }
805 return _links.add(value);
806 }
807
808
809
810
811
812
813 public boolean removeLink(Link item) {
814 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
815 return _links == null ? false : _links.remove(value);
816 }
817
818 public List<ResponsibleRole> getResponsibleRoles() {
819 return _responsibleRoles;
820 }
821
822 public void setResponsibleRoles(List<ResponsibleRole> value) {
823 _responsibleRoles = value;
824 }
825
826
827
828
829
830
831 public boolean addResponsibleRole(ResponsibleRole item) {
832 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
833 if (_responsibleRoles == null) {
834 _responsibleRoles = new LinkedList<>();
835 }
836 return _responsibleRoles.add(value);
837 }
838
839
840
841
842
843
844 public boolean removeResponsibleRole(ResponsibleRole item) {
845 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
846 return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
847 }
848
849 public MarkupMultiline getRemarks() {
850 return _remarks;
851 }
852
853 public void setRemarks(MarkupMultiline value) {
854 _remarks = value;
855 }
856
857 @Override
858 public String toString() {
859 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
860 }
861 }
862
863
864
865
866 @MetaschemaAssembly(
867 formalName = "Export",
868 description = "Identifies content intended for external consumption, such as with leveraged organizations.",
869 name = "export",
870 metaschema = OscalSspMetaschema.class
871 )
872 @ValueConstraints(
873 indexHasKey = @IndexHasKey(level = IConstraint.Level.ERROR, target = "responsibility", indexName = "by-component-export-provided-uuid", keyFields = @KeyField(target = "@provided-uuid"))
874 )
875 @AssemblyConstraints(
876 hasCardinality = @HasCardinality(level = IConstraint.Level.ERROR, target = "provided|responsibility", minOccurs = 1)
877 )
878 public static class Export {
879
880
881
882 @BoundField(
883 formalName = "Control Implementation Export Description",
884 description = "An implementation statement that describes the aspects of the control or control statement implementation that can be available to another system leveraging this system.",
885 useName = "description"
886 )
887 @BoundFieldValue(
888 typeAdapter = MarkupMultilineAdapter.class
889 )
890 private MarkupMultiline _description;
891
892 @BoundAssembly(
893 formalName = "Property",
894 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
895 useName = "prop",
896 maxOccurs = -1
897 )
898 @GroupAs(
899 name = "props",
900 inJson = JsonGroupAsBehavior.LIST
901 )
902 private List<Property> _props;
903
904 @BoundAssembly(
905 formalName = "Link",
906 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
907 useName = "link",
908 maxOccurs = -1
909 )
910 @GroupAs(
911 name = "links",
912 inJson = JsonGroupAsBehavior.LIST
913 )
914 private List<Link> _links;
915
916
917
918
919 @BoundAssembly(
920 formalName = "Provided Control Implementation",
921 description = "Describes a capability which may be inherited by a leveraging system.",
922 useName = "provided",
923 maxOccurs = -1
924 )
925 @GroupAs(
926 name = "provided",
927 inJson = JsonGroupAsBehavior.LIST
928 )
929 private List<Provided> _provided;
930
931
932
933
934 @BoundAssembly(
935 formalName = "Control Implementation Responsibility",
936 description = "Describes a control implementation responsibility imposed on a leveraging system.",
937 useName = "responsibility",
938 maxOccurs = -1
939 )
940 @GroupAs(
941 name = "responsibilities",
942 inJson = JsonGroupAsBehavior.LIST
943 )
944 private List<Responsibility> _responsibilities;
945
946 @BoundField(
947 formalName = "Remarks",
948 description = "Additional commentary about the containing object.",
949 useName = "remarks"
950 )
951 @BoundFieldValue(
952 typeAdapter = MarkupMultilineAdapter.class
953 )
954 private MarkupMultiline _remarks;
955
956 public Export() {
957 }
958
959 public MarkupMultiline getDescription() {
960 return _description;
961 }
962
963 public void setDescription(MarkupMultiline value) {
964 _description = value;
965 }
966
967 public List<Property> getProps() {
968 return _props;
969 }
970
971 public void setProps(List<Property> value) {
972 _props = value;
973 }
974
975
976
977
978
979
980 public boolean addProp(Property item) {
981 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
982 if (_props == null) {
983 _props = new LinkedList<>();
984 }
985 return _props.add(value);
986 }
987
988
989
990
991
992
993 public boolean removeProp(Property item) {
994 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
995 return _props == null ? false : _props.remove(value);
996 }
997
998 public List<Link> getLinks() {
999 return _links;
1000 }
1001
1002 public void setLinks(List<Link> value) {
1003 _links = value;
1004 }
1005
1006
1007
1008
1009
1010
1011 public boolean addLink(Link item) {
1012 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1013 if (_links == null) {
1014 _links = new LinkedList<>();
1015 }
1016 return _links.add(value);
1017 }
1018
1019
1020
1021
1022
1023
1024 public boolean removeLink(Link item) {
1025 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1026 return _links == null ? false : _links.remove(value);
1027 }
1028
1029 public List<Provided> getProvided() {
1030 return _provided;
1031 }
1032
1033 public void setProvided(List<Provided> value) {
1034 _provided = value;
1035 }
1036
1037
1038
1039
1040
1041
1042 public boolean addProvided(Provided item) {
1043 Provided value = ObjectUtils.requireNonNull(item,"item cannot be null");
1044 if (_provided == null) {
1045 _provided = new LinkedList<>();
1046 }
1047 return _provided.add(value);
1048 }
1049
1050
1051
1052
1053
1054
1055 public boolean removeProvided(Provided item) {
1056 Provided value = ObjectUtils.requireNonNull(item,"item cannot be null");
1057 return _provided == null ? false : _provided.remove(value);
1058 }
1059
1060 public List<Responsibility> getResponsibilities() {
1061 return _responsibilities;
1062 }
1063
1064 public void setResponsibilities(List<Responsibility> value) {
1065 _responsibilities = value;
1066 }
1067
1068
1069
1070
1071
1072
1073 public boolean addResponsibility(Responsibility item) {
1074 Responsibility value = ObjectUtils.requireNonNull(item,"item cannot be null");
1075 if (_responsibilities == null) {
1076 _responsibilities = new LinkedList<>();
1077 }
1078 return _responsibilities.add(value);
1079 }
1080
1081
1082
1083
1084
1085
1086 public boolean removeResponsibility(Responsibility item) {
1087 Responsibility value = ObjectUtils.requireNonNull(item,"item cannot be null");
1088 return _responsibilities == null ? false : _responsibilities.remove(value);
1089 }
1090
1091 public MarkupMultiline getRemarks() {
1092 return _remarks;
1093 }
1094
1095 public void setRemarks(MarkupMultiline value) {
1096 _remarks = value;
1097 }
1098
1099 @Override
1100 public String toString() {
1101 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
1102 }
1103
1104
1105
1106
1107 @MetaschemaAssembly(
1108 formalName = "Provided Control Implementation",
1109 description = "Describes a capability which may be inherited by a leveraging system.",
1110 name = "provided",
1111 metaschema = OscalSspMetaschema.class
1112 )
1113 @AssemblyConstraints(
1114 isUnique = @IsUnique(id = "unique-provided-responsible-role", level = IConstraint.Level.ERROR, target = "responsible-role", keyFields = @KeyField(target = "@role-id"), remarks = "Since `responsible-role` associates multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")
1115 )
1116 public static class Provided {
1117 @BoundFlag(
1118 formalName = "Provided Universally Unique Identifier",
1119 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 provided entry elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `provided` entry 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.",
1120 useName = "uuid",
1121 required = true,
1122 typeAdapter = UuidAdapter.class
1123 )
1124 private UUID _uuid;
1125
1126
1127
1128
1129 @BoundField(
1130 formalName = "Provided Control Implementation Description",
1131 description = "An implementation statement that describes the aspects of the control or control statement implementation that can be provided to another system leveraging this system.",
1132 useName = "description",
1133 minOccurs = 1
1134 )
1135 @BoundFieldValue(
1136 typeAdapter = MarkupMultilineAdapter.class
1137 )
1138 private MarkupMultiline _description;
1139
1140 @BoundAssembly(
1141 formalName = "Property",
1142 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
1143 useName = "prop",
1144 maxOccurs = -1
1145 )
1146 @GroupAs(
1147 name = "props",
1148 inJson = JsonGroupAsBehavior.LIST
1149 )
1150 private List<Property> _props;
1151
1152 @BoundAssembly(
1153 formalName = "Link",
1154 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
1155 useName = "link",
1156 maxOccurs = -1
1157 )
1158 @GroupAs(
1159 name = "links",
1160 inJson = JsonGroupAsBehavior.LIST
1161 )
1162 private List<Link> _links;
1163
1164 @BoundAssembly(
1165 formalName = "Responsible Role",
1166 description = "A reference to a role with responsibility for performing a function relative to the containing object, optionally associated with a set of persons and/or organizations that perform that role.",
1167 useName = "responsible-role",
1168 maxOccurs = -1
1169 )
1170 @GroupAs(
1171 name = "responsible-roles",
1172 inJson = JsonGroupAsBehavior.LIST
1173 )
1174 private List<ResponsibleRole> _responsibleRoles;
1175
1176 @BoundField(
1177 formalName = "Remarks",
1178 description = "Additional commentary about the containing object.",
1179 useName = "remarks"
1180 )
1181 @BoundFieldValue(
1182 typeAdapter = MarkupMultilineAdapter.class
1183 )
1184 private MarkupMultiline _remarks;
1185
1186 public Provided() {
1187 }
1188
1189 public UUID getUuid() {
1190 return _uuid;
1191 }
1192
1193 public void setUuid(UUID value) {
1194 _uuid = value;
1195 }
1196
1197 public MarkupMultiline getDescription() {
1198 return _description;
1199 }
1200
1201 public void setDescription(MarkupMultiline value) {
1202 _description = value;
1203 }
1204
1205 public List<Property> getProps() {
1206 return _props;
1207 }
1208
1209 public void setProps(List<Property> value) {
1210 _props = value;
1211 }
1212
1213
1214
1215
1216
1217
1218 public boolean addProp(Property item) {
1219 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1220 if (_props == null) {
1221 _props = new LinkedList<>();
1222 }
1223 return _props.add(value);
1224 }
1225
1226
1227
1228
1229
1230
1231 public boolean removeProp(Property item) {
1232 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1233 return _props == null ? false : _props.remove(value);
1234 }
1235
1236 public List<Link> getLinks() {
1237 return _links;
1238 }
1239
1240 public void setLinks(List<Link> value) {
1241 _links = value;
1242 }
1243
1244
1245
1246
1247
1248
1249 public boolean addLink(Link item) {
1250 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1251 if (_links == null) {
1252 _links = new LinkedList<>();
1253 }
1254 return _links.add(value);
1255 }
1256
1257
1258
1259
1260
1261
1262 public boolean removeLink(Link item) {
1263 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1264 return _links == null ? false : _links.remove(value);
1265 }
1266
1267 public List<ResponsibleRole> getResponsibleRoles() {
1268 return _responsibleRoles;
1269 }
1270
1271 public void setResponsibleRoles(List<ResponsibleRole> value) {
1272 _responsibleRoles = value;
1273 }
1274
1275
1276
1277
1278
1279
1280 public boolean addResponsibleRole(ResponsibleRole item) {
1281 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1282 if (_responsibleRoles == null) {
1283 _responsibleRoles = new LinkedList<>();
1284 }
1285 return _responsibleRoles.add(value);
1286 }
1287
1288
1289
1290
1291
1292
1293 public boolean removeResponsibleRole(ResponsibleRole item) {
1294 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1295 return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
1296 }
1297
1298 public MarkupMultiline getRemarks() {
1299 return _remarks;
1300 }
1301
1302 public void setRemarks(MarkupMultiline value) {
1303 _remarks = value;
1304 }
1305
1306 @Override
1307 public String toString() {
1308 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
1309 }
1310 }
1311
1312
1313
1314
1315 @MetaschemaAssembly(
1316 formalName = "Control Implementation Responsibility",
1317 description = "Describes a control implementation responsibility imposed on a leveraging system.",
1318 name = "responsibility",
1319 metaschema = OscalSspMetaschema.class
1320 )
1321 @AssemblyConstraints(
1322 isUnique = @IsUnique(id = "unique-responsibility-responsible-role", level = IConstraint.Level.ERROR, target = "responsible-role", keyFields = @KeyField(target = "@role-id"), remarks = "Since `responsible-role` associates multiple `party-uuid` entries with a single `role-id`, each role-id must be referenced only once.")
1323 )
1324 public static class Responsibility {
1325 @BoundFlag(
1326 formalName = "Responsibility Universally Unique Identifier",
1327 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 responsibility elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `responsibility` 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.",
1328 useName = "uuid",
1329 required = true,
1330 typeAdapter = UuidAdapter.class
1331 )
1332 private UUID _uuid;
1333
1334 @BoundFlag(
1335 formalName = "Provided UUID",
1336 description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to an inherited control implementation that a leveraging system is inheriting from a leveraged system.",
1337 useName = "provided-uuid",
1338 typeAdapter = UuidAdapter.class
1339 )
1340 private UUID _providedUuid;
1341
1342
1343
1344
1345 @BoundField(
1346 formalName = "Control Implementation Responsibility Description",
1347 description = "An implementation statement that describes the aspects of the control or control statement implementation that a leveraging system must implement to satisfy the control provided by a leveraged system.",
1348 useName = "description",
1349 minOccurs = 1
1350 )
1351 @BoundFieldValue(
1352 typeAdapter = MarkupMultilineAdapter.class
1353 )
1354 private MarkupMultiline _description;
1355
1356 @BoundAssembly(
1357 formalName = "Property",
1358 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
1359 useName = "prop",
1360 maxOccurs = -1
1361 )
1362 @GroupAs(
1363 name = "props",
1364 inJson = JsonGroupAsBehavior.LIST
1365 )
1366 private List<Property> _props;
1367
1368 @BoundAssembly(
1369 formalName = "Link",
1370 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
1371 useName = "link",
1372 maxOccurs = -1
1373 )
1374 @GroupAs(
1375 name = "links",
1376 inJson = JsonGroupAsBehavior.LIST
1377 )
1378 private List<Link> _links;
1379
1380 @BoundAssembly(
1381 formalName = "Responsible Role",
1382 description = "A reference to a role with responsibility for performing a function relative to the containing object, optionally associated with a set of persons and/or organizations that perform that role.",
1383 useName = "responsible-role",
1384 maxOccurs = -1,
1385 remarks = "A role defined at the by-component level takes precedence over the same role defined on the parent implemented-requirement or on the referenced component."
1386 )
1387 @GroupAs(
1388 name = "responsible-roles",
1389 inJson = JsonGroupAsBehavior.LIST
1390 )
1391 private List<ResponsibleRole> _responsibleRoles;
1392
1393 @BoundField(
1394 formalName = "Remarks",
1395 description = "Additional commentary about the containing object.",
1396 useName = "remarks"
1397 )
1398 @BoundFieldValue(
1399 typeAdapter = MarkupMultilineAdapter.class
1400 )
1401 private MarkupMultiline _remarks;
1402
1403 public Responsibility() {
1404 }
1405
1406 public UUID getUuid() {
1407 return _uuid;
1408 }
1409
1410 public void setUuid(UUID value) {
1411 _uuid = value;
1412 }
1413
1414 public UUID getProvidedUuid() {
1415 return _providedUuid;
1416 }
1417
1418 public void setProvidedUuid(UUID value) {
1419 _providedUuid = value;
1420 }
1421
1422 public MarkupMultiline getDescription() {
1423 return _description;
1424 }
1425
1426 public void setDescription(MarkupMultiline value) {
1427 _description = value;
1428 }
1429
1430 public List<Property> getProps() {
1431 return _props;
1432 }
1433
1434 public void setProps(List<Property> value) {
1435 _props = value;
1436 }
1437
1438
1439
1440
1441
1442
1443 public boolean addProp(Property item) {
1444 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1445 if (_props == null) {
1446 _props = new LinkedList<>();
1447 }
1448 return _props.add(value);
1449 }
1450
1451
1452
1453
1454
1455
1456 public boolean removeProp(Property item) {
1457 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1458 return _props == null ? false : _props.remove(value);
1459 }
1460
1461 public List<Link> getLinks() {
1462 return _links;
1463 }
1464
1465 public void setLinks(List<Link> value) {
1466 _links = value;
1467 }
1468
1469
1470
1471
1472
1473
1474 public boolean addLink(Link item) {
1475 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1476 if (_links == null) {
1477 _links = new LinkedList<>();
1478 }
1479 return _links.add(value);
1480 }
1481
1482
1483
1484
1485
1486
1487 public boolean removeLink(Link item) {
1488 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1489 return _links == null ? false : _links.remove(value);
1490 }
1491
1492 public List<ResponsibleRole> getResponsibleRoles() {
1493 return _responsibleRoles;
1494 }
1495
1496 public void setResponsibleRoles(List<ResponsibleRole> value) {
1497 _responsibleRoles = value;
1498 }
1499
1500
1501
1502
1503
1504
1505 public boolean addResponsibleRole(ResponsibleRole item) {
1506 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1507 if (_responsibleRoles == null) {
1508 _responsibleRoles = new LinkedList<>();
1509 }
1510 return _responsibleRoles.add(value);
1511 }
1512
1513
1514
1515
1516
1517
1518 public boolean removeResponsibleRole(ResponsibleRole item) {
1519 ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1520 return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
1521 }
1522
1523 public MarkupMultiline getRemarks() {
1524 return _remarks;
1525 }
1526
1527 public void setRemarks(MarkupMultiline value) {
1528 _remarks = value;
1529 }
1530
1531 @Override
1532 public String toString() {
1533 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
1534 }
1535 }
1536 }
1537 }