Class Control

All Implemented Interfaces:
dev.metaschema.core.model.IBoundObject, dev.metaschema.databind.io.IDeserializationHandler, IControl, IControlContainer

@MetaschemaAssembly(formalName="Control", description="A [structured object](https://pages.nist.gov/OSCAL/concepts/terminology/#control) representing a requirement or guideline, which when implemented will reduce an aspect of risk related to an information system and its information.", name="control", moduleClass=OscalCatalogModule.class, remarks="Each security or privacy control within the catalog is defined by a distinct control instance. Controls may be as complex or as simple as a catalog defines them. They may be decomposed or further specified into child `control` objects, for example to represent control enhancements or specific breakouts of control functionality, to be maintained as discrete requirements. Controls may also contain structured parts (using `part`) and they may be grouped together in families or classes with `group`.\n\nControl structures in OSCAL will also exhibit regularities and rules that are not codified in OSCAL but in its applications or domains of application. For example, for catalogs describing controls as defined by NIST SP 800-53, a control must have a part with the name \"statement\", which represents the textual narrative of the control. This \"statement\" part must occur only once, but may have nested parts to allow for multiple paragraphs or sections of text. This organization supports addressability of this data content as long as, and only insofar as, it is consistently implemented across the control set. As given with these model definitions, constraints defined and assigned here can aid in ensuring this regularity; but other such constraints and other useful patterns of use remain to be discovered and described.", valueConstraints=@ValueConstraints(allowedValues={@AllowedValues(id="oscal-control-prop-name",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."),@AllowedValue(value="status",description="The status of a `control`. For example, a value of \'withdrawn\' can indicate that the `control` has been withdrawn and should no longer be used.")}),@AllowedValues(id="oscal-control-prop-status-value",level=ERROR,target="prop[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=\'status\']/@value",values={@AllowedValue(value="withdrawn",description="The control is no longer used."),@AllowedValue(value="Withdrawn",description="\\*\\*(deprecated)\\*\\*\\* Use \'withdrawn\' instead.",deprecatedVersion="1.0.0")}),@AllowedValues(id="oscal-control-link-rel-type",level=ERROR,target="link/@rel",allowOthers=true,values={@AllowedValue(value="reference",description="The link cites an external resource related to this control."),@AllowedValue(value="related",description="The link identifies another control with bearing to this control."),@AllowedValue(value="required",description="The link identifies another control that must be present if this control is present."),@AllowedValue(value="incorporated-into",description="The link identifies other control content where this control content is now addressed."),@AllowedValue(value="moved-to",description="The containing control definition was moved to the referenced control.")}),@AllowedValues(id="oscal-control-part-name",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\')]/@name",values={@AllowedValue(value="overview",description="An introduction to a control or a group of controls."),@AllowedValue(value="statement",description="A set of implementation requirements or recommendations."),@AllowedValue(value="guidance",description="Additional information to consider when selecting, implementing, assessing, and monitoring a control."),@AllowedValue(value="example",description="An example of an implemented requirement or control statement."),@AllowedValue(value="assessment",description="\\*\\*(deprecated)\\*\\* Use \'assessment-method\' instead.",deprecatedVersion="1.0.1"),@AllowedValue(value="assessment-method",description="The part describes a method-based assessment over a set of assessment objects.")}),@AllowedValues(id="oscal-control-statement-part-subpart-name",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=\'statement\']//part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\')]/@name",values=@AllowedValue(value="item",description="An individual item within a control statement."),remarks="Nested statement parts are \"item\" parts."),@AllowedValues(id="oscal-control-statement-part-name",level=ERROR,target=".//part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\')]/@name",values={@AllowedValue(value="objective",description="\\*\\*(deprecated)\\*\\* Use \'assessment-objective\' instead.",deprecatedVersion="1.0.1"),@AllowedValue(value="assessment-objective",description="The part describes a set of assessment objectives.")},remarks="Objectives can be nested."),@AllowedValues(id="oscal-control-objective-part-subpart-name",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=(\'assessment\',\'assessment-method\')]/part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\')]/@name",values={@AllowedValue(value="objects",description="\\*\\*(deprecated)\\*\\* Use \'assessment-objects\' instead.",deprecatedVersion="1.0.1"),@AllowedValue(value="assessment-objects",description="Provides a listing of assessment objects.")},remarks="Assessment objects appear on assessment methods."),@AllowedValues(id="oscal-control-statement-part-prop-name",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=(\'assessment\',\'assessment-method\')]/prop[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\')]/@name",values=@AllowedValue(value="method",description="\\*\\*(deprecated)\\*\\* Use \'method\' in the \'http://csrc.nist.gov/ns/rmf\' namespace. The assessment method to use. This typically appears on parts with the name \"assessment-method\".",deprecatedVersion="1.0.1")),@AllowedValues(id="oscal-control-statement-part-rmf-prop-name",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=(\'assessment\',\'assessment-method\')]/prop[has-oscal-namespace(\'http://csrc.nist.gov/ns/rmf\')]/@name",values=@AllowedValue(value="method",description="The assessment method to use. This typically appears on parts with the name \"assessment-method\".")),@AllowedValues(id="oscal-control-objective-part-method-prop-value",level=ERROR,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=(\'assessment\',\'assessment-method\')]/prop[has-oscal-namespace((\'http://csrc.nist.gov/ns/oscal\',\'http://csrc.nist.gov/ns/rmf\')) and @name=\'method\']/@value",values={@AllowedValue(value="INTERVIEW",description="The process of holding discussions with individuals or groups of individuals within an organization to once again, facilitate assessor understanding, achieve clarification, or obtain evidence."),@AllowedValue(value="EXAMINE",description="The process of reviewing, inspecting, observing, studying, or analyzing one or more assessment objects (i.e., specifications, mechanisms, or activities)."),@AllowedValue(value="TEST",description="The process of exercising one or more assessment objects (i.e., activities or mechanisms) under specified conditions to compare actual with expected behavior.")})},indexHasKey=@IndexHasKey(id="oscal-catalog-groups-controls-parts",level=WARNING,target="link[@rel=(\'related\',\'required\',\'incorporated-into\',\'moved-to\') and starts-with(@href,\'#\')]",indexName="catalog-groups-controls-parts",keyFields=@KeyField(target="@href",pattern="#(.*)")),expect={@Expect(id="oscal-catalog-control-require-statement-when-not-withdrawn",level=ERROR,test="prop[@name=\'status\']/@value=(\'withdrawn\',\'Withdrawn\') or part[@name=\'statement\']"),@Expect(id="oscal-method-part-has-method-prop",level=WARNING,target="part[has-oscal-namespace(\'http://csrc.nist.gov/ns/oscal\') and @name=(\'assessment\',\'assessment-method\')]",test="prop[has-oscal-namespace((\'http://csrc.nist.gov/ns/oscal\',\'http://csrc.nist.gov/ns/rmf\')) and @name=\'method\']")})) public class Control extends AbstractControl implements dev.metaschema.core.model.IBoundObject
A structured object representing a requirement or guideline, which when implemented will reduce an aspect of risk related to an information system and its information.
  • Constructor Details

    • Control

      public Control()
      Constructs a new dev.metaschema.oscal.lib.model.Control instance with no metadata.
    • Control

      public Control(dev.metaschema.core.model.IMetaschemaData data)
      Constructs a new dev.metaschema.oscal.lib.model.Control instance with the specified metadata.
      Parameters:
      data - the metaschema data, or null if none
  • Method Details

    • getMetaschemaData

      public dev.metaschema.core.model.IMetaschemaData getMetaschemaData()
      Specified by:
      getMetaschemaData in interface dev.metaschema.core.model.IBoundObject
    • getId

      @NonNull public String getId()
      Get the "Control Identifier".

      Identifies a control such that it can be referenced in the defining catalog and other OSCAL instances (e.g., profiles).

      Specified by:
      getId in interface IControl
      Returns:
      the id value
    • setId

      public void setId(@NonNull String value)
      Set the "Control Identifier".

      Identifies a control such that it can be referenced in the defining catalog and other OSCAL instances (e.g., profiles).

      Parameters:
      value - the id value to set
    • getClazz

      @Nullable public String getClazz()
      Get the "Control Class".

      A textual label that provides a sub-type or characterization of the control.

      Returns:
      the class value, or null if not set
    • setClazz

      public void setClazz(@Nullable String value)
      Set the "Control Class".

      A textual label that provides a sub-type or characterization of the control.

      Parameters:
      value - the class value to set, or null to clear
    • getTitle

      @NonNull public dev.metaschema.core.datatype.markup.MarkupLine getTitle()
      Get the "Control Title".

      A name given to the control, which may be used by a tool for display and navigation.

      Returns:
      the title value
    • setTitle

      public void setTitle(@NonNull dev.metaschema.core.datatype.markup.MarkupLine value)
      Set the "Control Title".

      A name given to the control, which may be used by a tool for display and navigation.

      Parameters:
      value - the title value to set
    • getParams

      @NonNull public List<Parameter> getParams()
      Get the "Parameter".

      Parameters provide a mechanism for the dynamic assignment of value(s) in a control.

      Specified by:
      getParams in interface IControlContainer
      Returns:
      the param value
    • setParams

      public void setParams(@NonNull List<Parameter> value)
      Set the "Parameter".

      Parameters provide a mechanism for the dynamic assignment of value(s) in a control.

      Parameters:
      value - the param value to set
    • addParam

      public boolean addParam(Parameter item)
      Add a new Parameter item to the underlying collection.
      Specified by:
      addParam in interface IControlContainer
      Parameters:
      item - the item to add
      Returns:
      true
    • removeParam

      public boolean removeParam(Parameter item)
      Remove the first matching Parameter item from the underlying collection.
      Specified by:
      removeParam in interface IControlContainer
      Parameters:
      item - the item to remove
      Returns:
      true if the item was removed or false otherwise
    • getProps

      @NonNull public List<Property> getProps()
      Get the "Property".

      An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.

      Returns:
      the prop value
    • setProps

      public void setProps(@NonNull List<Property> value)
      Set the "Property".

      An attribute, characteristic, or quality of the containing object expressed as a namespace qualified name/value pair.

      Parameters:
      value - the prop value to set
    • addProp

      public boolean addProp(Property item)
      Add a new Property item to the underlying collection.
      Parameters:
      item - the item to add
      Returns:
      true
    • removeProp

      public boolean removeProp(Property item)
      Remove the first matching Property item from the underlying collection.
      Parameters:
      item - the item to remove
      Returns:
      true if the item was removed or false otherwise
    • getLinks

      @NonNull public List<Link> getLinks()
      Get the "Link".

      A reference to a local or remote resource, that has a specific relation to the containing object.

      Returns:
      the link value
    • setLinks

      public void setLinks(@NonNull List<Link> value)
      Set the "Link".

      A reference to a local or remote resource, that has a specific relation to the containing object.

      Parameters:
      value - the link value to set
    • addLink

      public boolean addLink(Link item)
      Add a new Link item to the underlying collection.
      Parameters:
      item - the item to add
      Returns:
      true
    • removeLink

      public boolean removeLink(Link item)
      Remove the first matching Link item from the underlying collection.
      Parameters:
      item - the item to remove
      Returns:
      true if the item was removed or false otherwise
    • getParts

      @NonNull public List<ControlPart> getParts()
      Get the "Part".

      An annotated, markup-based textual element of a control's or catalog group's definition, or a child of another part.

      Specified by:
      getParts in interface IControl
      Returns:
      the part value
    • setParts

      public void setParts(@NonNull List<ControlPart> value)
      Set the "Part".

      An annotated, markup-based textual element of a control's or catalog group's definition, or a child of another part.

      Parameters:
      value - the part value to set
    • addPart

      public boolean addPart(ControlPart item)
      Add a new ControlPart item to the underlying collection.
      Parameters:
      item - the item to add
      Returns:
      true
    • removePart

      public boolean removePart(ControlPart item)
      Remove the first matching ControlPart item from the underlying collection.
      Parameters:
      item - the item to remove
      Returns:
      true if the item was removed or false otherwise
    • getControls

      @NonNull public List<Control> getControls()
      Get the "Control".

      A structured object representing a requirement or guideline, which when implemented will reduce an aspect of risk related to an information system and its information.

      Specified by:
      getControls in interface IControlContainer
      Returns:
      the control value
    • setControls

      public void setControls(@NonNull List<Control> value)
      Set the "Control".

      A structured object representing a requirement or guideline, which when implemented will reduce an aspect of risk related to an information system and its information.

      Parameters:
      value - the control value to set
    • addControl

      public boolean addControl(Control item)
      Add a new Control item to the underlying collection.
      Specified by:
      addControl in interface IControlContainer
      Parameters:
      item - the item to add
      Returns:
      true
    • removeControl

      public boolean removeControl(Control item)
      Remove the first matching Control item from the underlying collection.
      Specified by:
      removeControl in interface IControlContainer
      Parameters:
      item - the item to remove
      Returns:
      true if the item was removed or false otherwise
    • toString

      public String toString()
      Overrides:
      toString in class Object