001package gov.nist.secauto.oscal.lib.model;
002
003import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultiline;
004import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultilineAdapter;
005import gov.nist.secauto.metaschema.core.model.IBoundObject;
006import gov.nist.secauto.metaschema.core.model.IMetaschemaData;
007import gov.nist.secauto.metaschema.core.model.JsonGroupAsBehavior;
008import gov.nist.secauto.metaschema.core.util.ObjectUtils;
009import gov.nist.secauto.metaschema.databind.model.annotations.BoundAssembly;
010import gov.nist.secauto.metaschema.databind.model.annotations.BoundField;
011import gov.nist.secauto.metaschema.databind.model.annotations.GroupAs;
012import gov.nist.secauto.metaschema.databind.model.annotations.MetaschemaAssembly;
013import java.lang.Override;
014import java.lang.String;
015import java.util.LinkedList;
016import java.util.List;
017import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
018import org.apache.commons.lang3.builder.ToStringStyle;
019
020/**
021 * Identifies the controls being assessed and their control objectives.
022 */
023@MetaschemaAssembly(
024    formalName = "Reviewed Controls and Control Objectives",
025    description = "Identifies the controls being assessed and their control objectives.",
026    name = "reviewed-controls",
027    moduleClass = OscalAssessmentCommonModule.class,
028    remarks = "In the context of an assessment plan, this construct is used to identify the controls and control objectives that are to be assessed. In the context of an assessment result, this construct is used to identify the actual controls and objectives that were assessed, reflecting any changes from the plan.\n"
029            + "\n"
030            + "When resolving the selection of controls and control objectives, the following processing will occur:\n"
031            + "\n"
032            + "1. Controls will be resolved by creating a set of controls based on the control-selections by first handling the includes, and then removing any excluded controls.\n"
033            + "\n"
034            + "2. The set of control objectives will be resolved from the set of controls that was generated in the previous step. The set of control objectives is based on the control-objective-selection by first handling the includes, and then removing any excluded control objectives."
035)
036public class ReviewedControls implements IBoundObject {
037  private final IMetaschemaData __metaschemaData;
038
039  @BoundField(
040      formalName = "Control Objective Description",
041      description = "A human-readable description of control objectives.",
042      useName = "description",
043      typeAdapter = MarkupMultilineAdapter.class
044  )
045  private MarkupMultiline _description;
046
047  @BoundAssembly(
048      formalName = "Property",
049      description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
050      useName = "prop",
051      maxOccurs = -1,
052      groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST)
053  )
054  private List<Property> _props;
055
056  @BoundAssembly(
057      formalName = "Link",
058      description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
059      useName = "link",
060      maxOccurs = -1,
061      groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST)
062  )
063  private List<Link> _links;
064
065  @BoundAssembly(
066      formalName = "Assessed Controls",
067      description = "Identifies the controls being assessed. In the assessment plan, these are the planned controls. In the assessment results, these are the actual controls, and reflects any changes from the plan.",
068      useName = "control-selection",
069      remarks = "The `include-all`, specifies all control identified in the **baseline** are included in the scope if this assessment, as specified by the `include-profile` statement within the linked SSP.\n"
070              + "\n"
071              + "Any control specified within `exclude-controls` must first be within a range of explicitly included controls, via `include-controls` or `include-all`.",
072      minOccurs = 1,
073      maxOccurs = -1,
074      groupAs = @GroupAs(name = "control-selections", inJson = JsonGroupAsBehavior.LIST)
075  )
076  private List<ControlSelection> _controlSelections;
077
078  @BoundAssembly(
079      formalName = "Referenced Control Objectives",
080      description = "Identifies the control objectives of the assessment. In the assessment plan, these are the planned objectives. In the assessment results, these are the assessed objectives, and reflects any changes from the plan.",
081      useName = "control-objective-selection",
082      remarks = "The `include-all` field, specifies all control objectives for any in-scope control. In-scope controls are defined in the `control-selection`.\n"
083              + "\n"
084              + "Any control objective specified within `exclude-controls` must first be within a range of explicitly included control objectives, via `include-objectives` or `include-all`.",
085      maxOccurs = -1,
086      groupAs = @GroupAs(name = "control-objective-selections", inJson = JsonGroupAsBehavior.LIST)
087  )
088  private List<ControlObjectiveSelection> _controlObjectiveSelections;
089
090  @BoundField(
091      formalName = "Remarks",
092      description = "Additional commentary about the containing object.",
093      useName = "remarks",
094      typeAdapter = MarkupMultilineAdapter.class
095  )
096  private MarkupMultiline _remarks;
097
098  public ReviewedControls() {
099    this(null);
100  }
101
102  public ReviewedControls(IMetaschemaData data) {
103    this.__metaschemaData = data;
104  }
105
106  @Override
107  public IMetaschemaData getMetaschemaData() {
108    return __metaschemaData;
109  }
110
111  public MarkupMultiline getDescription() {
112    return _description;
113  }
114
115  public void setDescription(MarkupMultiline value) {
116    _description = value;
117  }
118
119  public List<Property> getProps() {
120    return _props;
121  }
122
123  public void setProps(List<Property> value) {
124    _props = value;
125  }
126
127  /**
128   * Add a new {@link Property} item to the underlying collection.
129   * @param item the item to add
130   * @return {@code true}
131   */
132  public boolean addProp(Property item) {
133    Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
134    if (_props == null) {
135      _props = new LinkedList<>();
136    }
137    return _props.add(value);
138  }
139
140  /**
141   * Remove the first matching {@link Property} item from the underlying collection.
142   * @param item the item to remove
143   * @return {@code true} if the item was removed or {@code false} otherwise
144   */
145  public boolean removeProp(Property item) {
146    Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
147    return _props != null && _props.remove(value);
148  }
149
150  public List<Link> getLinks() {
151    return _links;
152  }
153
154  public void setLinks(List<Link> value) {
155    _links = value;
156  }
157
158  /**
159   * Add a new {@link Link} item to the underlying collection.
160   * @param item the item to add
161   * @return {@code true}
162   */
163  public boolean addLink(Link item) {
164    Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
165    if (_links == null) {
166      _links = new LinkedList<>();
167    }
168    return _links.add(value);
169  }
170
171  /**
172   * Remove the first matching {@link Link} item from the underlying collection.
173   * @param item the item to remove
174   * @return {@code true} if the item was removed or {@code false} otherwise
175   */
176  public boolean removeLink(Link item) {
177    Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
178    return _links != null && _links.remove(value);
179  }
180
181  public List<ControlSelection> getControlSelections() {
182    return _controlSelections;
183  }
184
185  public void setControlSelections(List<ControlSelection> value) {
186    _controlSelections = value;
187  }
188
189  /**
190   * Add a new {@link ControlSelection} item to the underlying collection.
191   * @param item the item to add
192   * @return {@code true}
193   */
194  public boolean addControlSelection(ControlSelection item) {
195    ControlSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
196    if (_controlSelections == null) {
197      _controlSelections = new LinkedList<>();
198    }
199    return _controlSelections.add(value);
200  }
201
202  /**
203   * Remove the first matching {@link ControlSelection} item from the underlying collection.
204   * @param item the item to remove
205   * @return {@code true} if the item was removed or {@code false} otherwise
206   */
207  public boolean removeControlSelection(ControlSelection item) {
208    ControlSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
209    return _controlSelections != null && _controlSelections.remove(value);
210  }
211
212  public List<ControlObjectiveSelection> getControlObjectiveSelections() {
213    return _controlObjectiveSelections;
214  }
215
216  public void setControlObjectiveSelections(List<ControlObjectiveSelection> value) {
217    _controlObjectiveSelections = value;
218  }
219
220  /**
221   * Add a new {@link ControlObjectiveSelection} item to the underlying collection.
222   * @param item the item to add
223   * @return {@code true}
224   */
225  public boolean addControlObjectiveSelection(ControlObjectiveSelection item) {
226    ControlObjectiveSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
227    if (_controlObjectiveSelections == null) {
228      _controlObjectiveSelections = new LinkedList<>();
229    }
230    return _controlObjectiveSelections.add(value);
231  }
232
233  /**
234   * Remove the first matching {@link ControlObjectiveSelection} item from the underlying collection.
235   * @param item the item to remove
236   * @return {@code true} if the item was removed or {@code false} otherwise
237   */
238  public boolean removeControlObjectiveSelection(ControlObjectiveSelection item) {
239    ControlObjectiveSelection value = ObjectUtils.requireNonNull(item,"item cannot be null");
240    return _controlObjectiveSelections != null && _controlObjectiveSelections.remove(value);
241  }
242
243  public MarkupMultiline getRemarks() {
244    return _remarks;
245  }
246
247  public void setRemarks(MarkupMultiline value) {
248    _remarks = value;
249  }
250
251  @Override
252  public String toString() {
253    return new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString();
254  }
255
256  /**
257   * Identifies the controls being assessed. In the assessment plan, these are the planned controls. In the assessment results, these are the actual controls, and reflects any changes from the plan.
258   */
259  @MetaschemaAssembly(
260      formalName = "Assessed Controls",
261      description = "Identifies the controls being assessed. In the assessment plan, these are the planned controls. In the assessment results, these are the actual controls, and reflects any changes from the plan.",
262      name = "control-selection",
263      moduleClass = OscalAssessmentCommonModule.class,
264      remarks = "The `include-all`, specifies all control identified in the **baseline** are included in the scope if this assessment, as specified by the `include-profile` statement within the linked SSP.\n"
265              + "\n"
266              + "Any control specified within `exclude-controls` must first be within a range of explicitly included controls, via `include-controls` or `include-all`."
267  )
268  public static class ControlSelection implements IBoundObject {
269    private final IMetaschemaData __metaschemaData;
270
271    @BoundField(
272        formalName = "Assessed Controls Description",
273        description = "A human-readable description of in-scope controls specified for assessment.",
274        useName = "description",
275        typeAdapter = MarkupMultilineAdapter.class
276    )
277    private MarkupMultiline _description;
278
279    @BoundAssembly(
280        formalName = "Property",
281        description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
282        useName = "prop",
283        maxOccurs = -1,
284        groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST)
285    )
286    private List<Property> _props;
287
288    @BoundAssembly(
289        formalName = "Link",
290        description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
291        useName = "link",
292        maxOccurs = -1,
293        groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST)
294    )
295    private List<Link> _links;
296
297    @BoundAssembly(
298        formalName = "Include All",
299        description = "Include all controls from the imported catalog or profile resources.",
300        useName = "include-all",
301        minOccurs = 1
302    )
303    private IncludeAll _includeAll;
304
305    @BoundAssembly(
306        formalName = "Select Control",
307        description = "Used to select a control for inclusion/exclusion based on one or more control identifiers. A set of statement identifiers can be used to target the inclusion/exclusion to only specific control statements providing more granularity over the specific statements that are within the asessment scope.",
308        useName = "include-control",
309        remarks = "Used to select a control for inclusion by the control's identifier. Specific control statements can be selected by their statement identifier.",
310        minOccurs = 1,
311        maxOccurs = -1,
312        groupAs = @GroupAs(name = "include-controls", inJson = JsonGroupAsBehavior.LIST)
313    )
314    private List<SelectControlById> _includeControls;
315
316    @BoundAssembly(
317        formalName = "Select Control",
318        description = "Used to select a control for inclusion/exclusion based on one or more control identifiers. A set of statement identifiers can be used to target the inclusion/exclusion to only specific control statements providing more granularity over the specific statements that are within the asessment scope.",
319        useName = "exclude-control",
320        remarks = "Used to select a control for exclusion by the control's identifier. Specific control statements can be excluded by their statement identifier.",
321        maxOccurs = -1,
322        groupAs = @GroupAs(name = "exclude-controls", inJson = JsonGroupAsBehavior.LIST)
323    )
324    private List<SelectControlById> _excludeControls;
325
326    @BoundField(
327        formalName = "Remarks",
328        description = "Additional commentary about the containing object.",
329        useName = "remarks",
330        typeAdapter = MarkupMultilineAdapter.class
331    )
332    private MarkupMultiline _remarks;
333
334    public ControlSelection() {
335      this(null);
336    }
337
338    public ControlSelection(IMetaschemaData data) {
339      this.__metaschemaData = data;
340    }
341
342    @Override
343    public IMetaschemaData getMetaschemaData() {
344      return __metaschemaData;
345    }
346
347    public MarkupMultiline getDescription() {
348      return _description;
349    }
350
351    public void setDescription(MarkupMultiline value) {
352      _description = value;
353    }
354
355    public List<Property> getProps() {
356      return _props;
357    }
358
359    public void setProps(List<Property> value) {
360      _props = value;
361    }
362
363    /**
364     * Add a new {@link Property} item to the underlying collection.
365     * @param item the item to add
366     * @return {@code true}
367     */
368    public boolean addProp(Property item) {
369      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
370      if (_props == null) {
371        _props = new LinkedList<>();
372      }
373      return _props.add(value);
374    }
375
376    /**
377     * Remove the first matching {@link Property} item from the underlying collection.
378     * @param item the item to remove
379     * @return {@code true} if the item was removed or {@code false} otherwise
380     */
381    public boolean removeProp(Property item) {
382      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
383      return _props != null && _props.remove(value);
384    }
385
386    public List<Link> getLinks() {
387      return _links;
388    }
389
390    public void setLinks(List<Link> value) {
391      _links = value;
392    }
393
394    /**
395     * Add a new {@link Link} item to the underlying collection.
396     * @param item the item to add
397     * @return {@code true}
398     */
399    public boolean addLink(Link item) {
400      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
401      if (_links == null) {
402        _links = new LinkedList<>();
403      }
404      return _links.add(value);
405    }
406
407    /**
408     * Remove the first matching {@link Link} item from the underlying collection.
409     * @param item the item to remove
410     * @return {@code true} if the item was removed or {@code false} otherwise
411     */
412    public boolean removeLink(Link item) {
413      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
414      return _links != null && _links.remove(value);
415    }
416
417    public IncludeAll getIncludeAll() {
418      return _includeAll;
419    }
420
421    public void setIncludeAll(IncludeAll value) {
422      _includeAll = value;
423    }
424
425    public List<SelectControlById> getIncludeControls() {
426      return _includeControls;
427    }
428
429    public void setIncludeControls(List<SelectControlById> value) {
430      _includeControls = value;
431    }
432
433    /**
434     * Add a new {@link SelectControlById} item to the underlying collection.
435     * @param item the item to add
436     * @return {@code true}
437     */
438    public boolean addIncludeControl(SelectControlById item) {
439      SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
440      if (_includeControls == null) {
441        _includeControls = new LinkedList<>();
442      }
443      return _includeControls.add(value);
444    }
445
446    /**
447     * Remove the first matching {@link SelectControlById} item from the underlying collection.
448     * @param item the item to remove
449     * @return {@code true} if the item was removed or {@code false} otherwise
450     */
451    public boolean removeIncludeControl(SelectControlById item) {
452      SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
453      return _includeControls != null && _includeControls.remove(value);
454    }
455
456    public List<SelectControlById> getExcludeControls() {
457      return _excludeControls;
458    }
459
460    public void setExcludeControls(List<SelectControlById> value) {
461      _excludeControls = value;
462    }
463
464    /**
465     * Add a new {@link SelectControlById} item to the underlying collection.
466     * @param item the item to add
467     * @return {@code true}
468     */
469    public boolean addExcludeControl(SelectControlById item) {
470      SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
471      if (_excludeControls == null) {
472        _excludeControls = new LinkedList<>();
473      }
474      return _excludeControls.add(value);
475    }
476
477    /**
478     * Remove the first matching {@link SelectControlById} item from the underlying collection.
479     * @param item the item to remove
480     * @return {@code true} if the item was removed or {@code false} otherwise
481     */
482    public boolean removeExcludeControl(SelectControlById item) {
483      SelectControlById value = ObjectUtils.requireNonNull(item,"item cannot be null");
484      return _excludeControls != null && _excludeControls.remove(value);
485    }
486
487    public MarkupMultiline getRemarks() {
488      return _remarks;
489    }
490
491    public void setRemarks(MarkupMultiline value) {
492      _remarks = value;
493    }
494
495    @Override
496    public String toString() {
497      return new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString();
498    }
499  }
500
501  /**
502   * Identifies the control objectives of the assessment. In the assessment plan, these are the planned objectives. In the assessment results, these are the assessed objectives, and reflects any changes from the plan.
503   */
504  @MetaschemaAssembly(
505      formalName = "Referenced Control Objectives",
506      description = "Identifies the control objectives of the assessment. In the assessment plan, these are the planned objectives. In the assessment results, these are the assessed objectives, and reflects any changes from the plan.",
507      name = "control-objective-selection",
508      moduleClass = OscalAssessmentCommonModule.class,
509      remarks = "The `include-all` field, specifies all control objectives for any in-scope control. In-scope controls are defined in the `control-selection`.\n"
510              + "\n"
511              + "Any control objective specified within `exclude-controls` must first be within a range of explicitly included control objectives, via `include-objectives` or `include-all`."
512  )
513  public static class ControlObjectiveSelection implements IBoundObject {
514    private final IMetaschemaData __metaschemaData;
515
516    @BoundField(
517        formalName = "Control Objectives Description",
518        description = "A human-readable description of this collection of control objectives.",
519        useName = "description",
520        typeAdapter = MarkupMultilineAdapter.class
521    )
522    private MarkupMultiline _description;
523
524    @BoundAssembly(
525        formalName = "Property",
526        description = "An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.",
527        useName = "prop",
528        maxOccurs = -1,
529        groupAs = @GroupAs(name = "props", inJson = JsonGroupAsBehavior.LIST)
530    )
531    private List<Property> _props;
532
533    @BoundAssembly(
534        formalName = "Link",
535        description = "A reference to a local or remote resource, that has a specific relation to the containing object.",
536        useName = "link",
537        maxOccurs = -1,
538        groupAs = @GroupAs(name = "links", inJson = JsonGroupAsBehavior.LIST)
539    )
540    private List<Link> _links;
541
542    @BoundAssembly(
543        formalName = "Include All",
544        description = "Include all controls from the imported catalog or profile resources.",
545        useName = "include-all",
546        minOccurs = 1
547    )
548    private IncludeAll _includeAll;
549
550    @BoundAssembly(
551        formalName = "Select Objective",
552        description = "Used to select a control objective for inclusion/exclusion based on the control objective's identifier.",
553        useName = "include-objective",
554        remarks = "Used to select a control objective for inclusion by the control objective's identifier.",
555        minOccurs = 1,
556        maxOccurs = -1,
557        groupAs = @GroupAs(name = "include-objectives", inJson = JsonGroupAsBehavior.LIST)
558    )
559    private List<SelectObjectiveById> _includeObjectives;
560
561    @BoundAssembly(
562        formalName = "Select Objective",
563        description = "Used to select a control objective for inclusion/exclusion based on the control objective's identifier.",
564        useName = "exclude-objective",
565        remarks = "Used to select a control objective for exclusion by the control objective's identifier.",
566        maxOccurs = -1,
567        groupAs = @GroupAs(name = "exclude-objectives", inJson = JsonGroupAsBehavior.LIST)
568    )
569    private List<SelectObjectiveById> _excludeObjectives;
570
571    @BoundField(
572        formalName = "Remarks",
573        description = "Additional commentary about the containing object.",
574        useName = "remarks",
575        typeAdapter = MarkupMultilineAdapter.class
576    )
577    private MarkupMultiline _remarks;
578
579    public ControlObjectiveSelection() {
580      this(null);
581    }
582
583    public ControlObjectiveSelection(IMetaschemaData data) {
584      this.__metaschemaData = data;
585    }
586
587    @Override
588    public IMetaschemaData getMetaschemaData() {
589      return __metaschemaData;
590    }
591
592    public MarkupMultiline getDescription() {
593      return _description;
594    }
595
596    public void setDescription(MarkupMultiline value) {
597      _description = value;
598    }
599
600    public List<Property> getProps() {
601      return _props;
602    }
603
604    public void setProps(List<Property> value) {
605      _props = value;
606    }
607
608    /**
609     * Add a new {@link Property} item to the underlying collection.
610     * @param item the item to add
611     * @return {@code true}
612     */
613    public boolean addProp(Property item) {
614      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
615      if (_props == null) {
616        _props = new LinkedList<>();
617      }
618      return _props.add(value);
619    }
620
621    /**
622     * Remove the first matching {@link Property} item from the underlying collection.
623     * @param item the item to remove
624     * @return {@code true} if the item was removed or {@code false} otherwise
625     */
626    public boolean removeProp(Property item) {
627      Property value = ObjectUtils.requireNonNull(item,"item cannot be null");
628      return _props != null && _props.remove(value);
629    }
630
631    public List<Link> getLinks() {
632      return _links;
633    }
634
635    public void setLinks(List<Link> value) {
636      _links = value;
637    }
638
639    /**
640     * Add a new {@link Link} item to the underlying collection.
641     * @param item the item to add
642     * @return {@code true}
643     */
644    public boolean addLink(Link item) {
645      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
646      if (_links == null) {
647        _links = new LinkedList<>();
648      }
649      return _links.add(value);
650    }
651
652    /**
653     * Remove the first matching {@link Link} item from the underlying collection.
654     * @param item the item to remove
655     * @return {@code true} if the item was removed or {@code false} otherwise
656     */
657    public boolean removeLink(Link item) {
658      Link value = ObjectUtils.requireNonNull(item,"item cannot be null");
659      return _links != null && _links.remove(value);
660    }
661
662    public IncludeAll getIncludeAll() {
663      return _includeAll;
664    }
665
666    public void setIncludeAll(IncludeAll value) {
667      _includeAll = value;
668    }
669
670    public List<SelectObjectiveById> getIncludeObjectives() {
671      return _includeObjectives;
672    }
673
674    public void setIncludeObjectives(List<SelectObjectiveById> value) {
675      _includeObjectives = value;
676    }
677
678    /**
679     * Add a new {@link SelectObjectiveById} item to the underlying collection.
680     * @param item the item to add
681     * @return {@code true}
682     */
683    public boolean addIncludeObjective(SelectObjectiveById item) {
684      SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
685      if (_includeObjectives == null) {
686        _includeObjectives = new LinkedList<>();
687      }
688      return _includeObjectives.add(value);
689    }
690
691    /**
692     * Remove the first matching {@link SelectObjectiveById} item from the underlying collection.
693     * @param item the item to remove
694     * @return {@code true} if the item was removed or {@code false} otherwise
695     */
696    public boolean removeIncludeObjective(SelectObjectiveById item) {
697      SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
698      return _includeObjectives != null && _includeObjectives.remove(value);
699    }
700
701    public List<SelectObjectiveById> getExcludeObjectives() {
702      return _excludeObjectives;
703    }
704
705    public void setExcludeObjectives(List<SelectObjectiveById> value) {
706      _excludeObjectives = value;
707    }
708
709    /**
710     * Add a new {@link SelectObjectiveById} item to the underlying collection.
711     * @param item the item to add
712     * @return {@code true}
713     */
714    public boolean addExcludeObjective(SelectObjectiveById item) {
715      SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
716      if (_excludeObjectives == null) {
717        _excludeObjectives = new LinkedList<>();
718      }
719      return _excludeObjectives.add(value);
720    }
721
722    /**
723     * Remove the first matching {@link SelectObjectiveById} item from the underlying collection.
724     * @param item the item to remove
725     * @return {@code true} if the item was removed or {@code false} otherwise
726     */
727    public boolean removeExcludeObjective(SelectObjectiveById item) {
728      SelectObjectiveById value = ObjectUtils.requireNonNull(item,"item cannot be null");
729      return _excludeObjectives != null && _excludeObjectives.remove(value);
730    }
731
732    public MarkupMultiline getRemarks() {
733      return _remarks;
734    }
735
736    public void setRemarks(MarkupMultiline value) {
737      _remarks = value;
738    }
739
740    @Override
741    public String toString() {
742      return new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).toString();
743    }
744  }
745}