Uploaded image for project: 'Magnolia UI'
  1. Magnolia UI
  2. MGNLUI-3241

Composite Field: Add cross field validation between the subfields of the composite field

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Neutral
    • Resolution: Obsolete
    • Affects Version/s: 5.2.10, 5.3.5
    • Fix Version/s: None
    • Component/s: forms
    • Labels:
      None
    • Patch included:
      Yes

      Description

      Cross field validation is not a feature of the current Magnolia Form UI implementation.

      I have created a general issue for requesting this feature as a general feature throughout form fields: MGNLUI-3240

      In this ticket the the idea is to implement it for the CompositeField, as it would be a alternative to handle many of the use cases that occur of fields that need to be cross validated.
      Possible use cases:

      • A "point of interest" CompositeField with the sub-fields "Longitude' and 'Latitude'. The field is not required, BUT if in one sub field a value is entered, the other also needs a value (no value or all have a value situation).

      Idea:
      Extending the CompositeField by a cross field validation of its sub fields.
      Overriding the validate() method and delegating to a configurable field comparator class.

      POC implementation:
      I tried quickly such an implementation to test if it is possible.
      I created:

      • CrossFieldsValidatingCompositeField.java which extends the CompositeField and its definition & factory class.
        The field delegates to an implementation of the CrossFieldsComparator.java interface to do the field comparison.
      • CrossFieldsComparator.java does the field comparison.
      • AllEmptyOrNoneEmpty.java is the implementation for this use case, checking if one field ha a value.

      Attention: This is just a POC, not product ready code! It can be used in projects, but will probably need some adaptions.

      Usage:

      • Add a 'fieldTypes' mapping of the FieldDefinition and the FieldFactory class. (added bootstrap file)
      • Use the CrossFieldsValidatingCompositeField class for a composite field.
      • Define the crossFieldsComparator property pointing to the implementation CrossFieldsComparator for the specific use case, in this case here the AllEmptyOrNoneEmpty.

      Other use cases:
      Just implement another version of CrossFieldsComparator.

      Constraints:
      I first tried to use a Vaadin Validator on the composite field.
      This doesn't work because the Validator is decoupled form the invoked filed. So The Validator is not aware of any configured sub fields of a "Magnolia Composite Field".
      Providing this values to the Validator to do a comparison would be very hackish (interlinking Magnolia Configurations and Vaadin Validators).

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                cringele Christian Ringele
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Date of First Response: