001// Generated from: ../../../../../../../../oscal/src/metaschema/oscal_assessment-common_metaschema.xml
002// Do not edit - changes will be lost when regenerated.
003package dev.metaschema.oscal.lib.model;
004
005import dev.metaschema.core.datatype.adapter.DateTimeWithTZAdapter;
006import dev.metaschema.core.datatype.adapter.PositiveIntegerAdapter;
007import dev.metaschema.core.datatype.adapter.StringAdapter;
008import dev.metaschema.core.datatype.adapter.TokenAdapter;
009import dev.metaschema.core.datatype.adapter.UuidAdapter;
010import dev.metaschema.core.datatype.markup.MarkupLine;
011import dev.metaschema.core.datatype.markup.MarkupLineAdapter;
012import dev.metaschema.core.datatype.markup.MarkupMultiline;
013import dev.metaschema.core.datatype.markup.MarkupMultilineAdapter;
014import dev.metaschema.core.model.IBoundObject;
015import dev.metaschema.core.model.IMetaschemaData;
016import dev.metaschema.core.model.JsonGroupAsBehavior;
017import dev.metaschema.core.model.constraint.IConstraint;
018import dev.metaschema.core.util.ObjectUtils;
019import dev.metaschema.databind.model.annotations.AllowedValue;
020import dev.metaschema.databind.model.annotations.AllowedValues;
021import dev.metaschema.databind.model.annotations.AssemblyConstraints;
022import dev.metaschema.databind.model.annotations.BoundAssembly;
023import dev.metaschema.databind.model.annotations.BoundChoice;
024import dev.metaschema.databind.model.annotations.BoundField;
025import dev.metaschema.databind.model.annotations.BoundFlag;
026import dev.metaschema.databind.model.annotations.GroupAs;
027import dev.metaschema.databind.model.annotations.IsUnique;
028import dev.metaschema.databind.model.annotations.KeyField;
029import dev.metaschema.databind.model.annotations.MetaschemaAssembly;
030import dev.metaschema.databind.model.annotations.ValueConstraints;
031import edu.umd.cs.findbugs.annotations.NonNull;
032import edu.umd.cs.findbugs.annotations.Nullable;
033import java.math.BigInteger;
034import java.time.ZonedDateTime;
035import java.util.LinkedList;
036import java.util.List;
037import java.util.UUID;
038import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
039import org.apache.commons.lang3.builder.ToStringStyle;
040
041/**
042 * Represents a scheduled event or milestone, which may be associated with a series of assessment actions.
043 */
044@MetaschemaAssembly(
045    formalName = "Task",
046    description = "Represents a scheduled event or milestone, which may be associated with a series of assessment actions.",
047    name = "task",
048    moduleClass = OscalAssessmentCommonModule.class
049)
050public class Task implements IBoundObject {
051  private final IMetaschemaData __metaschemaData;
052
053  /**
054   * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this task elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>task</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document.
055   */
056  @BoundFlag(
057      formalName = "Task Universally Unique Identifier",
058      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.",
059      name = "uuid",
060      required = true,
061      typeAdapter = UuidAdapter.class
062  )
063  private UUID _uuid;
064
065  /**
066   * The type of task.
067   */
068  @BoundFlag(
069      formalName = "Task Type",
070      description = "The type of task.",
071      name = "type",
072      required = true,
073      typeAdapter = TokenAdapter.class,
074      valueConstraints = @ValueConstraints(allowedValues = @AllowedValues(id = "oscal-task-values", 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.")}))
075  )
076  private String _type;
077
078  /**
079   * The title for this task.
080   */
081  @BoundField(
082      formalName = "Task Title",
083      description = "The title for this task.",
084      useName = "title",
085      minOccurs = 1,
086      typeAdapter = MarkupLineAdapter.class
087  )
088  private MarkupLine _title;
089
090  /**
091   * A human-readable description of this task.
092   */
093  @BoundField(
094      formalName = "Task Description",
095      description = "A human-readable description of this task.",
096      useName = "description",
097      typeAdapter = MarkupMultilineAdapter.class
098  )
099  private MarkupMultiline _description;
100
101  /**
102   * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
103   */
104  @BoundAssembly(
105      formalName = "Property",
106      description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
107      useName = "prop",
108      maxOccurs = -1,
109      groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST)
110  )
111  private List<Property> _props;
112
113  /**
114   * A reference to a local or remote resource, that has a specific relation to the containing object.
115   */
116  @BoundAssembly(
117      formalName = "Link",
118      description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
119      useName = "link",
120      maxOccurs = -1,
121      groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST)
122  )
123  private List<Link> _links;
124
125  /**
126   * The timing under which the task is intended to occur.
127   */
128  @BoundAssembly(
129      formalName = "Event Timing",
130      description = "The timing under which the task is intended to occur.",
131      useName = "timing"
132  )
133  private Timing _timing;
134
135  /**
136   * Used to indicate that a task is dependent on another task.
137   */
138  @BoundAssembly(
139      formalName = "Task Dependency",
140      description = "Used to indicate that a task is dependent on another task.",
141      useName = "dependency",
142      maxOccurs = -1,
143      groupAs = @GroupAs(name = "dependencies", inJson = JsonGroupAsBehavior.LIST)
144  )
145  private List<Dependency> _dependencies;
146
147  /**
148   * Represents a scheduled event or milestone, which may be associated with a series of assessment actions.
149   */
150  @BoundAssembly(
151      formalName = "Task",
152      description = "Represents a scheduled event or milestone, which may be associated with a series of assessment actions.",
153      useName = "task",
154      maxOccurs = -1,
155      groupAs = @GroupAs(name = "tasks", inJson = JsonGroupAsBehavior.LIST)
156  )
157  private List<Task> _tasks;
158
159  /**
160   * Identifies an individual activity to be performed as part of a task.
161   */
162  @BoundAssembly(
163      formalName = "Associated Activity",
164      description = "Identifies an individual activity to be performed as part of a task.",
165      useName = "associated-activity",
166      maxOccurs = -1,
167      groupAs = @GroupAs(name = "associated-activities", inJson = JsonGroupAsBehavior.LIST)
168  )
169  private List<AssociatedActivity> _associatedActivities;
170
171  /**
172   * 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.
173   */
174  @BoundAssembly(
175      formalName = "Subject of Assessment",
176      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.",
177      useName = "subject",
178      remarks = "The assessment subjects that the activity was performed against.",
179      maxOccurs = -1,
180      groupAs = @GroupAs(name = "subjects", inJson = JsonGroupAsBehavior.LIST)
181  )
182  private List<AssessmentSubject> _subjects;
183
184  /**
185   * 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.
186   */
187  @BoundAssembly(
188      formalName = "Responsible Role",
189      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.",
190      useName = "responsible-role",
191      remarks = "Identifies the person or organization responsible for performing a specific role related to the task.",
192      maxOccurs = -1,
193      groupAs = @GroupAs(name = "responsible-roles", inJson = JsonGroupAsBehavior.LIST)
194  )
195  private List<ResponsibleRole> _responsibleRoles;
196
197  /**
198   * Additional commentary about the containing object.
199   */
200  @BoundField(
201      formalName = "Remarks",
202      description = "Additional commentary about the containing object.",
203      useName = "remarks",
204      typeAdapter = MarkupMultilineAdapter.class
205  )
206  private MarkupMultiline _remarks;
207
208  /**
209   * Constructs a new {@code dev.metaschema.oscal.lib.model.Task} instance with no metadata.
210   */
211  public Task() {
212    this(null);
213  }
214
215  /**
216   * Constructs a new {@code dev.metaschema.oscal.lib.model.Task} instance with the specified metadata.
217   *
218   * @param data
219   *           the metaschema data, or {@code null} if none
220   */
221  public Task(IMetaschemaData data) {
222    this.__metaschemaData = data;
223  }
224
225  @Override
226  public IMetaschemaData getMetaschemaData() {
227    return __metaschemaData;
228  }
229
230  /**
231   * Get the "{@literal Task Universally Unique Identifier}".
232   *
233   * <p>
234   * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this task elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>task</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document.
235   *
236   * @return the uuid value
237   */
238  @NonNull
239  public UUID getUuid() {
240    return _uuid;
241  }
242
243  /**
244   * Set the "{@literal Task Universally Unique Identifier}".
245   *
246   * <p>
247   * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a>, <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique">globally unique</a> identifier with <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance">cross-instance</a> scope that can be used to reference this task elsewhere in <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#scope">this or other OSCAL instances</a>. The locally defined <em>UUID</em> of the <code>task</code> can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency">per-subject</a>, which means it should be consistently used to identify the same subject across revisions of the document.
248   *
249   * @param value
250   *           the uuid value to set
251   */
252  public void setUuid(@NonNull UUID value) {
253    _uuid = value;
254  }
255
256  /**
257   * Get the "{@literal Task Type}".
258   *
259   * <p>
260   * The type of task.
261   *
262   * @return the type value
263   */
264  @NonNull
265  public String getType() {
266    return _type;
267  }
268
269  /**
270   * Set the "{@literal Task Type}".
271   *
272   * <p>
273   * The type of task.
274   *
275   * @param value
276   *           the type value to set
277   */
278  public void setType(@NonNull String value) {
279    _type = value;
280  }
281
282  /**
283   * Get the "{@literal Task Title}".
284   *
285   * <p>
286   * The title for this task.
287   *
288   * @return the title value
289   */
290  @NonNull
291  public MarkupLine getTitle() {
292    return _title;
293  }
294
295  /**
296   * Set the "{@literal Task Title}".
297   *
298   * <p>
299   * The title for this task.
300   *
301   * @param value
302   *           the title value to set
303   */
304  public void setTitle(@NonNull MarkupLine value) {
305    _title = value;
306  }
307
308  /**
309   * Get the "{@literal Task Description}".
310   *
311   * <p>
312   * A human-readable description of this task.
313   *
314   * @return the description value, or {@code null} if not set
315   */
316  @Nullable
317  public MarkupMultiline getDescription() {
318    return _description;
319  }
320
321  /**
322   * Set the "{@literal Task Description}".
323   *
324   * <p>
325   * A human-readable description of this task.
326   *
327   * @param value
328   *           the description value to set, or {@code null} to clear
329   */
330  public void setDescription(@Nullable MarkupMultiline value) {
331    _description = value;
332  }
333
334  /**
335   * Get the "{@literal Property}".
336   *
337   * <p>
338   * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
339   *
340   * @return the prop value
341   */
342  @NonNull
343  public List<Property> getProps() {
344    if (_props == null) {
345      _props = new LinkedList<>();
346    }
347    return ObjectUtils.notNull(_props);
348  }
349
350  /**
351   * Set the "{@literal Property}".
352   *
353   * <p>
354   * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
355   *
356   * @param value
357   *           the prop value to set
358   */
359  public void setProps(@NonNull List<Property> value) {
360    _props = value;
361  }
362
363  /**
364   * Add a new {@link Property} item to the underlying collection.
365   * @param item the item to add
366   * @return {@code true}
367   */
368  public boolean addProp(Property item) {
369    Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
370    if (_props == null) {
371      _props = new LinkedList<>();
372    }
373    return _props.add(value);
374  }
375
376  /**
377   * Remove the first matching {@link Property} item from the underlying collection.
378   * @param item the item to remove
379   * @return {@code true} if the item was removed or {@code false} otherwise
380   */
381  public boolean removeProp(Property item) {
382    Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
383    return _props != null && _props.remove(value);
384  }
385
386  /**
387   * Get the "{@literal Link}".
388   *
389   * <p>
390   * A reference to a local or remote resource, that has a specific relation to the containing object.
391   *
392   * @return the link value
393   */
394  @NonNull
395  public List<Link> getLinks() {
396    if (_links == null) {
397      _links = new LinkedList<>();
398    }
399    return ObjectUtils.notNull(_links);
400  }
401
402  /**
403   * Set the "{@literal Link}".
404   *
405   * <p>
406   * A reference to a local or remote resource, that has a specific relation to the containing object.
407   *
408   * @param value
409   *           the link value to set
410   */
411  public void setLinks(@NonNull List<Link> value) {
412    _links = value;
413  }
414
415  /**
416   * Add a new {@link Link} item to the underlying collection.
417   * @param item the item to add
418   * @return {@code true}
419   */
420  public boolean addLink(Link item) {
421    Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
422    if (_links == null) {
423      _links = new LinkedList<>();
424    }
425    return _links.add(value);
426  }
427
428  /**
429   * Remove the first matching {@link Link} item from the underlying collection.
430   * @param item the item to remove
431   * @return {@code true} if the item was removed or {@code false} otherwise
432   */
433  public boolean removeLink(Link item) {
434    Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
435    return _links != null && _links.remove(value);
436  }
437
438  /**
439   * Get the "{@literal Event Timing}".
440   *
441   * <p>
442   * The timing under which the task is intended to occur.
443   *
444   * @return the timing value, or {@code null} if not set
445   */
446  @Nullable
447  public Timing getTiming() {
448    return _timing;
449  }
450
451  /**
452   * Set the "{@literal Event Timing}".
453   *
454   * <p>
455   * The timing under which the task is intended to occur.
456   *
457   * @param value
458   *           the timing value to set, or {@code null} to clear
459   */
460  public void setTiming(@Nullable Timing value) {
461    _timing = value;
462  }
463
464  /**
465   * Get the "{@literal Task Dependency}".
466   *
467   * <p>
468   * Used to indicate that a task is dependent on another task.
469   *
470   * @return the dependency value
471   */
472  @NonNull
473  public List<Dependency> getDependencies() {
474    if (_dependencies == null) {
475      _dependencies = new LinkedList<>();
476    }
477    return ObjectUtils.notNull(_dependencies);
478  }
479
480  /**
481   * Set the "{@literal Task Dependency}".
482   *
483   * <p>
484   * Used to indicate that a task is dependent on another task.
485   *
486   * @param value
487   *           the dependency value to set
488   */
489  public void setDependencies(@NonNull List<Dependency> value) {
490    _dependencies = value;
491  }
492
493  /**
494   * Add a new {@link Dependency} item to the underlying collection.
495   * @param item the item to add
496   * @return {@code true}
497   */
498  public boolean addDependency(Dependency item) {
499    Dependency value = ObjectUtils.requireNonNull(item,"item cannot be null");
500    if (_dependencies == null) {
501      _dependencies = new LinkedList<>();
502    }
503    return _dependencies.add(value);
504  }
505
506  /**
507   * Remove the first matching {@link Dependency} item from the underlying collection.
508   * @param item the item to remove
509   * @return {@code true} if the item was removed or {@code false} otherwise
510   */
511  public boolean removeDependency(Dependency item) {
512    Dependency value = ObjectUtils.requireNonNull(item,"item cannot be null");
513    return _dependencies != null && _dependencies.remove(value);
514  }
515
516  /**
517   * Get the "{@literal Task}".
518   *
519   * <p>
520   * Represents a scheduled event or milestone, which may be associated with a series of assessment actions.
521   *
522   * @return the task value
523   */
524  @NonNull
525  public List<Task> getTasks() {
526    if (_tasks == null) {
527      _tasks = new LinkedList<>();
528    }
529    return ObjectUtils.notNull(_tasks);
530  }
531
532  /**
533   * Set the "{@literal Task}".
534   *
535   * <p>
536   * Represents a scheduled event or milestone, which may be associated with a series of assessment actions.
537   *
538   * @param value
539   *           the task value to set
540   */
541  public void setTasks(@NonNull List<Task> value) {
542    _tasks = value;
543  }
544
545  /**
546   * Add a new {@link Task} item to the underlying collection.
547   * @param item the item to add
548   * @return {@code true}
549   */
550  public boolean addTask(Task item) {
551    Task value = ObjectUtils.requireNonNull(item,"item cannot be null");
552    if (_tasks == null) {
553      _tasks = new LinkedList<>();
554    }
555    return _tasks.add(value);
556  }
557
558  /**
559   * Remove the first matching {@link Task} item from the underlying collection.
560   * @param item the item to remove
561   * @return {@code true} if the item was removed or {@code false} otherwise
562   */
563  public boolean removeTask(Task item) {
564    Task value = ObjectUtils.requireNonNull(item,"item cannot be null");
565    return _tasks != null && _tasks.remove(value);
566  }
567
568  /**
569   * Get the "{@literal Associated Activity}".
570   *
571   * <p>
572   * Identifies an individual activity to be performed as part of a task.
573   *
574   * @return the associated-activity value
575   */
576  @NonNull
577  public List<AssociatedActivity> getAssociatedActivities() {
578    if (_associatedActivities == null) {
579      _associatedActivities = new LinkedList<>();
580    }
581    return ObjectUtils.notNull(_associatedActivities);
582  }
583
584  /**
585   * Set the "{@literal Associated Activity}".
586   *
587   * <p>
588   * Identifies an individual activity to be performed as part of a task.
589   *
590   * @param value
591   *           the associated-activity value to set
592   */
593  public void setAssociatedActivities(@NonNull List<AssociatedActivity> value) {
594    _associatedActivities = value;
595  }
596
597  /**
598   * Add a new {@link AssociatedActivity} item to the underlying collection.
599   * @param item the item to add
600   * @return {@code true}
601   */
602  public boolean addAssociatedActivity(AssociatedActivity item) {
603    AssociatedActivity value = ObjectUtils.requireNonNull(item,"item cannot be null");
604    if (_associatedActivities == null) {
605      _associatedActivities = new LinkedList<>();
606    }
607    return _associatedActivities.add(value);
608  }
609
610  /**
611   * Remove the first matching {@link AssociatedActivity} item from the underlying collection.
612   * @param item the item to remove
613   * @return {@code true} if the item was removed or {@code false} otherwise
614   */
615  public boolean removeAssociatedActivity(AssociatedActivity item) {
616    AssociatedActivity value = ObjectUtils.requireNonNull(item,"item cannot be null");
617    return _associatedActivities != null && _associatedActivities.remove(value);
618  }
619
620  /**
621   * Get the "{@literal Subject of Assessment}".
622   *
623   * <p>
624   * 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.
625   *
626   * @return the subject value
627   */
628  @NonNull
629  public List<AssessmentSubject> getSubjects() {
630    if (_subjects == null) {
631      _subjects = new LinkedList<>();
632    }
633    return ObjectUtils.notNull(_subjects);
634  }
635
636  /**
637   * Set the "{@literal Subject of Assessment}".
638   *
639   * <p>
640   * 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.
641   *
642   * @param value
643   *           the subject value to set
644   */
645  public void setSubjects(@NonNull List<AssessmentSubject> value) {
646    _subjects = value;
647  }
648
649  /**
650   * Add a new {@link AssessmentSubject} item to the underlying collection.
651   * @param item the item to add
652   * @return {@code true}
653   */
654  public boolean addSubject(AssessmentSubject item) {
655    AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
656    if (_subjects == null) {
657      _subjects = new LinkedList<>();
658    }
659    return _subjects.add(value);
660  }
661
662  /**
663   * Remove the first matching {@link AssessmentSubject} item from the underlying collection.
664   * @param item the item to remove
665   * @return {@code true} if the item was removed or {@code false} otherwise
666   */
667  public boolean removeSubject(AssessmentSubject item) {
668    AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
669    return _subjects != null && _subjects.remove(value);
670  }
671
672  /**
673   * Get the "{@literal Responsible Role}".
674   *
675   * <p>
676   * 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.
677   *
678   * @return the responsible-role value
679   */
680  @NonNull
681  public List<ResponsibleRole> getResponsibleRoles() {
682    if (_responsibleRoles == null) {
683      _responsibleRoles = new LinkedList<>();
684    }
685    return ObjectUtils.notNull(_responsibleRoles);
686  }
687
688  /**
689   * Set the "{@literal Responsible Role}".
690   *
691   * <p>
692   * 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.
693   *
694   * @param value
695   *           the responsible-role value to set
696   */
697  public void setResponsibleRoles(@NonNull List<ResponsibleRole> value) {
698    _responsibleRoles = value;
699  }
700
701  /**
702   * Add a new {@link ResponsibleRole} item to the underlying collection.
703   * @param item the item to add
704   * @return {@code true}
705   */
706  public boolean addResponsibleRole(ResponsibleRole item) {
707    ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
708    if (_responsibleRoles == null) {
709      _responsibleRoles = new LinkedList<>();
710    }
711    return _responsibleRoles.add(value);
712  }
713
714  /**
715   * Remove the first matching {@link ResponsibleRole} item from the underlying collection.
716   * @param item the item to remove
717   * @return {@code true} if the item was removed or {@code false} otherwise
718   */
719  public boolean removeResponsibleRole(ResponsibleRole item) {
720    ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
721    return _responsibleRoles != null && _responsibleRoles.remove(value);
722  }
723
724  /**
725   * Get the "{@literal Remarks}".
726   *
727   * <p>
728   * Additional commentary about the containing object.
729   *
730   * @return the remarks value, or {@code null} if not set
731   */
732  @Nullable
733  public MarkupMultiline getRemarks() {
734    return _remarks;
735  }
736
737  /**
738   * Set the "{@literal Remarks}".
739   *
740   * <p>
741   * Additional commentary about the containing object.
742   *
743   * @param value
744   *           the remarks value to set, or {@code null} to clear
745   */
746  public void setRemarks(@Nullable MarkupMultiline value) {
747    _remarks = value;
748  }
749
750  @Override
751  public String toString() {
752    return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
753  }
754
755  /**
756   * The timing under which the task is intended to occur.
757   */
758  @MetaschemaAssembly(
759      formalName = "Event Timing",
760      description = "The timing under which the task is intended to occur.",
761      name = "timing",
762      moduleClass = OscalAssessmentCommonModule.class
763  )
764  public static class Timing implements IBoundObject {
765    private final IMetaschemaData __metaschemaData;
766
767    /**
768     * The task is intended to occur on the specified date.
769     */
770    @BoundAssembly(
771        formalName = "On Date Condition",
772        description = "The task is intended to occur on the specified date.",
773        useName = "on-date",
774        minOccurs = 1
775    )
776    @BoundChoice(
777        choiceId = "choice-1"
778    )
779    private OnDate _onDate;
780
781    /**
782     * The task is intended to occur within the specified date range.
783     */
784    @BoundAssembly(
785        formalName = "On Date Range Condition",
786        description = "The task is intended to occur within the specified date range.",
787        useName = "within-date-range",
788        minOccurs = 1
789    )
790    @BoundChoice(
791        choiceId = "choice-1"
792    )
793    private WithinDateRange _withinDateRange;
794
795    /**
796     * The task is intended to occur at the specified frequency.
797     */
798    @BoundAssembly(
799        formalName = "Frequency Condition",
800        description = "The task is intended to occur at the specified frequency.",
801        useName = "at-frequency",
802        minOccurs = 1
803    )
804    @BoundChoice(
805        choiceId = "choice-1"
806    )
807    private AtFrequency _atFrequency;
808
809    /**
810     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing} instance with no metadata.
811     */
812    public Timing() {
813      this(null);
814    }
815
816    /**
817     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing} instance with the specified metadata.
818     *
819     * @param data
820     *           the metaschema data, or {@code null} if none
821     */
822    public Timing(IMetaschemaData data) {
823      this.__metaschemaData = data;
824    }
825
826    @Override
827    public IMetaschemaData getMetaschemaData() {
828      return __metaschemaData;
829    }
830
831    /**
832     * Get the "{@literal On Date Condition}".
833     *
834     * <p>
835     * The task is intended to occur on the specified date.
836     *
837     * @return the on-date value, or {@code null} if not set
838     */
839    @Nullable
840    public OnDate getOnDate() {
841      return _onDate;
842    }
843
844    /**
845     * Set the "{@literal On Date Condition}".
846     *
847     * <p>
848     * The task is intended to occur on the specified date.
849     *
850     * @param value
851     *           the on-date value to set, or {@code null} to clear
852     */
853    public void setOnDate(@Nullable OnDate value) {
854      _onDate = value;
855    }
856
857    /**
858     * Get the "{@literal On Date Range Condition}".
859     *
860     * <p>
861     * The task is intended to occur within the specified date range.
862     *
863     * @return the within-date-range value, or {@code null} if not set
864     */
865    @Nullable
866    public WithinDateRange getWithinDateRange() {
867      return _withinDateRange;
868    }
869
870    /**
871     * Set the "{@literal On Date Range Condition}".
872     *
873     * <p>
874     * The task is intended to occur within the specified date range.
875     *
876     * @param value
877     *           the within-date-range value to set, or {@code null} to clear
878     */
879    public void setWithinDateRange(@Nullable WithinDateRange value) {
880      _withinDateRange = value;
881    }
882
883    /**
884     * Get the "{@literal Frequency Condition}".
885     *
886     * <p>
887     * The task is intended to occur at the specified frequency.
888     *
889     * @return the at-frequency value, or {@code null} if not set
890     */
891    @Nullable
892    public AtFrequency getAtFrequency() {
893      return _atFrequency;
894    }
895
896    /**
897     * Set the "{@literal Frequency Condition}".
898     *
899     * <p>
900     * The task is intended to occur at the specified frequency.
901     *
902     * @param value
903     *           the at-frequency value to set, or {@code null} to clear
904     */
905    public void setAtFrequency(@Nullable AtFrequency value) {
906      _atFrequency = value;
907    }
908
909    @Override
910    public String toString() {
911      return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
912    }
913
914    /**
915     * The task is intended to occur on the specified date.
916     */
917    @MetaschemaAssembly(
918        formalName = "On Date Condition",
919        description = "The task is intended to occur on the specified date.",
920        name = "on-date",
921        moduleClass = OscalAssessmentCommonModule.class
922    )
923    public static class OnDate implements IBoundObject {
924      private final IMetaschemaData __metaschemaData;
925
926      /**
927       * The task must occur on the specified date.
928       */
929      @BoundFlag(
930          formalName = "On Date Condition",
931          description = "The task must occur on the specified date.",
932          name = "date",
933          required = true,
934          typeAdapter = DateTimeWithTZAdapter.class
935      )
936      private ZonedDateTime _date;
937
938      /**
939       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.OnDate} instance with no metadata.
940       */
941      public OnDate() {
942        this(null);
943      }
944
945      /**
946       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.OnDate} instance with the specified metadata.
947       *
948       * @param data
949       *           the metaschema data, or {@code null} if none
950       */
951      public OnDate(IMetaschemaData data) {
952        this.__metaschemaData = data;
953      }
954
955      @Override
956      public IMetaschemaData getMetaschemaData() {
957        return __metaschemaData;
958      }
959
960      /**
961       * Get the "{@literal On Date Condition}".
962       *
963       * <p>
964       * The task must occur on the specified date.
965       *
966       * @return the date value
967       */
968      @NonNull
969      public ZonedDateTime getDate() {
970        return _date;
971      }
972
973      /**
974       * Set the "{@literal On Date Condition}".
975       *
976       * <p>
977       * The task must occur on the specified date.
978       *
979       * @param value
980       *           the date value to set
981       */
982      public void setDate(@NonNull ZonedDateTime value) {
983        _date = value;
984      }
985
986      @Override
987      public String toString() {
988        return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
989      }
990    }
991
992    /**
993     * The task is intended to occur within the specified date range.
994     */
995    @MetaschemaAssembly(
996        formalName = "On Date Range Condition",
997        description = "The task is intended to occur within the specified date range.",
998        name = "within-date-range",
999        moduleClass = OscalAssessmentCommonModule.class
1000    )
1001    public static class WithinDateRange implements IBoundObject {
1002      private final IMetaschemaData __metaschemaData;
1003
1004      /**
1005       * The task must occur on or after the specified date.
1006       */
1007      @BoundFlag(
1008          formalName = "Start Date Condition",
1009          description = "The task must occur on or after the specified date.",
1010          name = "start",
1011          required = true,
1012          typeAdapter = DateTimeWithTZAdapter.class
1013      )
1014      private ZonedDateTime _start;
1015
1016      /**
1017       * The task must occur on or before the specified date.
1018       */
1019      @BoundFlag(
1020          formalName = "End Date Condition",
1021          description = "The task must occur on or before the specified date.",
1022          name = "end",
1023          required = true,
1024          typeAdapter = DateTimeWithTZAdapter.class
1025      )
1026      private ZonedDateTime _end;
1027
1028      /**
1029       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.WithinDateRange} instance with no metadata.
1030       */
1031      public WithinDateRange() {
1032        this(null);
1033      }
1034
1035      /**
1036       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.WithinDateRange} instance with the specified metadata.
1037       *
1038       * @param data
1039       *           the metaschema data, or {@code null} if none
1040       */
1041      public WithinDateRange(IMetaschemaData data) {
1042        this.__metaschemaData = data;
1043      }
1044
1045      @Override
1046      public IMetaschemaData getMetaschemaData() {
1047        return __metaschemaData;
1048      }
1049
1050      /**
1051       * Get the "{@literal Start Date Condition}".
1052       *
1053       * <p>
1054       * The task must occur on or after the specified date.
1055       *
1056       * @return the start value
1057       */
1058      @NonNull
1059      public ZonedDateTime getStart() {
1060        return _start;
1061      }
1062
1063      /**
1064       * Set the "{@literal Start Date Condition}".
1065       *
1066       * <p>
1067       * The task must occur on or after the specified date.
1068       *
1069       * @param value
1070       *           the start value to set
1071       */
1072      public void setStart(@NonNull ZonedDateTime value) {
1073        _start = value;
1074      }
1075
1076      /**
1077       * Get the "{@literal End Date Condition}".
1078       *
1079       * <p>
1080       * The task must occur on or before the specified date.
1081       *
1082       * @return the end value
1083       */
1084      @NonNull
1085      public ZonedDateTime getEnd() {
1086        return _end;
1087      }
1088
1089      /**
1090       * Set the "{@literal End Date Condition}".
1091       *
1092       * <p>
1093       * The task must occur on or before the specified date.
1094       *
1095       * @param value
1096       *           the end value to set
1097       */
1098      public void setEnd(@NonNull ZonedDateTime value) {
1099        _end = value;
1100      }
1101
1102      @Override
1103      public String toString() {
1104        return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
1105      }
1106    }
1107
1108    /**
1109     * The task is intended to occur at the specified frequency.
1110     */
1111    @MetaschemaAssembly(
1112        formalName = "Frequency Condition",
1113        description = "The task is intended to occur at the specified frequency.",
1114        name = "at-frequency",
1115        moduleClass = OscalAssessmentCommonModule.class
1116    )
1117    public static class AtFrequency implements IBoundObject {
1118      private final IMetaschemaData __metaschemaData;
1119
1120      /**
1121       * The task must occur after the specified period has elapsed.
1122       */
1123      @BoundFlag(
1124          formalName = "Period",
1125          description = "The task must occur after the specified period has elapsed.",
1126          name = "period",
1127          required = true,
1128          typeAdapter = PositiveIntegerAdapter.class
1129      )
1130      private BigInteger _period;
1131
1132      /**
1133       * The unit of time for the period.
1134       */
1135      @BoundFlag(
1136          formalName = "Time Unit",
1137          description = "The unit of time for the period.",
1138          name = "unit",
1139          required = true,
1140          typeAdapter = StringAdapter.class,
1141          valueConstraints = @ValueConstraints(allowedValues = @AllowedValues(id = "oscal-timing-unit-values", 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.")}))
1142      )
1143      private String _unit;
1144
1145      /**
1146       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.AtFrequency} instance with no metadata.
1147       */
1148      public AtFrequency() {
1149        this(null);
1150      }
1151
1152      /**
1153       * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Timing.AtFrequency} instance with the specified metadata.
1154       *
1155       * @param data
1156       *           the metaschema data, or {@code null} if none
1157       */
1158      public AtFrequency(IMetaschemaData data) {
1159        this.__metaschemaData = data;
1160      }
1161
1162      @Override
1163      public IMetaschemaData getMetaschemaData() {
1164        return __metaschemaData;
1165      }
1166
1167      /**
1168       * Get the "{@literal Period}".
1169       *
1170       * <p>
1171       * The task must occur after the specified period has elapsed.
1172       *
1173       * @return the period value
1174       */
1175      @NonNull
1176      public BigInteger getPeriod() {
1177        return _period;
1178      }
1179
1180      /**
1181       * Set the "{@literal Period}".
1182       *
1183       * <p>
1184       * The task must occur after the specified period has elapsed.
1185       *
1186       * @param value
1187       *           the period value to set
1188       */
1189      public void setPeriod(@NonNull BigInteger value) {
1190        _period = value;
1191      }
1192
1193      /**
1194       * Get the "{@literal Time Unit}".
1195       *
1196       * <p>
1197       * The unit of time for the period.
1198       *
1199       * @return the unit value
1200       */
1201      @NonNull
1202      public String getUnit() {
1203        return _unit;
1204      }
1205
1206      /**
1207       * Set the "{@literal Time Unit}".
1208       *
1209       * <p>
1210       * The unit of time for the period.
1211       *
1212       * @param value
1213       *           the unit value to set
1214       */
1215      public void setUnit(@NonNull String value) {
1216        _unit = value;
1217      }
1218
1219      @Override
1220      public String toString() {
1221        return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
1222      }
1223    }
1224  }
1225
1226  /**
1227   * Used to indicate that a task is dependent on another task.
1228   */
1229  @MetaschemaAssembly(
1230      formalName = "Task Dependency",
1231      description = "Used to indicate that a task is dependent on another task.",
1232      name = "dependency",
1233      moduleClass = OscalAssessmentCommonModule.class
1234  )
1235  public static class Dependency implements IBoundObject {
1236    private final IMetaschemaData __metaschemaData;
1237
1238    /**
1239     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to a unique task.
1240     */
1241    @BoundFlag(
1242        formalName = "Task Universally Unique Identifier Reference",
1243        description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to a unique task.",
1244        name = "task-uuid",
1245        required = true,
1246        typeAdapter = UuidAdapter.class
1247    )
1248    private UUID _taskUuid;
1249
1250    /**
1251     * Additional commentary about the containing object.
1252     */
1253    @BoundField(
1254        formalName = "Remarks",
1255        description = "Additional commentary about the containing object.",
1256        useName = "remarks",
1257        typeAdapter = MarkupMultilineAdapter.class
1258    )
1259    private MarkupMultiline _remarks;
1260
1261    /**
1262     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Dependency} instance with no metadata.
1263     */
1264    public Dependency() {
1265      this(null);
1266    }
1267
1268    /**
1269     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.Dependency} instance with the specified metadata.
1270     *
1271     * @param data
1272     *           the metaschema data, or {@code null} if none
1273     */
1274    public Dependency(IMetaschemaData data) {
1275      this.__metaschemaData = data;
1276    }
1277
1278    @Override
1279    public IMetaschemaData getMetaschemaData() {
1280      return __metaschemaData;
1281    }
1282
1283    /**
1284     * Get the "{@literal Task Universally Unique Identifier Reference}".
1285     *
1286     * <p>
1287     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to a unique task.
1288     *
1289     * @return the task-uuid value
1290     */
1291    @NonNull
1292    public UUID getTaskUuid() {
1293      return _taskUuid;
1294    }
1295
1296    /**
1297     * Set the "{@literal Task Universally Unique Identifier Reference}".
1298     *
1299     * <p>
1300     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to a unique task.
1301     *
1302     * @param value
1303     *           the task-uuid value to set
1304     */
1305    public void setTaskUuid(@NonNull UUID value) {
1306      _taskUuid = value;
1307    }
1308
1309    /**
1310     * Get the "{@literal Remarks}".
1311     *
1312     * <p>
1313     * Additional commentary about the containing object.
1314     *
1315     * @return the remarks value, or {@code null} if not set
1316     */
1317    @Nullable
1318    public MarkupMultiline getRemarks() {
1319      return _remarks;
1320    }
1321
1322    /**
1323     * Set the "{@literal Remarks}".
1324     *
1325     * <p>
1326     * Additional commentary about the containing object.
1327     *
1328     * @param value
1329     *           the remarks value to set, or {@code null} to clear
1330     */
1331    public void setRemarks(@Nullable MarkupMultiline value) {
1332      _remarks = value;
1333    }
1334
1335    @Override
1336    public String toString() {
1337      return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
1338    }
1339  }
1340
1341  /**
1342   * Identifies an individual activity to be performed as part of a task.
1343   */
1344  @MetaschemaAssembly(
1345      formalName = "Associated Activity",
1346      description = "Identifies an individual activity to be performed as part of a task.",
1347      name = "associated-activity",
1348      moduleClass = OscalAssessmentCommonModule.class,
1349      modelConstraints = @AssemblyConstraints(unique = @IsUnique(id = "oscal-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."))
1350  )
1351  public static class AssociatedActivity implements IBoundObject {
1352    private final IMetaschemaData __metaschemaData;
1353
1354    /**
1355     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to an activity defined in the list of activities.
1356     */
1357    @BoundFlag(
1358        formalName = "Activity Universally Unique Identifier Reference",
1359        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.",
1360        name = "activity-uuid",
1361        required = true,
1362        typeAdapter = UuidAdapter.class
1363    )
1364    private UUID _activityUuid;
1365
1366    /**
1367     * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
1368     */
1369    @BoundAssembly(
1370        formalName = "Property",
1371        description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
1372        useName = "prop",
1373        maxOccurs = -1,
1374        groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST)
1375    )
1376    private List<Property> _props;
1377
1378    /**
1379     * A reference to a local or remote resource, that has a specific relation to the containing object.
1380     */
1381    @BoundAssembly(
1382        formalName = "Link",
1383        description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
1384        useName = "link",
1385        maxOccurs = -1,
1386        groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST)
1387    )
1388    private List<Link> _links;
1389
1390    /**
1391     * 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.
1392     */
1393    @BoundAssembly(
1394        formalName = "Responsible Role",
1395        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.",
1396        useName = "responsible-role",
1397        remarks = "Identifies the person or organization responsible for performing a specific role defined by the activity.",
1398        maxOccurs = -1,
1399        groupAs = @GroupAs(name = "responsible-roles", inJson = JsonGroupAsBehavior.LIST)
1400    )
1401    private List<ResponsibleRole> _responsibleRoles;
1402
1403    /**
1404     * 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.
1405     */
1406    @BoundAssembly(
1407        formalName = "Subject of Assessment",
1408        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.",
1409        useName = "subject",
1410        minOccurs = 1,
1411        maxOccurs = -1,
1412        groupAs = @GroupAs(name = "subjects", inJson = JsonGroupAsBehavior.LIST)
1413    )
1414    private List<AssessmentSubject> _subjects;
1415
1416    /**
1417     * Additional commentary about the containing object.
1418     */
1419    @BoundField(
1420        formalName = "Remarks",
1421        description = "Additional commentary about the containing object.",
1422        useName = "remarks",
1423        typeAdapter = MarkupMultilineAdapter.class
1424    )
1425    private MarkupMultiline _remarks;
1426
1427    /**
1428     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.AssociatedActivity} instance with no metadata.
1429     */
1430    public AssociatedActivity() {
1431      this(null);
1432    }
1433
1434    /**
1435     * Constructs a new {@code dev.metaschema.oscal.lib.model.Task.AssociatedActivity} instance with the specified metadata.
1436     *
1437     * @param data
1438     *           the metaschema data, or {@code null} if none
1439     */
1440    public AssociatedActivity(IMetaschemaData data) {
1441      this.__metaschemaData = data;
1442    }
1443
1444    @Override
1445    public IMetaschemaData getMetaschemaData() {
1446      return __metaschemaData;
1447    }
1448
1449    /**
1450     * Get the "{@literal Activity Universally Unique Identifier Reference}".
1451     *
1452     * <p>
1453     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to an activity defined in the list of activities.
1454     *
1455     * @return the activity-uuid value
1456     */
1457    @NonNull
1458    public UUID getActivityUuid() {
1459      return _activityUuid;
1460    }
1461
1462    /**
1463     * Set the "{@literal Activity Universally Unique Identifier Reference}".
1464     *
1465     * <p>
1466     * A <a href="https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented">machine-oriented</a> identifier reference to an activity defined in the list of activities.
1467     *
1468     * @param value
1469     *           the activity-uuid value to set
1470     */
1471    public void setActivityUuid(@NonNull UUID value) {
1472      _activityUuid = value;
1473    }
1474
1475    /**
1476     * Get the "{@literal Property}".
1477     *
1478     * <p>
1479     * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
1480     *
1481     * @return the prop value
1482     */
1483    @NonNull
1484    public List<Property> getProps() {
1485      if (_props == null) {
1486        _props = new LinkedList<>();
1487      }
1488      return ObjectUtils.notNull(_props);
1489    }
1490
1491    /**
1492     * Set the "{@literal Property}".
1493     *
1494     * <p>
1495     * An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.
1496     *
1497     * @param value
1498     *           the prop value to set
1499     */
1500    public void setProps(@NonNull List<Property> value) {
1501      _props = value;
1502    }
1503
1504    /**
1505     * Add a new {@link Property} item to the underlying collection.
1506     * @param item the item to add
1507     * @return {@code true}
1508     */
1509    public boolean addProp(Property item) {
1510      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1511      if (_props == null) {
1512        _props = new LinkedList<>();
1513      }
1514      return _props.add(value);
1515    }
1516
1517    /**
1518     * Remove the first matching {@link Property} item from the underlying collection.
1519     * @param item the item to remove
1520     * @return {@code true} if the item was removed or {@code false} otherwise
1521     */
1522    public boolean removeProp(Property item) {
1523      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
1524      return _props != null && _props.remove(value);
1525    }
1526
1527    /**
1528     * Get the "{@literal Link}".
1529     *
1530     * <p>
1531     * A reference to a local or remote resource, that has a specific relation to the containing object.
1532     *
1533     * @return the link value
1534     */
1535    @NonNull
1536    public List<Link> getLinks() {
1537      if (_links == null) {
1538        _links = new LinkedList<>();
1539      }
1540      return ObjectUtils.notNull(_links);
1541    }
1542
1543    /**
1544     * Set the "{@literal Link}".
1545     *
1546     * <p>
1547     * A reference to a local or remote resource, that has a specific relation to the containing object.
1548     *
1549     * @param value
1550     *           the link value to set
1551     */
1552    public void setLinks(@NonNull List<Link> value) {
1553      _links = value;
1554    }
1555
1556    /**
1557     * Add a new {@link Link} item to the underlying collection.
1558     * @param item the item to add
1559     * @return {@code true}
1560     */
1561    public boolean addLink(Link item) {
1562      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1563      if (_links == null) {
1564        _links = new LinkedList<>();
1565      }
1566      return _links.add(value);
1567    }
1568
1569    /**
1570     * Remove the first matching {@link Link} item from the underlying collection.
1571     * @param item the item to remove
1572     * @return {@code true} if the item was removed or {@code false} otherwise
1573     */
1574    public boolean removeLink(Link item) {
1575      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
1576      return _links != null && _links.remove(value);
1577    }
1578
1579    /**
1580     * Get the "{@literal Responsible Role}".
1581     *
1582     * <p>
1583     * 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.
1584     *
1585     * @return the responsible-role value
1586     */
1587    @NonNull
1588    public List<ResponsibleRole> getResponsibleRoles() {
1589      if (_responsibleRoles == null) {
1590        _responsibleRoles = new LinkedList<>();
1591      }
1592      return ObjectUtils.notNull(_responsibleRoles);
1593    }
1594
1595    /**
1596     * Set the "{@literal Responsible Role}".
1597     *
1598     * <p>
1599     * 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.
1600     *
1601     * @param value
1602     *           the responsible-role value to set
1603     */
1604    public void setResponsibleRoles(@NonNull List<ResponsibleRole> value) {
1605      _responsibleRoles = value;
1606    }
1607
1608    /**
1609     * Add a new {@link ResponsibleRole} item to the underlying collection.
1610     * @param item the item to add
1611     * @return {@code true}
1612     */
1613    public boolean addResponsibleRole(ResponsibleRole item) {
1614      ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1615      if (_responsibleRoles == null) {
1616        _responsibleRoles = new LinkedList<>();
1617      }
1618      return _responsibleRoles.add(value);
1619    }
1620
1621    /**
1622     * Remove the first matching {@link ResponsibleRole} item from the underlying collection.
1623     * @param item the item to remove
1624     * @return {@code true} if the item was removed or {@code false} otherwise
1625     */
1626    public boolean removeResponsibleRole(ResponsibleRole item) {
1627      ResponsibleRole value = ObjectUtils.requireNonNull(item,"item cannot be null");
1628      return _responsibleRoles != null && _responsibleRoles.remove(value);
1629    }
1630
1631    /**
1632     * Get the "{@literal Subject of Assessment}".
1633     *
1634     * <p>
1635     * 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.
1636     *
1637     * @return the subject value
1638     */
1639    @NonNull
1640    public List<AssessmentSubject> getSubjects() {
1641      if (_subjects == null) {
1642        _subjects = new LinkedList<>();
1643      }
1644      return ObjectUtils.notNull(_subjects);
1645    }
1646
1647    /**
1648     * Set the "{@literal Subject of Assessment}".
1649     *
1650     * <p>
1651     * 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.
1652     *
1653     * @param value
1654     *           the subject value to set
1655     */
1656    public void setSubjects(@NonNull List<AssessmentSubject> value) {
1657      _subjects = value;
1658    }
1659
1660    /**
1661     * Add a new {@link AssessmentSubject} item to the underlying collection.
1662     * @param item the item to add
1663     * @return {@code true}
1664     */
1665    public boolean addSubject(AssessmentSubject item) {
1666      AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
1667      if (_subjects == null) {
1668        _subjects = new LinkedList<>();
1669      }
1670      return _subjects.add(value);
1671    }
1672
1673    /**
1674     * Remove the first matching {@link AssessmentSubject} item from the underlying collection.
1675     * @param item the item to remove
1676     * @return {@code true} if the item was removed or {@code false} otherwise
1677     */
1678    public boolean removeSubject(AssessmentSubject item) {
1679      AssessmentSubject value = ObjectUtils.requireNonNull(item,"item cannot be null");
1680      return _subjects != null && _subjects.remove(value);
1681    }
1682
1683    /**
1684     * Get the "{@literal Remarks}".
1685     *
1686     * <p>
1687     * Additional commentary about the containing object.
1688     *
1689     * @return the remarks value, or {@code null} if not set
1690     */
1691    @Nullable
1692    public MarkupMultiline getRemarks() {
1693      return _remarks;
1694    }
1695
1696    /**
1697     * Set the "{@literal Remarks}".
1698     *
1699     * <p>
1700     * Additional commentary about the containing object.
1701     *
1702     * @param value
1703     *           the remarks value to set, or {@code null} to clear
1704     */
1705    public void setRemarks(@Nullable MarkupMultiline value) {
1706      _remarks = value;
1707    }
1708
1709    @Override
1710    public String toString() {
1711      return ObjectUtils.notNull(new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString());
1712    }
1713  }
1714}