View Javadoc
1   package gov.nist.secauto.oscal.lib.model;
2   
3   import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValue;
4   import gov.nist.secauto.metaschema.binding.model.annotations.AllowedValues;
5   import gov.nist.secauto.metaschema.binding.model.annotations.AssemblyConstraints;
6   import gov.nist.secauto.metaschema.binding.model.annotations.BoundAssembly;
7   import gov.nist.secauto.metaschema.binding.model.annotations.BoundField;
8   import gov.nist.secauto.metaschema.binding.model.annotations.BoundFieldValue;
9   import gov.nist.secauto.metaschema.binding.model.annotations.BoundFlag;
10  import gov.nist.secauto.metaschema.binding.model.annotations.GroupAs;
11  import gov.nist.secauto.metaschema.binding.model.annotations.IsUnique;
12  import gov.nist.secauto.metaschema.binding.model.annotations.KeyField;
13  import gov.nist.secauto.metaschema.binding.model.annotations.MetaschemaAssembly;
14  import gov.nist.secauto.metaschema.binding.model.annotations.ValueConstraints;
15  import gov.nist.secauto.metaschema.model.common.JsonGroupAsBehavior;
16  import gov.nist.secauto.metaschema.model.common.constraint.IConstraint;
17  import gov.nist.secauto.metaschema.model.common.datatype.adapter.TokenAdapter;
18  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLine;
19  import gov.nist.secauto.metaschema.model.common.datatype.markup.MarkupLineAdapter;
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 org.apache.commons.lang3.builder.MultilineRecursiveToStringStyle;
28  import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
29  
30  /**
31   * Set parameters or amend controls in resolution.
32   */
33  @MetaschemaAssembly(
34      formalName = "Modify Controls",
35      description = "Set parameters or amend controls in resolution.",
36      name = "modify",
37      metaschema = OscalProfileMetaschema.class
38  )
39  @AssemblyConstraints(
40      isUnique = @IsUnique(id = "unique-profile-modify-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.")
41  )
42  public class Modify {
43    /**
44     * "A parameter setting, to be propagated to points of insertion."
45     */
46    @BoundAssembly(
47        formalName = "Parameter Setting",
48        description = "A parameter setting, to be propagated to points of insertion.",
49        useName = "set-parameter",
50        maxOccurs = -1
51    )
52    @GroupAs(
53        name = "set-parameters",
54        inJson = JsonGroupAsBehavior.LIST
55    )
56    private List<ProfileSetParameter> _setParameters;
57  
58    /**
59     * "Specifies changes to be made to an included control when a profile is resolved."
60     */
61    @BoundAssembly(
62        formalName = "Alteration",
63        description = "Specifies changes to be made to an included control when a profile is resolved.",
64        useName = "alter",
65        maxOccurs = -1,
66        remarks = "Use `@control-id` to indicate the scope of alteration.\n"
67                + "\n"
68                + "It is an error for two `alter` elements to apply to the same control. In practice, multiple alterations can be applied (together), but it creates confusion.\n"
69                + "\n"
70                + "At present, no provision is made for altering many controls at once (for example, to systematically remove properties or add global properties); extending this element to match multiple control IDs could provide for this."
71    )
72    @GroupAs(
73        name = "alters",
74        inJson = JsonGroupAsBehavior.LIST
75    )
76    private List<Alter> _alters;
77  
78    public Modify() {
79    }
80  
81    public List<ProfileSetParameter> getSetParameters() {
82      return _setParameters;
83    }
84  
85    public void setSetParameters(List<ProfileSetParameter> value) {
86      _setParameters = value;
87    }
88  
89    /**
90     * Add a new {@link ProfileSetParameter} item to the underlying collection.
91     * @param item the item to add
92     * @return {@code true}
93     */
94    public boolean addSetParameter(ProfileSetParameter item) {
95      ProfileSetParameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
96      if (_setParameters == null) {
97        _setParameters = new LinkedList<>();
98      }
99      return _setParameters.add(value);
100   }
101 
102   /**
103    * Remove the first matching {@link ProfileSetParameter} item from the underlying collection.
104    * @param item the item to remove
105    * @return {@code true} if the item was removed or {@code false} otherwise
106    */
107   public boolean removeSetParameter(ProfileSetParameter item) {
108     ProfileSetParameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
109     return _setParameters == null ? false : _setParameters.remove(value);
110   }
111 
112   public List<Alter> getAlters() {
113     return _alters;
114   }
115 
116   public void setAlters(List<Alter> value) {
117     _alters = value;
118   }
119 
120   /**
121    * Add a new {@link Alter} item to the underlying collection.
122    * @param item the item to add
123    * @return {@code true}
124    */
125   public boolean addAlter(Alter item) {
126     Alter value = ObjectUtils.requireNonNull(item,"item cannot be null");
127     if (_alters == null) {
128       _alters = new LinkedList<>();
129     }
130     return _alters.add(value);
131   }
132 
133   /**
134    * Remove the first matching {@link Alter} item from the underlying collection.
135    * @param item the item to remove
136    * @return {@code true} if the item was removed or {@code false} otherwise
137    */
138   public boolean removeAlter(Alter item) {
139     Alter value = ObjectUtils.requireNonNull(item,"item cannot be null");
140     return _alters == null ? false : _alters.remove(value);
141   }
142 
143   @Override
144   public String toString() {
145     return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
146   }
147 
148   /**
149    * Specifies changes to be made to an included control when a profile is resolved.
150    */
151   @MetaschemaAssembly(
152       formalName = "Alteration",
153       description = "Specifies changes to be made to an included control when a profile is resolved.",
154       name = "alter",
155       metaschema = OscalProfileMetaschema.class,
156       remarks = "Use `@control-id` to indicate the scope of alteration.\n"
157               + "\n"
158               + "It is an error for two `alter` elements to apply to the same control. In practice, multiple alterations can be applied (together), but it creates confusion.\n"
159               + "\n"
160               + "At present, no provision is made for altering many controls at once (for example, to systematically remove properties or add global properties); extending this element to match multiple control IDs could provide for this."
161   )
162   public static class Alter {
163     @BoundFlag(
164         formalName = "Control Identifier Reference",
165         description = "A reference to a control with a corresponding `id` value. When referencing an externally defined `control`, the `Control Identifier Reference` must be used in the context of the external / imported OSCAL instance (e.g., uri-reference).",
166         useName = "control-id",
167         required = true,
168         typeAdapter = TokenAdapter.class
169     )
170     private String _controlId;
171 
172     /**
173      * "Specifies objects to be removed from a control based on specific aspects of the object that must all match."
174      */
175     @BoundAssembly(
176         formalName = "Removal",
177         description = "Specifies objects to be removed from a control based on specific aspects of the object that must all match.",
178         useName = "remove",
179         maxOccurs = -1,
180         remarks = "Use `by-name`, `by-class`, `by-id` or `by-item-name` to indicate class tokens or ID reference, or the formal name, of the component to be removed or erased from a control, when a catalog is resolved. The control affected is indicated by the pointer on the removal's parent (containing) `alter` element.\n"
181                 + "\n"
182                 + "To change an element, use `remove` to remove the element, then `add` to add it back again with changes."
183     )
184     @GroupAs(
185         name = "removes",
186         inJson = JsonGroupAsBehavior.LIST
187     )
188     private List<Remove> _removes;
189 
190     /**
191      * "Specifies contents to be added into controls, in resolution."
192      */
193     @BoundAssembly(
194         formalName = "Addition",
195         description = "Specifies contents to be added into controls, in resolution.",
196         useName = "add",
197         maxOccurs = -1,
198         remarks = "When no `by-id` is given, the addition is inserted into the control targeted by the alteration at the start or end as indicated by `position`. Only `position` values of \"starting\" or \"ending\" are permitted when there is no `by-id`.\n"
199                 + "\n"
200                 + "`by-id`, when given, should indicate, by its ID, an element inside the control to serve as the anchor point for the addition. In this case, `position` value may be any of the permitted values."
201     )
202     @GroupAs(
203         name = "adds",
204         inJson = JsonGroupAsBehavior.LIST
205     )
206     private List<Add> _adds;
207 
208     public Alter() {
209     }
210 
211     public String getControlId() {
212       return _controlId;
213     }
214 
215     public void setControlId(String value) {
216       _controlId = value;
217     }
218 
219     public List<Remove> getRemoves() {
220       return _removes;
221     }
222 
223     public void setRemoves(List<Remove> value) {
224       _removes = value;
225     }
226 
227     /**
228      * Add a new {@link Remove} item to the underlying collection.
229      * @param item the item to add
230      * @return {@code true}
231      */
232     public boolean addRemove(Remove item) {
233       Remove value = ObjectUtils.requireNonNull(item,"item cannot be null");
234       if (_removes == null) {
235         _removes = new LinkedList<>();
236       }
237       return _removes.add(value);
238     }
239 
240     /**
241      * Remove the first matching {@link Remove} item from the underlying collection.
242      * @param item the item to remove
243      * @return {@code true} if the item was removed or {@code false} otherwise
244      */
245     public boolean removeRemove(Remove item) {
246       Remove value = ObjectUtils.requireNonNull(item,"item cannot be null");
247       return _removes == null ? false : _removes.remove(value);
248     }
249 
250     public List<Add> getAdds() {
251       return _adds;
252     }
253 
254     public void setAdds(List<Add> value) {
255       _adds = value;
256     }
257 
258     /**
259      * Add a new {@link Add} item to the underlying collection.
260      * @param item the item to add
261      * @return {@code true}
262      */
263     public boolean addAdd(Add item) {
264       Add value = ObjectUtils.requireNonNull(item,"item cannot be null");
265       if (_adds == null) {
266         _adds = new LinkedList<>();
267       }
268       return _adds.add(value);
269     }
270 
271     /**
272      * Remove the first matching {@link Add} item from the underlying collection.
273      * @param item the item to remove
274      * @return {@code true} if the item was removed or {@code false} otherwise
275      */
276     public boolean removeAdd(Add item) {
277       Add value = ObjectUtils.requireNonNull(item,"item cannot be null");
278       return _adds == null ? false : _adds.remove(value);
279     }
280 
281     @Override
282     public String toString() {
283       return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
284     }
285 
286     /**
287      * Specifies contents to be added into controls, in resolution.
288      */
289     @MetaschemaAssembly(
290         formalName = "Addition",
291         description = "Specifies contents to be added into controls, in resolution.",
292         name = "add",
293         metaschema = OscalProfileMetaschema.class,
294         remarks = "When no `by-id` is given, the addition is inserted into the control targeted by the alteration at the start or end as indicated by `position`. Only `position` values of \"starting\" or \"ending\" are permitted when there is no `by-id`.\n"
295                 + "\n"
296                 + "`by-id`, when given, should indicate, by its ID, an element inside the control to serve as the anchor point for the addition. In this case, `position` value may be any of the permitted values."
297     )
298     @ValueConstraints(
299         allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, target = "prop[has-oscal-namespace('http://csrc.nist.gov/ns/oscal')]/@name", values = {@AllowedValue(value = "label", description = "A human-readable label for the parent context, which may be rendered in place of the actual identifier for some use cases."), @AllowedValue(value = "sort-id", description = "An alternative identifier, whose value is easily sortable among other such values in the document."), @AllowedValue(value = "alt-identifier", description = "An alternate or aliased identifier for the parent context.")})
300     )
301     public static class Add {
302       @BoundFlag(
303           formalName = "Position",
304           description = "Where to add the new content with respect to the targeted element (beside it or inside it).",
305           useName = "position",
306           typeAdapter = TokenAdapter.class
307       )
308       @ValueConstraints(
309           allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, values = {@AllowedValue(value = "before", description = "Preceding the by-id target"), @AllowedValue(value = "after", description = "Following the by-id target"), @AllowedValue(value = "starting", description = "Inside the control or by-id target, at the start"), @AllowedValue(value = "ending", description = "Inside the control or by-id target, at the end")})
310       )
311       private String _position;
312 
313       @BoundFlag(
314           formalName = "Reference by ID",
315           description = "Target location of the addition.",
316           useName = "by-id",
317           typeAdapter = TokenAdapter.class
318       )
319       private String _byId;
320 
321       /**
322        * "A name given to the control, which may be used by a tool for display and navigation."
323        */
324       @BoundField(
325           formalName = "Title Change",
326           description = "A name given to the control, which may be used by a tool for display and navigation.",
327           useName = "title"
328       )
329       @BoundFieldValue(
330           typeAdapter = MarkupLineAdapter.class
331       )
332       private MarkupLine _title;
333 
334       @BoundAssembly(
335           formalName = "Parameter",
336           description = "Parameters provide a mechanism for the dynamic assignment of value(s) in a control.",
337           useName = "param",
338           maxOccurs = -1
339       )
340       @GroupAs(
341           name = "params",
342           inJson = JsonGroupAsBehavior.LIST
343       )
344       private List<Parameter> _params;
345 
346       @BoundAssembly(
347           formalName = "Property",
348           description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
349           useName = "prop",
350           maxOccurs = -1
351       )
352       @GroupAs(
353           name = "props",
354           inJson = JsonGroupAsBehavior.LIST
355       )
356       private List<Property> _props;
357 
358       @BoundAssembly(
359           formalName = "Link",
360           description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
361           useName = "link",
362           maxOccurs = -1
363       )
364       @GroupAs(
365           name = "links",
366           inJson = JsonGroupAsBehavior.LIST
367       )
368       private List<Link> _links;
369 
370       @BoundAssembly(
371           formalName = "Part",
372           description = "An annotated, markup-based textual element of a control's or catalog group's definition, or a child of another part.",
373           useName = "part",
374           maxOccurs = -1
375       )
376       @GroupAs(
377           name = "parts",
378           inJson = JsonGroupAsBehavior.LIST
379       )
380       private List<ControlPart> _parts;
381 
382       public Add() {
383       }
384 
385       public String getPosition() {
386         return _position;
387       }
388 
389       public void setPosition(String value) {
390         _position = value;
391       }
392 
393       public String getById() {
394         return _byId;
395       }
396 
397       public void setById(String value) {
398         _byId = value;
399       }
400 
401       public MarkupLine getTitle() {
402         return _title;
403       }
404 
405       public void setTitle(MarkupLine value) {
406         _title = value;
407       }
408 
409       public List<Parameter> getParams() {
410         return _params;
411       }
412 
413       public void setParams(List<Parameter> value) {
414         _params = value;
415       }
416 
417       /**
418        * Add a new {@link Parameter} item to the underlying collection.
419        * @param item the item to add
420        * @return {@code true}
421        */
422       public boolean addParam(Parameter item) {
423         Parameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
424         if (_params == null) {
425           _params = new LinkedList<>();
426         }
427         return _params.add(value);
428       }
429 
430       /**
431        * Remove the first matching {@link Parameter} item from the underlying collection.
432        * @param item the item to remove
433        * @return {@code true} if the item was removed or {@code false} otherwise
434        */
435       public boolean removeParam(Parameter item) {
436         Parameter value = ObjectUtils.requireNonNull(item,"item cannot be null");
437         return _params == null ? false : _params.remove(value);
438       }
439 
440       public List<Property> getProps() {
441         return _props;
442       }
443 
444       public void setProps(List<Property> value) {
445         _props = value;
446       }
447 
448       /**
449        * Add a new {@link Property} item to the underlying collection.
450        * @param item the item to add
451        * @return {@code true}
452        */
453       public boolean addProp(Property item) {
454         Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
455         if (_props == null) {
456           _props = new LinkedList<>();
457         }
458         return _props.add(value);
459       }
460 
461       /**
462        * Remove the first matching {@link Property} item from the underlying collection.
463        * @param item the item to remove
464        * @return {@code true} if the item was removed or {@code false} otherwise
465        */
466       public boolean removeProp(Property item) {
467         Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
468         return _props == null ? false : _props.remove(value);
469       }
470 
471       public List<Link> getLinks() {
472         return _links;
473       }
474 
475       public void setLinks(List<Link> value) {
476         _links = value;
477       }
478 
479       /**
480        * Add a new {@link Link} item to the underlying collection.
481        * @param item the item to add
482        * @return {@code true}
483        */
484       public boolean addLink(Link item) {
485         Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
486         if (_links == null) {
487           _links = new LinkedList<>();
488         }
489         return _links.add(value);
490       }
491 
492       /**
493        * Remove the first matching {@link Link} item from the underlying collection.
494        * @param item the item to remove
495        * @return {@code true} if the item was removed or {@code false} otherwise
496        */
497       public boolean removeLink(Link item) {
498         Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
499         return _links == null ? false : _links.remove(value);
500       }
501 
502       public List<ControlPart> getParts() {
503         return _parts;
504       }
505 
506       public void setParts(List<ControlPart> value) {
507         _parts = value;
508       }
509 
510       /**
511        * Add a new {@link ControlPart} item to the underlying collection.
512        * @param item the item to add
513        * @return {@code true}
514        */
515       public boolean addPart(ControlPart item) {
516         ControlPart value = ObjectUtils.requireNonNull(item,"item cannot be null");
517         if (_parts == null) {
518           _parts = new LinkedList<>();
519         }
520         return _parts.add(value);
521       }
522 
523       /**
524        * Remove the first matching {@link ControlPart} item from the underlying collection.
525        * @param item the item to remove
526        * @return {@code true} if the item was removed or {@code false} otherwise
527        */
528       public boolean removePart(ControlPart item) {
529         ControlPart value = ObjectUtils.requireNonNull(item,"item cannot be null");
530         return _parts == null ? false : _parts.remove(value);
531       }
532 
533       @Override
534       public String toString() {
535         return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
536       }
537     }
538 
539     /**
540      * Specifies objects to be removed from a control based on specific aspects of the object that must all match.
541      */
542     @MetaschemaAssembly(
543         formalName = "Removal",
544         description = "Specifies objects to be removed from a control based on specific aspects of the object that must all match.",
545         name = "remove",
546         metaschema = OscalProfileMetaschema.class,
547         remarks = "Use `by-name`, `by-class`, `by-id` or `by-item-name` to indicate class tokens or ID reference, or the formal name, of the component to be removed or erased from a control, when a catalog is resolved. The control affected is indicated by the pointer on the removal's parent (containing) `alter` element.\n"
548                 + "\n"
549                 + "To change an element, use `remove` to remove the element, then `add` to add it back again with changes."
550     )
551     public static class Remove {
552       @BoundFlag(
553           formalName = "Reference by (assigned) name",
554           description = "Identify items remove by matching their assigned name.",
555           useName = "by-name",
556           typeAdapter = TokenAdapter.class
557       )
558       private String _byName;
559 
560       @BoundFlag(
561           formalName = "Reference by class",
562           description = "Identify items to remove by matching their `class`.",
563           useName = "by-class",
564           typeAdapter = TokenAdapter.class
565       )
566       private String _byClass;
567 
568       @BoundFlag(
569           formalName = "Reference by ID",
570           description = "Identify items to remove indicated by their `id`.",
571           useName = "by-id",
572           typeAdapter = TokenAdapter.class
573       )
574       private String _byId;
575 
576       @BoundFlag(
577           formalName = "Item Name Reference",
578           description = "Identify items to remove by the name of the item's information object name, e.g. `title` or `prop`.",
579           useName = "by-item-name",
580           typeAdapter = TokenAdapter.class
581       )
582       @ValueConstraints(
583           allowedValues = @AllowedValues(level = IConstraint.Level.ERROR, values = {@AllowedValue(value = "param", description = "A descendant parameter and all of its descendants."), @AllowedValue(value = "prop", description = "A descendant property and all of its descendants."), @AllowedValue(value = "link", description = "A descendant link and all of its descendants."), @AllowedValue(value = "part", description = "A descendant parameter and all of its descendants."), @AllowedValue(value = "mapping", description = "A descendant mapping and all of its descendants."), @AllowedValue(value = "map", description = "A descendant mapping entry (map) and all of its descendants.")})
584       )
585       private String _byItemName;
586 
587       @BoundFlag(
588           formalName = "Item Namespace Reference",
589           description = "Identify items to remove by the item's `ns`, which is the namespace associated with a `part`, or `prop`.",
590           useName = "by-ns",
591           typeAdapter = TokenAdapter.class
592       )
593       private String _byNs;
594 
595       public Remove() {
596       }
597 
598       public String getByName() {
599         return _byName;
600       }
601 
602       public void setByName(String value) {
603         _byName = value;
604       }
605 
606       public String getByClass() {
607         return _byClass;
608       }
609 
610       public void setByClass(String value) {
611         _byClass = value;
612       }
613 
614       public String getById() {
615         return _byId;
616       }
617 
618       public void setById(String value) {
619         _byId = value;
620       }
621 
622       public String getByItemName() {
623         return _byItemName;
624       }
625 
626       public void setByItemName(String value) {
627         _byItemName = value;
628       }
629 
630       public String getByNs() {
631         return _byNs;
632       }
633 
634       public void setByNs(String value) {
635         _byNs = value;
636       }
637 
638       @Override
639       public String toString() {
640         return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
641       }
642     }
643   }
644 
645   /**
646    * A parameter setting, to be propagated to points of insertion.
647    */
648   @MetaschemaAssembly(
649       formalName = "Parameter Setting",
650       description = "A parameter setting, to be propagated to points of insertion.",
651       name = "set-parameter",
652       metaschema = OscalProfileMetaschema.class
653   )
654   public static class ProfileSetParameter {
655     @BoundFlag(
656         formalName = "Parameter ID",
657         description = "An identifier for the parameter.",
658         useName = "param-id",
659         required = true,
660         typeAdapter = TokenAdapter.class
661     )
662     private String _paramId;
663 
664     @BoundFlag(
665         formalName = "Parameter Class",
666         description = "A textual label that provides a characterization of the parameter.",
667         useName = "class",
668         typeAdapter = TokenAdapter.class,
669         remarks = "A `class` can be used in validation rules to express extra constraints over named items of a specific `class` value."
670     )
671     private String _clazz;
672 
673     @BoundFlag(
674         formalName = "Depends On",
675         description = "\\*\\*(deprecated)\\*\\* Another parameter invoking this one. This construct has been deprecated and should not be used.",
676         useName = "depends-on",
677         typeAdapter = TokenAdapter.class
678     )
679     private String _dependsOn;
680 
681     @BoundAssembly(
682         formalName = "Property",
683         description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
684         useName = "prop",
685         maxOccurs = -1
686     )
687     @GroupAs(
688         name = "props",
689         inJson = JsonGroupAsBehavior.LIST
690     )
691     private List<Property> _props;
692 
693     @BoundAssembly(
694         formalName = "Link",
695         description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
696         useName = "link",
697         maxOccurs = -1
698     )
699     @GroupAs(
700         name = "links",
701         inJson = JsonGroupAsBehavior.LIST
702     )
703     private List<Link> _links;
704 
705     /**
706      * "A short, placeholder name for the parameter, which can be used as a substitute for a <code>value</code> if no value is assigned."
707      */
708     @BoundField(
709         formalName = "Parameter Label",
710         description = "A short, placeholder name for the parameter, which can be used as a substitute for a `value` if no value is assigned.",
711         useName = "label",
712         remarks = "The label value should be suitable for inline display in a rendered catalog."
713     )
714     @BoundFieldValue(
715         typeAdapter = MarkupLineAdapter.class
716     )
717     private MarkupLine _label;
718 
719     /**
720      * "Describes the purpose and use of a parameter."
721      */
722     @BoundField(
723         formalName = "Parameter Usage Description",
724         description = "Describes the purpose and use of a parameter.",
725         useName = "usage"
726     )
727     @BoundFieldValue(
728         typeAdapter = MarkupMultilineAdapter.class
729     )
730     private MarkupMultiline _usage;
731 
732     @BoundAssembly(
733         formalName = "Constraint",
734         description = "A formal or informal expression of a constraint or test.",
735         useName = "constraint",
736         maxOccurs = -1
737     )
738     @GroupAs(
739         name = "constraints",
740         inJson = JsonGroupAsBehavior.LIST
741     )
742     private List<ParameterConstraint> _constraints;
743 
744     @BoundAssembly(
745         formalName = "Guideline",
746         description = "A prose statement that provides a recommendation for the use of a parameter.",
747         useName = "guideline",
748         maxOccurs = -1
749     )
750     @GroupAs(
751         name = "guidelines",
752         inJson = JsonGroupAsBehavior.LIST
753     )
754     private List<ParameterGuideline> _guidelines;
755 
756     @BoundField(
757         formalName = "Parameter Value",
758         description = "A parameter value or set of values.",
759         useName = "value",
760         maxOccurs = -1,
761         remarks = "Used to (re)define a parameter value."
762     )
763     @GroupAs(
764         name = "values",
765         inJson = JsonGroupAsBehavior.LIST
766     )
767     private List<String> _values;
768 
769     @BoundAssembly(
770         formalName = "Selection",
771         description = "Presenting a choice among alternatives.",
772         useName = "select"
773     )
774     private ParameterSelection _select;
775 
776     public ProfileSetParameter() {
777     }
778 
779     public String getParamId() {
780       return _paramId;
781     }
782 
783     public void setParamId(String value) {
784       _paramId = value;
785     }
786 
787     public String getClazz() {
788       return _clazz;
789     }
790 
791     public void setClazz(String value) {
792       _clazz = value;
793     }
794 
795     public String getDependsOn() {
796       return _dependsOn;
797     }
798 
799     public void setDependsOn(String value) {
800       _dependsOn = value;
801     }
802 
803     public List<Property> getProps() {
804       return _props;
805     }
806 
807     public void setProps(List<Property> value) {
808       _props = value;
809     }
810 
811     /**
812      * Add a new {@link Property} item to the underlying collection.
813      * @param item the item to add
814      * @return {@code true}
815      */
816     public boolean addProp(Property item) {
817       Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
818       if (_props == null) {
819         _props = new LinkedList<>();
820       }
821       return _props.add(value);
822     }
823 
824     /**
825      * Remove the first matching {@link Property} item from the underlying collection.
826      * @param item the item to remove
827      * @return {@code true} if the item was removed or {@code false} otherwise
828      */
829     public boolean removeProp(Property item) {
830       Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
831       return _props == null ? false : _props.remove(value);
832     }
833 
834     public List<Link> getLinks() {
835       return _links;
836     }
837 
838     public void setLinks(List<Link> value) {
839       _links = value;
840     }
841 
842     /**
843      * Add a new {@link Link} item to the underlying collection.
844      * @param item the item to add
845      * @return {@code true}
846      */
847     public boolean addLink(Link item) {
848       Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
849       if (_links == null) {
850         _links = new LinkedList<>();
851       }
852       return _links.add(value);
853     }
854 
855     /**
856      * Remove the first matching {@link Link} item from the underlying collection.
857      * @param item the item to remove
858      * @return {@code true} if the item was removed or {@code false} otherwise
859      */
860     public boolean removeLink(Link item) {
861       Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
862       return _links == null ? false : _links.remove(value);
863     }
864 
865     public MarkupLine getLabel() {
866       return _label;
867     }
868 
869     public void setLabel(MarkupLine value) {
870       _label = value;
871     }
872 
873     public MarkupMultiline getUsage() {
874       return _usage;
875     }
876 
877     public void setUsage(MarkupMultiline value) {
878       _usage = value;
879     }
880 
881     public List<ParameterConstraint> getConstraints() {
882       return _constraints;
883     }
884 
885     public void setConstraints(List<ParameterConstraint> value) {
886       _constraints = value;
887     }
888 
889     /**
890      * Add a new {@link ParameterConstraint} item to the underlying collection.
891      * @param item the item to add
892      * @return {@code true}
893      */
894     public boolean addConstraint(ParameterConstraint item) {
895       ParameterConstraint value = ObjectUtils.requireNonNull(item,"item cannot be null");
896       if (_constraints == null) {
897         _constraints = new LinkedList<>();
898       }
899       return _constraints.add(value);
900     }
901 
902     /**
903      * Remove the first matching {@link ParameterConstraint} item from the underlying collection.
904      * @param item the item to remove
905      * @return {@code true} if the item was removed or {@code false} otherwise
906      */
907     public boolean removeConstraint(ParameterConstraint item) {
908       ParameterConstraint value = ObjectUtils.requireNonNull(item,"item cannot be null");
909       return _constraints == null ? false : _constraints.remove(value);
910     }
911 
912     public List<ParameterGuideline> getGuidelines() {
913       return _guidelines;
914     }
915 
916     public void setGuidelines(List<ParameterGuideline> value) {
917       _guidelines = value;
918     }
919 
920     /**
921      * Add a new {@link ParameterGuideline} item to the underlying collection.
922      * @param item the item to add
923      * @return {@code true}
924      */
925     public boolean addGuideline(ParameterGuideline item) {
926       ParameterGuideline value = ObjectUtils.requireNonNull(item,"item cannot be null");
927       if (_guidelines == null) {
928         _guidelines = new LinkedList<>();
929       }
930       return _guidelines.add(value);
931     }
932 
933     /**
934      * Remove the first matching {@link ParameterGuideline} item from the underlying collection.
935      * @param item the item to remove
936      * @return {@code true} if the item was removed or {@code false} otherwise
937      */
938     public boolean removeGuideline(ParameterGuideline item) {
939       ParameterGuideline value = ObjectUtils.requireNonNull(item,"item cannot be null");
940       return _guidelines == null ? false : _guidelines.remove(value);
941     }
942 
943     public List<String> getValues() {
944       return _values;
945     }
946 
947     public void setValues(List<String> value) {
948       _values = value;
949     }
950 
951     /**
952      * Add a new {@link String} item to the underlying collection.
953      * @param item the item to add
954      * @return {@code true}
955      */
956     public boolean addValue(String item) {
957       String value = ObjectUtils.requireNonNull(item,"item cannot be null");
958       if (_values == null) {
959         _values = new LinkedList<>();
960       }
961       return _values.add(value);
962     }
963 
964     /**
965      * Remove the first matching {@link String} item from the underlying collection.
966      * @param item the item to remove
967      * @return {@code true} if the item was removed or {@code false} otherwise
968      */
969     public boolean removeValue(String item) {
970       String value = ObjectUtils.requireNonNull(item,"item cannot be null");
971       return _values == null ? false : _values.remove(value);
972     }
973 
974     public ParameterSelection getSelect() {
975       return _select;
976     }
977 
978     public void setSelect(ParameterSelection value) {
979       _select = value;
980     }
981 
982     @Override
983     public String toString() {
984       return new ReflectionToStringBuilder(this, MultilineRecursiveToStringStyle.MULTI_LINE_STYLE).toString();
985     }
986   }
987 }