View Javadoc
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.IsUnique;
12  import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
13  import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
14  import gov.nist.secauto.metaschema.binding.model.annotations.ValueConstraints;
15  import gov.nist.secauto.metaschema.model.common.JsonGroupAsBehavior;
16  import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
17  import gov.nist.secauto.metaschema.model.common.datatype.adapter.DateTimeWithTZAdapter;
18  import gov.nist.secauto.metaschema.model.common.datatype.adapter.PositiveIntegerAdapter;
19  import gov.nist.secauto.metaschema.model.common.datatype.adapter.StringAdapter;
20  import gov.nist.secauto.metaschema.model.common.datatype.adapter.TokenAdapter;
21  import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
22  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLine;
23  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLineAdapter;
24  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
25  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultilineAdapter;
26  import gov.nist.secauto.metaschema.model.common.util.ObjectUtils;
27  import java.lang.Override;
28  import java.lang.String;
29  import java.math.BigInteger;
30  import java.time.ZonedDateTime;
31  import java.util.LinkedList;
32  import java.util.List;
33  import java.util.UUID;
34  import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
35  import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
36  
37  /**
38   * Represents a scheduled event or milestone, which may be associated with a series of assessment actions.
39   */
40  @MetaschemaAssembly(
41      formalName = "Task",
42      description = "Represents a scheduled event or milestone, which may be associated with a series of assessment actions.",
43      name = "task",
44      metaschema = OscalAssessmentCommonMetaschema.class
45  )
46  public class Task {
47    @BoundFlag(
48        formalName = "Task Universally Unique Identifier",
49        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 task elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope). The locally defined *UUID* of the `task` 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.",
50        useName = "uuid",
51        required = true,
52        typeAdapter = UuidAdapter.class
53    )
54    private UUID _uuid;
55  
56    @BoundFlag(
57        formalName = "Task Type",
58        description = "The type of task.",
59        useName = "type",
60        required = true,
61        typeAdapter = TokenAdapter.class
62    )
63    @ValueConstraints(
64        allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, allowOthers = true, values = {@AllowedValue(value = "milestone", description = "The task represents a planned milestone."), @AllowedValue(value = "action", description = "The task represents a specific assessment action to be performed.")})
65    )
66    private String _type;
67  
68    /**
69     * "The title for this task."
70     */
71    @BoundField(
72        formalName = "Task Title",
73        description = "The title for this task.",
74        useName = "title",
75        minOccurs = 1
76    )
77    @BoundFieldValue(
78        typeAdapter = MarkupLineAdapter.class
79    )
80    private MarkupLine _title;
81  
82    /**
83     * "A human-readable description of this task."
84     */
85    @BoundField(
86        formalName = "Task Description",
87        description = "A human-readable description of this task.",
88        useName = "description"
89    )
90    @BoundFieldValue(
91        typeAdapter = MarkupMultilineAdapter.class
92    )
93    private MarkupMultiline _description;
94  
95    @BoundAssembly(
96        formalName = "Property",
97        description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
98        useName = "prop",
99        maxOccurs = -1
100   )
101   @GroupAs(
102       name = "props",
103       inJson = JsonGroupAsBehavior.LIST
104   )
105   private List<Property> _props;
106 
107   @BoundAssembly(
108       formalName = "Link",
109       description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
110       useName = "link",
111       maxOccurs = -1
112   )
113   @GroupAs(
114       name = "links",
115       inJson = JsonGroupAsBehavior.LIST
116   )
117   private List<Link> _links;
118 
119   /**
120    * "The timing under which the task is intended to occur."
121    */
122   @BoundAssembly(
123       formalName = "Event Timing",
124       description = "The timing under which the task is intended to occur.",
125       useName = "timing"
126   )
127   private Timing _timing;
128 
129   /**
130    * "Used to indicate that a task is dependent on another task."
131    */
132   @BoundAssembly(
133       formalName = "Task Dependency",
134       description = "Used to indicate that a task is dependent on another task.",
135       useName = "dependency",
136       maxOccurs = -1
137   )
138   @GroupAs(
139       name = "dependencies",
140       inJson = JsonGroupAsBehavior.LIST
141   )
142   private List<Dependency> _dependencies;
143 
144   @BoundAssembly(
145       formalName = "Task",
146       description = "Represents a scheduled event or milestone, which may be associated with a series of assessment actions.",
147       useName = "task",
148       maxOccurs = -1
149   )
150   @GroupAs(
151       name = "tasks",
152       inJson = JsonGroupAsBehavior.LIST
153   )
154   private List<Task> _tasks;
155 
156   /**
157    * "Identifies an individual activity to be performed as part of a task."
158    */
159   @BoundAssembly(
160       formalName = "Associated Activity",
161       description = "Identifies an individual activity to be performed as part of a task.",
162       useName = "associated-activity",
163       maxOccurs = -1
164   )
165   @GroupAs(
166       name = "associated-activities",
167       inJson = JsonGroupAsBehavior.LIST
168   )
169   private List<AssociatedActivity> _associatedActivities;
170 
171   @BoundAssembly(
172       formalName = "Subject of Assessment",
173       description = "Identifies system elements being assessed, such as components, inventory items, and locations. In the assessment plan, this identifies a planned assessment subject. In the assessment results this is an actual assessment subject, and reflects any changes from the plan. exactly what will be the focus of this assessment. Any subjects not identified in this way are out-of-scope.",
174       useName = "subject",
175       maxOccurs = -1,
176       remarks = "The assessment subjects that the activity was performed against."
177   )
178   @GroupAs(
179       name = "subjects",
180       inJson = JsonGroupAsBehavior.LIST
181   )
182   private List<AssessmentSubject> _subjects;
183 
184   @BoundAssembly(
185       formalName = "Responsible Role",
186       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.",
187       useName = "responsible-role",
188       maxOccurs = -1,
189       remarks = "Identifies the person or organization responsible for performing a specific role related to the task."
190   )
191   @GroupAs(
192       name = "responsible-roles",
193       inJson = JsonGroupAsBehavior.LIST
194   )
195   private List<ResponsibleRole> _responsibleRoles;
196 
197   @BoundField(
198       formalName = "Remarks",
199       description = "Additional commentary about the containing object.",
200       useName = "remarks"
201   )
202   @BoundFieldValue(
203       typeAdapter = MarkupMultilineAdapter.class
204   )
205   private MarkupMultiline _remarks;
206 
207   public Task() {
208   }
209 
210   public UUID getUuid() {
211     return _uuid;
212   }
213 
214   public void setUuid(UUID value) {
215     _uuid = value;
216   }
217 
218   public String getType() {
219     return _type;
220   }
221 
222   public void setType(String value) {
223     _type = value;
224   }
225 
226   public MarkupLine getTitle() {
227     return _title;
228   }
229 
230   public void setTitle(MarkupLine value) {
231     _title = value;
232   }
233 
234   public MarkupMultiline getDescription() {
235     return _description;
236   }
237 
238   public void setDescription(MarkupMultiline value) {
239     _description = value;
240   }
241 
242   public List<Property> getProps() {
243     return _props;
244   }
245 
246   public void setProps(List<Property> value) {
247     _props = value;
248   }
249 
250   /**
251    * Add a new {@link Property} item to the underlying collection.
252    * @param item the item to add
253    * @return {@code true}
254    */
255   public boolean addProp(Property item) {
256     Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
257     if (_props == null) {
258       _props = new LinkedList<>();
259     }
260     return _props.add(value);
261   }
262 
263   /**
264    * Remove the first matching {@link Property} item from the underlying collection.
265    * @param item the item to remove
266    * @return {@code true} if the item was removed or {@code false} otherwise
267    */
268   public boolean removeProp(Property item) {
269     Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
270     return _props == null ? false : _props.remove(value);
271   }
272 
273   public List<Link> getLinks() {
274     return _links;
275   }
276 
277   public void setLinks(List<Link> value) {
278     _links = value;
279   }
280 
281   /**
282    * Add a new {@link Link} item to the underlying collection.
283    * @param item the item to add
284    * @return {@code true}
285    */
286   public boolean addLink(Link item) {
287     Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
288     if (_links == null) {
289       _links = new LinkedList<>();
290     }
291     return _links.add(value);
292   }
293 
294   /**
295    * Remove the first matching {@link Link} item from the underlying collection.
296    * @param item the item to remove
297    * @return {@code true} if the item was removed or {@code false} otherwise
298    */
299   public boolean removeLink(Link item) {
300     Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
301     return _links == null ? false : _links.remove(value);
302   }
303 
304   public Timing getTiming() {
305     return _timing;
306   }
307 
308   public void setTiming(Timing value) {
309     _timing = value;
310   }
311 
312   public List<Dependency> getDependencies() {
313     return _dependencies;
314   }
315 
316   public void setDependencies(List<Dependency> value) {
317     _dependencies = value;
318   }
319 
320   /**
321    * Add a new {@link Dependency} item to the underlying collection.
322    * @param item the item to add
323    * @return {@code true}
324    */
325   public boolean addDependency(Dependency item) {
326     Dependency value = ObjectUtils.requireNonNull(item,"item cannot be null");
327     if (_dependencies == null) {
328       _dependencies = new LinkedList<>();
329     }
330     return _dependencies.add(value);
331   }
332 
333   /**
334    * Remove the first matching {@link Dependency} item from the underlying collection.
335    * @param item the item to remove
336    * @return {@code true} if the item was removed or {@code false} otherwise
337    */
338   public boolean removeDependency(Dependency item) {
339     Dependency value = ObjectUtils.requireNonNull(item,"item cannot be null");
340     return _dependencies == null ? false : _dependencies.remove(value);
341   }
342 
343   public List<Task> getTasks() {
344     return _tasks;
345   }
346 
347   public void setTasks(List<Task> value) {
348     _tasks = value;
349   }
350 
351   /**
352    * Add a new {@link Task} item to the underlying collection.
353    * @param item the item to add
354    * @return {@code true}
355    */
356   public boolean addTask(Task item) {
357     Task value = ObjectUtils.requireNonNull(item,"item cannot be null");
358     if (_tasks == null) {
359       _tasks = new LinkedList<>();
360     }
361     return _tasks.add(value);
362   }
363 
364   /**
365    * Remove the first matching {@link Task} item from the underlying collection.
366    * @param item the item to remove
367    * @return {@code true} if the item was removed or {@code false} otherwise
368    */
369   public boolean removeTask(Task item) {
370     Task value = ObjectUtils.requireNonNull(item,"item cannot be null");
371     return _tasks == null ? false : _tasks.remove(value);
372   }
373 
374   public List<AssociatedActivity> getAssociatedActivities() {
375     return _associatedActivities;
376   }
377 
378   public void setAssociatedActivities(List<AssociatedActivity> value) {
379     _associatedActivities = value;
380   }
381 
382   /**
383    * Add a new {@link AssociatedActivity} item to the underlying collection.
384    * @param item the item to add
385    * @return {@code true}
386    */
387   public boolean addAssociatedActivity(AssociatedActivity item) {
388     AssociatedActivity value = ObjectUtils.requireNonNull(item,"item cannot be null");
389     if (_associatedActivities == null) {
390       _associatedActivities = new LinkedList<>();
391     }
392     return _associatedActivities.add(value);
393   }
394 
395   /**
396    * Remove the first matching {@link AssociatedActivity} item from the underlying collection.
397    * @param item the item to remove
398    * @return {@code true} if the item was removed or {@code false} otherwise
399    */
400   public boolean removeAssociatedActivity(AssociatedActivity item) {
401     AssociatedActivity value = ObjectUtils.requireNonNull(item,"item cannot be null");
402     return _associatedActivities == null ? false : _associatedActivities.remove(value);
403   }
404 
405   public List<AssessmentSubject> getSubjects() {
406     return _subjects;
407   }
408 
409   public void setSubjects(List<AssessmentSubject> value) {
410     _subjects = value;
411   }
412 
413   /**
414    * Add a new {@link AssessmentSubject} item to the underlying collection.
415    * @param item the item to add
416    * @return {@code true}
417    */
418   public boolean addSubject(AssessmentSubject item) {
419     AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
420     if (_subjects == null) {
421       _subjects = new LinkedList<>();
422     }
423     return _subjects.add(value);
424   }
425 
426   /**
427    * Remove the first matching {@link AssessmentSubject} item from the underlying collection.
428    * @param item the item to remove
429    * @return {@code true} if the item was removed or {@code false} otherwise
430    */
431   public boolean removeSubject(AssessmentSubject item) {
432     AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
433     return _subjects == null ? false : _subjects.remove(value);
434   }
435 
436   public List<ResponsibleRole> getResponsibleRoles() {
437     return _responsibleRoles;
438   }
439 
440   public void setResponsibleRoles(List<ResponsibleRole> value) {
441     _responsibleRoles = value;
442   }
443 
444   /**
445    * Add a new {@link ResponsibleRole} item to the underlying collection.
446    * @param item the item to add
447    * @return {@code true}
448    */
449   public boolean addResponsibleRole(ResponsibleRole item) {
450     ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
451     if (_responsibleRoles == null) {
452       _responsibleRoles = new LinkedList<>();
453     }
454     return _responsibleRoles.add(value);
455   }
456 
457   /**
458    * Remove the first matching {@link ResponsibleRole} item from the underlying collection.
459    * @param item the item to remove
460    * @return {@code true} if the item was removed or {@code false} otherwise
461    */
462   public boolean removeResponsibleRole(ResponsibleRole item) {
463     ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
464     return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
465   }
466 
467   public MarkupMultiline getRemarks() {
468     return _remarks;
469   }
470 
471   public void setRemarks(MarkupMultiline value) {
472     _remarks = value;
473   }
474 
475   @Override
476   public String toString() {
477     return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
478   }
479 
480   /**
481    * The timing under which the task is intended to occur.
482    */
483   @MetaschemaAssembly(
484       formalName = "Event Timing",
485       description = "The timing under which the task is intended to occur.",
486       name = "timing",
487       metaschema = OscalAssessmentCommonMetaschema.class
488   )
489   public static class Timing {
490     /**
491      * "The task is intended to occur on the specified date."
492      */
493     @BoundAssembly(
494         formalName = "On Date Condition",
495         description = "The task is intended to occur on the specified date.",
496         useName = "on-date",
497         minOccurs = 1
498     )
499     private OnDate _onDate;
500 
501     /**
502      * "The task is intended to occur within the specified date range."
503      */
504     @BoundAssembly(
505         formalName = "On Date Range Condition",
506         description = "The task is intended to occur within the specified date range.",
507         useName = "within-date-range",
508         minOccurs = 1
509     )
510     private WithinDateRange _withinDateRange;
511 
512     /**
513      * "The task is intended to occur at the specified frequency."
514      */
515     @BoundAssembly(
516         formalName = "Frequency Condition",
517         description = "The task is intended to occur at the specified frequency.",
518         useName = "at-frequency",
519         minOccurs = 1
520     )
521     private AtFrequency _atFrequency;
522 
523     public Timing() {
524     }
525 
526     public OnDate getOnDate() {
527       return _onDate;
528     }
529 
530     public void setOnDate(OnDate value) {
531       _onDate = value;
532     }
533 
534     public WithinDateRange getWithinDateRange() {
535       return _withinDateRange;
536     }
537 
538     public void setWithinDateRange(WithinDateRange value) {
539       _withinDateRange = value;
540     }
541 
542     public AtFrequency getAtFrequency() {
543       return _atFrequency;
544     }
545 
546     public void setAtFrequency(AtFrequency value) {
547       _atFrequency = value;
548     }
549 
550     @Override
551     public String toString() {
552       return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
553     }
554 
555     /**
556      * The task is intended to occur at the specified frequency.
557      */
558     @MetaschemaAssembly(
559         formalName = "Frequency Condition",
560         description = "The task is intended to occur at the specified frequency.",
561         name = "at-frequency",
562         metaschema = OscalAssessmentCommonMetaschema.class
563     )
564     public static class AtFrequency {
565       @BoundFlag(
566           formalName = "Period",
567           description = "The task must occur after the specified period has elapsed.",
568           useName = "period",
569           required = true,
570           typeAdapter = PositiveIntegerAdapter.class
571       )
572       private BigInteger _period;
573 
574       @BoundFlag(
575           formalName = "Time Unit",
576           description = "The unit of time for the period.",
577           useName = "unit",
578           required = true,
579           typeAdapter = StringAdapter.class
580       )
581       @ValueConstraints(
582           allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, values = {@AllowedValue(value = "seconds", description = "The period is specified in seconds."), @AllowedValue(value = "minutes", description = "The period is specified in minutes."), @AllowedValue(value = "hours", description = "The period is specified in hours."), @AllowedValue(value = "days", description = "The period is specified in days."), @AllowedValue(value = "months", description = "The period is specified in calendar months."), @AllowedValue(value = "years", description = "The period is specified in calendar years.")})
583       )
584       private String _unit;
585 
586       public AtFrequency() {
587       }
588 
589       public BigInteger getPeriod() {
590         return _period;
591       }
592 
593       public void setPeriod(BigInteger value) {
594         _period = value;
595       }
596 
597       public String getUnit() {
598         return _unit;
599       }
600 
601       public void setUnit(String value) {
602         _unit = value;
603       }
604 
605       @Override
606       public String toString() {
607         return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
608       }
609     }
610 
611     /**
612      * The task is intended to occur within the specified date range.
613      */
614     @MetaschemaAssembly(
615         formalName = "On Date Range Condition",
616         description = "The task is intended to occur within the specified date range.",
617         name = "within-date-range",
618         metaschema = OscalAssessmentCommonMetaschema.class
619     )
620     public static class WithinDateRange {
621       @BoundFlag(
622           formalName = "Start Date Condition",
623           description = "The task must occur on or after the specified date.",
624           useName = "start",
625           required = true,
626           typeAdapter = DateTimeWithTZAdapter.class
627       )
628       private ZonedDateTime _start;
629 
630       @BoundFlag(
631           formalName = "End Date Condition",
632           description = "The task must occur on or before the specified date.",
633           useName = "end",
634           required = true,
635           typeAdapter = DateTimeWithTZAdapter.class
636       )
637       private ZonedDateTime _end;
638 
639       public WithinDateRange() {
640       }
641 
642       public ZonedDateTime getStart() {
643         return _start;
644       }
645 
646       public void setStart(ZonedDateTime value) {
647         _start = value;
648       }
649 
650       public ZonedDateTime getEnd() {
651         return _end;
652       }
653 
654       public void setEnd(ZonedDateTime value) {
655         _end = value;
656       }
657 
658       @Override
659       public String toString() {
660         return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
661       }
662     }
663 
664     /**
665      * The task is intended to occur on the specified date.
666      */
667     @MetaschemaAssembly(
668         formalName = "On Date Condition",
669         description = "The task is intended to occur on the specified date.",
670         name = "on-date",
671         metaschema = OscalAssessmentCommonMetaschema.class
672     )
673     public static class OnDate {
674       @BoundFlag(
675           formalName = "On Date Condition",
676           description = "The task must occur on the specified date.",
677           useName = "date",
678           required = true,
679           typeAdapter = DateTimeWithTZAdapter.class
680       )
681       private ZonedDateTime _date;
682 
683       public OnDate() {
684       }
685 
686       public ZonedDateTime getDate() {
687         return _date;
688       }
689 
690       public void setDate(ZonedDateTime value) {
691         _date = value;
692       }
693 
694       @Override
695       public String toString() {
696         return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
697       }
698     }
699   }
700 
701   /**
702    * Identifies an individual activity to be performed as part of a task.
703    */
704   @MetaschemaAssembly(
705       formalName = "Associated Activity",
706       description = "Identifies an individual activity to be performed as part of a task.",
707       name = "associated-activity",
708       metaschema = OscalAssessmentCommonMetaschema.class
709   )
710   @AssemblyConstraints(
711       isUnique = @IsUnique(id = "unique-associated-activity-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.")
712   )
713   public static class AssociatedActivity {
714     @BoundFlag(
715         formalName = "Activity Universally Unique Identifier Reference",
716         description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to an activity defined in the list of activities.",
717         useName = "activity-uuid",
718         required = true,
719         typeAdapter = UuidAdapter.class
720     )
721     private UUID _activityUuid;
722 
723     @BoundAssembly(
724         formalName = "Property",
725         description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
726         useName = "prop",
727         maxOccurs = -1
728     )
729     @GroupAs(
730         name = "props",
731         inJson = JsonGroupAsBehavior.LIST
732     )
733     private List<Property> _props;
734 
735     @BoundAssembly(
736         formalName = "Link",
737         description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
738         useName = "link",
739         maxOccurs = -1
740     )
741     @GroupAs(
742         name = "links",
743         inJson = JsonGroupAsBehavior.LIST
744     )
745     private List<Link> _links;
746 
747     @BoundAssembly(
748         formalName = "Responsible Role",
749         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.",
750         useName = "responsible-role",
751         maxOccurs = -1,
752         remarks = "Identifies the person or organization responsible for performing a specific role defined by the activity."
753     )
754     @GroupAs(
755         name = "responsible-roles",
756         inJson = JsonGroupAsBehavior.LIST
757     )
758     private List<ResponsibleRole> _responsibleRoles;
759 
760     @BoundAssembly(
761         formalName = "Subject of Assessment",
762         description = "Identifies system elements being assessed, such as components, inventory items, and locations. In the assessment plan, this identifies a planned assessment subject. In the assessment results this is an actual assessment subject, and reflects any changes from the plan. exactly what will be the focus of this assessment. Any subjects not identified in this way are out-of-scope.",
763         useName = "subject",
764         minOccurs = 1,
765         maxOccurs = -1
766     )
767     @GroupAs(
768         name = "subjects",
769         inJson = JsonGroupAsBehavior.LIST
770     )
771     private List<AssessmentSubject> _subjects;
772 
773     @BoundField(
774         formalName = "Remarks",
775         description = "Additional commentary about the containing object.",
776         useName = "remarks"
777     )
778     @BoundFieldValue(
779         typeAdapter = MarkupMultilineAdapter.class
780     )
781     private MarkupMultiline _remarks;
782 
783     public AssociatedActivity() {
784     }
785 
786     public UUID getActivityUuid() {
787       return _activityUuid;
788     }
789 
790     public void setActivityUuid(UUID value) {
791       _activityUuid = value;
792     }
793 
794     public List<Property> getProps() {
795       return _props;
796     }
797 
798     public void setProps(List<Property> value) {
799       _props = value;
800     }
801 
802     /**
803      * Add a new {@link Property} item to the underlying collection.
804      * @param item the item to add
805      * @return {@code true}
806      */
807     public boolean addProp(Property item) {
808       Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
809       if (_props == null) {
810         _props = new LinkedList<>();
811       }
812       return _props.add(value);
813     }
814 
815     /**
816      * Remove the first matching {@link Property} item from the underlying collection.
817      * @param item the item to remove
818      * @return {@code true} if the item was removed or {@code false} otherwise
819      */
820     public boolean removeProp(Property item) {
821       Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
822       return _props == null ? false : _props.remove(value);
823     }
824 
825     public List<Link> getLinks() {
826       return _links;
827     }
828 
829     public void setLinks(List<Link> value) {
830       _links = value;
831     }
832 
833     /**
834      * Add a new {@link Link} item to the underlying collection.
835      * @param item the item to add
836      * @return {@code true}
837      */
838     public boolean addLink(Link item) {
839       Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
840       if (_links == null) {
841         _links = new LinkedList<>();
842       }
843       return _links.add(value);
844     }
845 
846     /**
847      * Remove the first matching {@link Link} item from the underlying collection.
848      * @param item the item to remove
849      * @return {@code true} if the item was removed or {@code false} otherwise
850      */
851     public boolean removeLink(Link item) {
852       Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
853       return _links == null ? false : _links.remove(value);
854     }
855 
856     public List<ResponsibleRole> getResponsibleRoles() {
857       return _responsibleRoles;
858     }
859 
860     public void setResponsibleRoles(List<ResponsibleRole> value) {
861       _responsibleRoles = value;
862     }
863 
864     /**
865      * Add a new {@link ResponsibleRole} item to the underlying collection.
866      * @param item the item to add
867      * @return {@code true}
868      */
869     public boolean addResponsibleRole(ResponsibleRole item) {
870       ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
871       if (_responsibleRoles == null) {
872         _responsibleRoles = new LinkedList<>();
873       }
874       return _responsibleRoles.add(value);
875     }
876 
877     /**
878      * Remove the first matching {@link ResponsibleRole} item from the underlying collection.
879      * @param item the item to remove
880      * @return {@code true} if the item was removed or {@code false} otherwise
881      */
882     public boolean removeResponsibleRole(ResponsibleRole item) {
883       ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
884       return _responsibleRoles == null ? false : _responsibleRoles.remove(value);
885     }
886 
887     public List<AssessmentSubject> getSubjects() {
888       return _subjects;
889     }
890 
891     public void setSubjects(List<AssessmentSubject> value) {
892       _subjects = value;
893     }
894 
895     /**
896      * Add a new {@link AssessmentSubject} item to the underlying collection.
897      * @param item the item to add
898      * @return {@code true}
899      */
900     public boolean addSubject(AssessmentSubject item) {
901       AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
902       if (_subjects == null) {
903         _subjects = new LinkedList<>();
904       }
905       return _subjects.add(value);
906     }
907 
908     /**
909      * Remove the first matching {@link AssessmentSubject} item from the underlying collection.
910      * @param item the item to remove
911      * @return {@code true} if the item was removed or {@code false} otherwise
912      */
913     public boolean removeSubject(AssessmentSubject item) {
914       AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
915       return _subjects == null ? false : _subjects.remove(value);
916     }
917 
918     public MarkupMultiline getRemarks() {
919       return _remarks;
920     }
921 
922     public void setRemarks(MarkupMultiline value) {
923       _remarks = value;
924     }
925 
926     @Override
927     public String toString() {
928       return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
929     }
930   }
931 
932   /**
933    * Used to indicate that a task is dependent on another task.
934    */
935   @MetaschemaAssembly(
936       formalName = "Task Dependency",
937       description = "Used to indicate that a task is dependent on another task.",
938       name = "dependency",
939       metaschema = OscalAssessmentCommonMetaschema.class
940   )
941   public static class Dependency {
942     @BoundFlag(
943         formalName = "Task Universally Unique Identifier Reference",
944         description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to a unique task.",
945         useName = "task-uuid",
946         required = true,
947         typeAdapter = UuidAdapter.class
948     )
949     private UUID _taskUuid;
950 
951     @BoundField(
952         formalName = "Remarks",
953         description = "Additional commentary about the containing object.",
954         useName = "remarks"
955     )
956     @BoundFieldValue(
957         typeAdapter = MarkupMultilineAdapter.class
958     )
959     private MarkupMultiline _remarks;
960 
961     public Dependency() {
962     }
963 
964     public UUID getTaskUuid() {
965       return _taskUuid;
966     }
967 
968     public void setTaskUuid(UUID value) {
969       _taskUuid = value;
970     }
971 
972     public MarkupMultiline getRemarks() {
973       return _remarks;
974     }
975 
976     public void setRemarks(MarkupMultiline value) {
977       _remarks = value;
978     }
979 
980     @Override
981     public String toString() {
982       return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
983     }
984   }
985 }