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