View Javadoc
1   package gov.nist.secauto.oscal.lib.model;
2   
3   import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValue;
4   import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValues;
5   import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
6   import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
7   import gov.nist.secauto.metaschema.binding.model.annotations.BoundField;
8   import gov.nist.secauto.metaschema.binding.model.annotations.BoundFieldValue;
9   import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
10  import gov.nist.secauto.metaschema.binding.model.annotations.GroupAs;
11  import gov.nist.secauto.metaschema.binding.model.annotations.HasCardinality;
12  import gov.nist.secauto.metaschema.binding.model.annotations.IndexHasKey;
13  import gov.nist.secauto.metaschema.binding.model.annotations.IsUnique;
14  import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
15  import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
16  import gov.nist.secauto.metaschema.binding.model.annotations.ValueConstraints;
17  import gov.nist.secauto.metaschema.model.common.JsonGroupAsBehavior;
18  import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
19  import gov.nist.secauto.metaschema.model.common.datatype.adapter.UuidAdapter;
20  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultiline;
21  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupMultilineAdapter;
22  import gov.nist.secauto.metaschema.model.common.util.ObjectUtils;
23  import java.lang.Override;
24  import java.lang.String;
25  import java.util.LinkedList;
26  import java.util.List;
27  import java.util.UUID;
28  import org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
29  import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
30  
31  /**
32   * Defines how the referenced component implements a set of controls.
33   */
34  @MetaschemaAssembly(
35      formalName = "Component Control Implementation",
36      description = "Defines how the referenced component implements a set of controls.",
37      name = "by-component",
38      metaschema = OscalSspMetaschema.class,
39      remarks = "Use of `set-parameter` in this context, sets the parameter for the control referenced in the containing `implemented-requirement` applied to the referenced component. If the `by-component` is used as a child of a `statement`, then the parameter value also applies only in the context of the referenced statement. If the same parameter is also set in the `control-implementation` or a specific `implemented-requirement`, then this `by-component/set-parameter` value will override the other value(s) in the context of the referenced component, control, and statement (if parent)."
40  )
41  @ValueConstraints(
42      allowedValues = {
43          @AllowedValues(level = IConstraint.Level.ERROR, target = "link/@rel", allowOthers = true, values = @AllowedValue(value = "imported-from", description = "The hyperlink identifies a URI pointing to the `component` in a `component-definition` that originally described the `component` this component was based on.")),
44          @AllowedValues(level = IConstraint.Level.ERROR, target = ".//responsible-role/@role-id", allowOthers = true, values = {@AllowedValue(value = "asset-owner", description = "Accountable for ensuring the asset is managed in accordance with organizational policies and procedures."), @AllowedValue(value = "asset-administrator", description = "Responsible for administering a set of assets."), @AllowedValue(value = "security-operations", description = "Members of the security operations center (SOC)."), @AllowedValue(value = "network-operations", description = "Members of the network operations center (NOC)."), @AllowedValue(value = "incident-response", description = "Responsible for responding to an event that could lead to loss of, or disruption to, an organization's operations, services or functions."), @AllowedValue(value = "help-desk", description = "Responsible for providing information and support to users."), @AllowedValue(value = "configuration-management", description = "Responsible for the configuration management processes governing changes to the asset."), @AllowedValue(value = "maintainer", description = "Responsible for the creation and maintenance of a component."), @AllowedValue(value = "provider", description = "Organization responsible for providing the component, if this is different from the \"maintainer\" (e.g., a reseller).")}),
45          @AllowedValues(level = IConstraint.Level.ERROR, target = "link/@rel", allowOthers = true, values = @AllowedValue(value = "provided-by", description = "A reference to the UUID of a control or statement `by-component` object that is used as evidence of implementation."))
46      },
47      indexHasKey = @IndexHasKey(level = IConstraint.Level.ERROR, target = "link[@rel='provided-by']", indexName = "by-component-uuid", keyFields = @KeyField(target = "@href", pattern = "#(.*)"))
48  )
49  @AssemblyConstraints(
50      isUnique = @IsUnique(id = "unique-ssp-by-component-set-parameter", level = IConstraint.Level.ERROR, target = "set-parameter", keyFields = @KeyField(target = "@param-id"), remarks = "Since multiple `set-parameter` entries can be provided, each parameter must be set only once.")
51  )
52  public class ByComponent {
53    @BoundFlag(
54        formalName = "Component Universally Unique Identifier Reference",
55        description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented) identifier reference to the `component` that is implemeting a given control.",
56        useName = "component-uuid",
57        required = true,
58        typeAdapter = UuidAdapter.class
59    )
60    private UUID _componentUuid;
61  
62    @BoundFlag(
63        formalName = "By-Component Universally Unique Identifier",
64        description = "A [machine-oriented](https://pages.nist.gov/OSCAL/concepts/identifier-use/#machine-oriented), [globally unique](https://pages.nist.gov/OSCAL/concepts/identifier-use/#globally-unique) identifier with [cross-instance](https://pages.nist.gov/OSCAL/concepts/identifier-use/#cross-instance) scope that can be used to reference this by-component entry elsewhere in [this or other OSCAL instances](https://pages.nist.gov/OSCAL/concepts/identifier-use/#ssp-identifiers). The locally defined *UUID* of the `by-component` entry can be used to reference the data item locally or globally (e.g., in an imported OSCAL instance). This UUID should be assigned [per-subject](https://pages.nist.gov/OSCAL/concepts/identifier-use/#consistency), which means it should be consistently used to identify the same subject across revisions of the document.",
65        useName = "uuid",
66        required = true,
67        typeAdapter = UuidAdapter.class
68    )
69    private UUID _uuid;
70  
71    /**
72     * "An implementation statement that describes how a control or a control statement is implemented within the referenced system component."
73     */
74    @BoundField(
75        formalName = "Control Implementation Description",
76        description = "An implementation statement that describes how a control or a control statement is implemented within the referenced system component.",
77        useName = "description",
78        minOccurs = 1
79    )
80    @BoundFieldValue(
81        typeAdapter = MarkupMultilineAdapter.class
82    )
83    private MarkupMultiline _description;
84  
85    @BoundAssembly(
86        formalName = "Property",
87        description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
88        useName = "prop",
89        maxOccurs = -1
90    )
91    @GroupAs(
92        name = "props",
93        inJson = JsonGroupAsBehavior.LIST
94    )
95    private List<Property> _props;
96  
97    @BoundAssembly(
98        formalName = "Link",
99        description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
100       useName = "link",
101       maxOccurs = -1
102   )
103   @GroupAs(
104       name = "links",
105       inJson = JsonGroupAsBehavior.LIST
106   )
107   private List<Link> _links;
108 
109   @BoundAssembly(
110       formalName = "Set Parameter Value",
111       description = "Identifies the parameter that will be set by the enclosed value.",
112       useName = "set-parameter",
113       maxOccurs = -1
114   )
115   @GroupAs(
116       name = "set-parameters",
117       inJson = JsonGroupAsBehavior.LIST
118   )
119   private List<SetParameter> _setParameters;
120 
121   @BoundAssembly(
122       formalName = "Implementation Status",
123       description = "Indicates the degree to which the a given control is implemented.",
124       useName = "implementation-status",
125       remarks = "The `implementation-status` is used to qualify the `status` value to indicate the degree to which the control is implemented."
126   )
127   private ImplementationStatus _implementationStatus;
128 
129   /**
130    * "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 }