1 package gov.nist.secauto.oscal.lib.model;
2
3 import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
4 import gov.nist.secauto.metaschema.binding.model.annotations.BoundField;
5 import gov.nist.secauto.metaschema.binding.model.annotations.BoundFieldValue;
6 import gov.nist.secauto.metaschema.binding.model.annotations.GroupAs;
7 import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
8 import gov.nist.secauto.metaschema.model.common.JsonGroupAsBehavior;
9 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
10 import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultilineAdapter;
11 import gov.nist.secauto.metaschema.model.common.util.ObjectUtils;
12 import java.lang.Override;
13 import java.lang.String;
14 import java.util.LinkedList;
15 import java.util.List;
16 import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
17 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
18
19
20
21
22 @MetaschemaAssembly(
23 formalName = "Reviewed Controls and Control Objectives",
24 description = "Identifies the controls being assessed and their control objectives.",
25 name = "reviewed-controls",
26 metaschema = OscalAssessmentCommonMetaschema.class,
27 remarks = "In the context of an assessment plan, this construct is used to identify the controls and control objectives that are to be assessed. In the context of an assessment result, this construct is used to identify the actual controls and objectives that were assessed, reflecting any changes from the plan.\n"
28 + "\n"
29 + "When resolving the selection of controls and control objectives, the following processing will occur:\n"
30 + "\n"
31 + "1. Controls will be resolved by creating a set of controls based on the control-selections by first handling the includes, and then removing any excluded controls.\n"
32 + "\n"
33 + "2. The set of control objectives will be resolved from the set of controls that was generated in the previous step. The set of control objectives is based on the control-objective-selection by first handling the includes, and then removing any excluded control objectives."
34 )
35 public class ReviewedControls {
36
37
38
39 @BoundField(
40 formalName = "Control Objective Description",
41 description = "A human-readable description of control objectives.",
42 useName = "description"
43 )
44 @BoundFieldValue(
45 typeAdapter = MarkupMultilineAdapter.class
46 )
47 private MarkupMultiline _description;
48
49 @BoundAssembly(
50 formalName = "Property",
51 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
52 useName = "prop",
53 maxOccurs = -1
54 )
55 @GroupAs(
56 name = "props",
57 inJson = JsonGroupAsBehavior.LIST
58 )
59 private List<Property> _props;
60
61 @BoundAssembly(
62 formalName = "Link",
63 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
64 useName = "link",
65 maxOccurs = -1
66 )
67 @GroupAs(
68 name = "links",
69 inJson = JsonGroupAsBehavior.LIST
70 )
71 private List<Link> _links;
72
73
74
75
76 @BoundAssembly(
77 formalName = "Assessed Controls",
78 description = "Identifies the controls being assessed. In the assessment plan, these are the planned controls. In the assessment results, these are the actual controls, and reflects any changes from the plan.",
79 useName = "control-selection",
80 minOccurs = 1,
81 maxOccurs = -1,
82 remarks = "The `include-all`, specifies all control identified in the **baseline** are included in the scope if this assessment, as specified by the `include-profile` statement within the linked SSP.\n"
83 + "\n"
84 + "Any control specified within `exclude-controls` must first be within a range of explicitly included controls, via `include-controls` or `include-all`."
85 )
86 @GroupAs(
87 name = "control-selections",
88 inJson = JsonGroupAsBehavior.LIST
89 )
90 private List<ControlSelection> _controlSelections;
91
92
93
94
95 @BoundAssembly(
96 formalName = "Referenced Control Objectives",
97 description = "Identifies the control objectives of the assessment. In the assessment plan, these are the planned objectives. In the assessment results, these are the assessed objectives, and reflects any changes from the plan.",
98 useName = "control-objective-selection",
99 maxOccurs = -1,
100 remarks = "The `include-all` field, specifies all control objectives for any in-scope control. In-scope controls are defined in the `control-selection`.\n"
101 + "\n"
102 + "Any control objective specified within `exclude-controls` must first be within a range of explicitly included control objectives, via `include-objectives` or `include-all`."
103 )
104 @GroupAs(
105 name = "control-objective-selections",
106 inJson = JsonGroupAsBehavior.LIST
107 )
108 private List<ControlObjectiveSelection> _controlObjectiveSelections;
109
110 @BoundField(
111 formalName = "Remarks",
112 description = "Additional commentary about the containing object.",
113 useName = "remarks"
114 )
115 @BoundFieldValue(
116 typeAdapter = MarkupMultilineAdapter.class
117 )
118 private MarkupMultiline _remarks;
119
120 public ReviewedControls() {
121 }
122
123 public MarkupMultiline getDescription() {
124 return _description;
125 }
126
127 public void setDescription(MarkupMultiline value) {
128 _description = value;
129 }
130
131 public List<Property> getProps() {
132 return _props;
133 }
134
135 public void setProps(List<Property> value) {
136 _props = value;
137 }
138
139
140
141
142
143
144 public boolean addProp(Property item) {
145 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
146 if (_props == null) {
147 _props = new LinkedList<>();
148 }
149 return _props.add(value);
150 }
151
152
153
154
155
156
157 public boolean removeProp(Property item) {
158 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
159 return _props == null ? false : _props.remove(value);
160 }
161
162 public List<Link> getLinks() {
163 return _links;
164 }
165
166 public void setLinks(List<Link> value) {
167 _links = value;
168 }
169
170
171
172
173
174
175 public boolean addLink(Link item) {
176 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
177 if (_links == null) {
178 _links = new LinkedList<>();
179 }
180 return _links.add(value);
181 }
182
183
184
185
186
187
188 public boolean removeLink(Link item) {
189 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
190 return _links == null ? false : _links.remove(value);
191 }
192
193 public List<ControlSelection> getControlSelections() {
194 return _controlSelections;
195 }
196
197 public void setControlSelections(List<ControlSelection> value) {
198 _controlSelections = value;
199 }
200
201
202
203
204
205
206 public boolean addControlSelection(ControlSelection item) {
207 ControlSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
208 if (_controlSelections == null) {
209 _controlSelections = new LinkedList<>();
210 }
211 return _controlSelections.add(value);
212 }
213
214
215
216
217
218
219 public boolean removeControlSelection(ControlSelection item) {
220 ControlSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
221 return _controlSelections == null ? false : _controlSelections.remove(value);
222 }
223
224 public List<ControlObjectiveSelection> getControlObjectiveSelections() {
225 return _controlObjectiveSelections;
226 }
227
228 public void setControlObjectiveSelections(List<ControlObjectiveSelection> value) {
229 _controlObjectiveSelections = value;
230 }
231
232
233
234
235
236
237 public boolean addControlObjectiveSelection(ControlObjectiveSelection item) {
238 ControlObjectiveSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
239 if (_controlObjectiveSelections == null) {
240 _controlObjectiveSelections = new LinkedList<>();
241 }
242 return _controlObjectiveSelections.add(value);
243 }
244
245
246
247
248
249
250 public boolean removeControlObjectiveSelection(ControlObjectiveSelection item) {
251 ControlObjectiveSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
252 return _controlObjectiveSelections == null ? false : _controlObjectiveSelections.remove(value);
253 }
254
255 public MarkupMultiline getRemarks() {
256 return _remarks;
257 }
258
259 public void setRemarks(MarkupMultiline value) {
260 _remarks = value;
261 }
262
263 @Override
264 public String toString() {
265 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
266 }
267
268
269
270
271 @MetaschemaAssembly(
272 formalName = "Assessed Controls",
273 description = "Identifies the controls being assessed. In the assessment plan, these are the planned controls. In the assessment results, these are the actual controls, and reflects any changes from the plan.",
274 name = "control-selection",
275 metaschema = OscalAssessmentCommonMetaschema.class,
276 remarks = "The `include-all`, specifies all control identified in the **baseline** are included in the scope if this assessment, as specified by the `include-profile` statement within the linked SSP.\n"
277 + "\n"
278 + "Any control specified within `exclude-controls` must first be within a range of explicitly included controls, via `include-controls` or `include-all`."
279 )
280 public static class ControlSelection {
281
282
283
284 @BoundField(
285 formalName = "Assessed Controls Description",
286 description = "A human-readable description of in-scope controls specified for assessment.",
287 useName = "description"
288 )
289 @BoundFieldValue(
290 typeAdapter = MarkupMultilineAdapter.class
291 )
292 private MarkupMultiline _description;
293
294 @BoundAssembly(
295 formalName = "Property",
296 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
297 useName = "prop",
298 maxOccurs = -1
299 )
300 @GroupAs(
301 name = "props",
302 inJson = JsonGroupAsBehavior.LIST
303 )
304 private List<Property> _props;
305
306 @BoundAssembly(
307 formalName = "Link",
308 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
309 useName = "link",
310 maxOccurs = -1
311 )
312 @GroupAs(
313 name = "links",
314 inJson = JsonGroupAsBehavior.LIST
315 )
316 private List<Link> _links;
317
318 @BoundAssembly(
319 formalName = "Include All",
320 description = "Include all controls from the imported catalog or profile resources.",
321 useName = "include-all",
322 minOccurs = 1
323 )
324 private IncludeAll _includeAll;
325
326 @BoundAssembly(
327 formalName = "Select Control",
328 description = "Used to select a control for inclusion/exclusion based on one or more control identifiers. A set of statement identifiers can be used to target the inclusion/exclusion to only specific control statements providing more granularity over the specific statements that are within the asessment scope.",
329 useName = "include-control",
330 minOccurs = 1,
331 maxOccurs = -1,
332 remarks = "Used to select a control for inclusion by the control's identifier. Specific control statements can be selected by their statement identifier."
333 )
334 @GroupAs(
335 name = "include-controls",
336 inJson = JsonGroupAsBehavior.LIST
337 )
338 private List<SelectControlById> _includeControls;
339
340 @BoundAssembly(
341 formalName = "Select Control",
342 description = "Used to select a control for inclusion/exclusion based on one or more control identifiers. A set of statement identifiers can be used to target the inclusion/exclusion to only specific control statements providing more granularity over the specific statements that are within the asessment scope.",
343 useName = "exclude-control",
344 maxOccurs = -1,
345 remarks = "Used to select a control for exclusion by the control's identifier. Specific control statements can be excluded by their statement identifier."
346 )
347 @GroupAs(
348 name = "exclude-controls",
349 inJson = JsonGroupAsBehavior.LIST
350 )
351 private List<SelectControlById> _excludeControls;
352
353 @BoundField(
354 formalName = "Remarks",
355 description = "Additional commentary about the containing object.",
356 useName = "remarks"
357 )
358 @BoundFieldValue(
359 typeAdapter = MarkupMultilineAdapter.class
360 )
361 private MarkupMultiline _remarks;
362
363 public ControlSelection() {
364 }
365
366 public MarkupMultiline getDescription() {
367 return _description;
368 }
369
370 public void setDescription(MarkupMultiline value) {
371 _description = value;
372 }
373
374 public List<Property> getProps() {
375 return _props;
376 }
377
378 public void setProps(List<Property> value) {
379 _props = value;
380 }
381
382
383
384
385
386
387 public boolean addProp(Property item) {
388 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
389 if (_props == null) {
390 _props = new LinkedList<>();
391 }
392 return _props.add(value);
393 }
394
395
396
397
398
399
400 public boolean removeProp(Property item) {
401 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
402 return _props == null ? false : _props.remove(value);
403 }
404
405 public List<Link> getLinks() {
406 return _links;
407 }
408
409 public void setLinks(List<Link> value) {
410 _links = value;
411 }
412
413
414
415
416
417
418 public boolean addLink(Link item) {
419 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
420 if (_links == null) {
421 _links = new LinkedList<>();
422 }
423 return _links.add(value);
424 }
425
426
427
428
429
430
431 public boolean removeLink(Link item) {
432 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
433 return _links == null ? false : _links.remove(value);
434 }
435
436 public IncludeAll getIncludeAll() {
437 return _includeAll;
438 }
439
440 public void setIncludeAll(IncludeAll value) {
441 _includeAll = value;
442 }
443
444 public List<SelectControlById> getIncludeControls() {
445 return _includeControls;
446 }
447
448 public void setIncludeControls(List<SelectControlById> value) {
449 _includeControls = value;
450 }
451
452
453
454
455
456
457 public boolean addIncludeControl(SelectControlById item) {
458 SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
459 if (_includeControls == null) {
460 _includeControls = new LinkedList<>();
461 }
462 return _includeControls.add(value);
463 }
464
465
466
467
468
469
470 public boolean removeIncludeControl(SelectControlById item) {
471 SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
472 return _includeControls == null ? false : _includeControls.remove(value);
473 }
474
475 public List<SelectControlById> getExcludeControls() {
476 return _excludeControls;
477 }
478
479 public void setExcludeControls(List<SelectControlById> value) {
480 _excludeControls = value;
481 }
482
483
484
485
486
487
488 public boolean addExcludeControl(SelectControlById item) {
489 SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
490 if (_excludeControls == null) {
491 _excludeControls = new LinkedList<>();
492 }
493 return _excludeControls.add(value);
494 }
495
496
497
498
499
500
501 public boolean removeExcludeControl(SelectControlById item) {
502 SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
503 return _excludeControls == null ? false : _excludeControls.remove(value);
504 }
505
506 public MarkupMultiline getRemarks() {
507 return _remarks;
508 }
509
510 public void setRemarks(MarkupMultiline value) {
511 _remarks = value;
512 }
513
514 @Override
515 public String toString() {
516 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
517 }
518 }
519
520
521
522
523 @MetaschemaAssembly(
524 formalName = "Referenced Control Objectives",
525 description = "Identifies the control objectives of the assessment. In the assessment plan, these are the planned objectives. In the assessment results, these are the assessed objectives, and reflects any changes from the plan.",
526 name = "control-objective-selection",
527 metaschema = OscalAssessmentCommonMetaschema.class,
528 remarks = "The `include-all` field, specifies all control objectives for any in-scope control. In-scope controls are defined in the `control-selection`.\n"
529 + "\n"
530 + "Any control objective specified within `exclude-controls` must first be within a range of explicitly included control objectives, via `include-objectives` or `include-all`."
531 )
532 public static class ControlObjectiveSelection {
533
534
535
536 @BoundField(
537 formalName = "Control Objectives Description",
538 description = "A human-readable description of this collection of control objectives.",
539 useName = "description"
540 )
541 @BoundFieldValue(
542 typeAdapter = MarkupMultilineAdapter.class
543 )
544 private MarkupMultiline _description;
545
546 @BoundAssembly(
547 formalName = "Property",
548 description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
549 useName = "prop",
550 maxOccurs = -1
551 )
552 @GroupAs(
553 name = "props",
554 inJson = JsonGroupAsBehavior.LIST
555 )
556 private List<Property> _props;
557
558 @BoundAssembly(
559 formalName = "Link",
560 description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
561 useName = "link",
562 maxOccurs = -1
563 )
564 @GroupAs(
565 name = "links",
566 inJson = JsonGroupAsBehavior.LIST
567 )
568 private List<Link> _links;
569
570 @BoundAssembly(
571 formalName = "Include All",
572 description = "Include all controls from the imported catalog or profile resources.",
573 useName = "include-all",
574 minOccurs = 1
575 )
576 private IncludeAll _includeAll;
577
578 @BoundAssembly(
579 formalName = "Select Objective",
580 description = "Used to select a control objective for inclusion/exclusion based on the control objective's identifier.",
581 useName = "include-objective",
582 minOccurs = 1,
583 maxOccurs = -1,
584 remarks = "Used to select a control objective for inclusion by the control objective's identifier."
585 )
586 @GroupAs(
587 name = "include-objectives",
588 inJson = JsonGroupAsBehavior.LIST
589 )
590 private List<SelectObjectiveById> _includeObjectives;
591
592 @BoundAssembly(
593 formalName = "Select Objective",
594 description = "Used to select a control objective for inclusion/exclusion based on the control objective's identifier.",
595 useName = "exclude-objective",
596 maxOccurs = -1,
597 remarks = "Used to select a control objective for exclusion by the control objective's identifier."
598 )
599 @GroupAs(
600 name = "exclude-objectives",
601 inJson = JsonGroupAsBehavior.LIST
602 )
603 private List<SelectObjectiveById> _excludeObjectives;
604
605 @BoundField(
606 formalName = "Remarks",
607 description = "Additional commentary about the containing object.",
608 useName = "remarks"
609 )
610 @BoundFieldValue(
611 typeAdapter = MarkupMultilineAdapter.class
612 )
613 private MarkupMultiline _remarks;
614
615 public ControlObjectiveSelection() {
616 }
617
618 public MarkupMultiline getDescription() {
619 return _description;
620 }
621
622 public void setDescription(MarkupMultiline value) {
623 _description = value;
624 }
625
626 public List<Property> getProps() {
627 return _props;
628 }
629
630 public void setProps(List<Property> value) {
631 _props = value;
632 }
633
634
635
636
637
638
639 public boolean addProp(Property item) {
640 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
641 if (_props == null) {
642 _props = new LinkedList<>();
643 }
644 return _props.add(value);
645 }
646
647
648
649
650
651
652 public boolean removeProp(Property item) {
653 Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
654 return _props == null ? false : _props.remove(value);
655 }
656
657 public List<Link> getLinks() {
658 return _links;
659 }
660
661 public void setLinks(List<Link> value) {
662 _links = value;
663 }
664
665
666
667
668
669
670 public boolean addLink(Link item) {
671 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
672 if (_links == null) {
673 _links = new LinkedList<>();
674 }
675 return _links.add(value);
676 }
677
678
679
680
681
682
683 public boolean removeLink(Link item) {
684 Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
685 return _links == null ? false : _links.remove(value);
686 }
687
688 public IncludeAll getIncludeAll() {
689 return _includeAll;
690 }
691
692 public void setIncludeAll(IncludeAll value) {
693 _includeAll = value;
694 }
695
696 public List<SelectObjectiveById> getIncludeObjectives() {
697 return _includeObjectives;
698 }
699
700 public void setIncludeObjectives(List<SelectObjectiveById> value) {
701 _includeObjectives = value;
702 }
703
704
705
706
707
708
709 public boolean addIncludeObjective(SelectObjectiveById item) {
710 SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
711 if (_includeObjectives == null) {
712 _includeObjectives = new LinkedList<>();
713 }
714 return _includeObjectives.add(value);
715 }
716
717
718
719
720
721
722 public boolean removeIncludeObjective(SelectObjectiveById item) {
723 SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
724 return _includeObjectives == null ? false : _includeObjectives.remove(value);
725 }
726
727 public List<SelectObjectiveById> getExcludeObjectives() {
728 return _excludeObjectives;
729 }
730
731 public void setExcludeObjectives(List<SelectObjectiveById> value) {
732 _excludeObjectives = value;
733 }
734
735
736
737
738
739
740 public boolean addExcludeObjective(SelectObjectiveById item) {
741 SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
742 if (_excludeObjectives == null) {
743 _excludeObjectives = new LinkedList<>();
744 }
745 return _excludeObjectives.add(value);
746 }
747
748
749
750
751
752
753 public boolean removeExcludeObjective(SelectObjectiveById item) {
754 SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
755 return _excludeObjectives == null ? false : _excludeObjectives.remove(value);
756 }
757
758 public MarkupMultiline getRemarks() {
759 return _remarks;
760 }
761
762 public void setRemarks(MarkupMultiline value) {
763 _remarks = value;
764 }
765
766 @Override
767 public String toString() {
768 return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
769 }
770 }
771 }