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