Magnolia 6 UI ports of 5 UI field transformer classes
Magnolia 5 UI field transformer classes no longer exist in the Magnolia 6 UI framework. The transformer functionality is now distributed among different components. The following is a summary of what the components do:
- 
Modify the target property name by appending a locale suffix or by prepending a field prefix. This is done by concrete PropertySetimplementations (JcrItemPropertySet) and/or byPropertyNameDecorator.
- 
Resolve an item data source of complex fields, a functionality usually covered by item providers. 
- 
Manage item data sources of multi-value field entries. This is handled by MultiFormView.EntryResolution, which resolves the children and binds each of them to the item provider strategy.
Replacements for transformers
Default classes
| info.magnolia.ui.form.field.transformer.* | Magnolia 6 UI | 
|---|---|
| 
 | Not needed. Its functions are obsolete; some are taken over by Vaadin PropertySet. | 
| 
 | Use
 | 
| 
 | Use
 
 | 
Other classes
| info.magnolia.ui.form.field.transformer.* | Magnolia 6 UI | 
|---|---|
| 
 | Use  | 
| 
 | Not needed. | 
| 
 | Use  | 
| 
 | Use  
 | 
| 
 | Use  | 
| 
 | Use  
 Example definition  | 
| 
 | Deprecated, no automatic conversion. | 
| 
 | Use  
 | 
| 
 | Use  
 Example definition  | 
Personalization transformers
Transformers with
personalization-related functions still
use the Magnolia 5 UI framework
(magnolia-personalization-compatibility).
| When using such a personalization  | 
| info.magnolia.personalization.* | Description | 
|---|---|
| 
 | Custom transformer for cookie traits. | 
| 
 | Now functions as the default trait transformer. | 
| 
 | Still exists, but is no longer needed. | 
Transforming simple values into complex structures
To transform a simple value:
form:
  properties:
    simple:
      $type: damLinkFieldinto a complex structure in Magnolia 6 UI:
myComponent:
  assetLink: jcr:uuid
  assetName: myImage.jpgyou can create CompositeAssetLinkView as an implementation class that extends FormView:
public class CompositeAssetLinkView<T> extends FormView<Node> {
    @Inject
    public CompositeAssetLinkView(FormDefinition<Node> formDefinition, LocaleContext localeContext) {
        super(formDefinition, localeContext);
    }
    @Override
    public void write(Node node) {
        super.write(node);
        getPropertyValue("assetLink")
                .map(Asset::getName)
                .ifPresent(name -> node.setProperty("assetName", name));
    }
}In Magnolia 6 UI, you have to be more explicit about the structure in the dialog configuration:
composite:
  $type: compositeField
  implementationClass: my.package.CompositeAssetLinkView
  itemProvider:
    $type: jcrChildNodeProvider # creating a `composite` node to store the link
  properties:
    assetLink:
      $type: damLinkFieldExample definitions
The following configurations in both frameworks will produce the same results.
form:
  tabs:
    - name: tabSwitch
      fields:
        - name: switchable
          fieldType: switchable
          options:
            - name: text
              value: text
            - name: richText
              value: richText
          fields:
            - name: text
              fieldType: text
            - name: richText
              fieldType: richText
    - name: tabMultiBasic
      fields:
        - name: multitext
          fieldType: multiValue
          transformerClass: info.magnolia.ui.form.field.transformer.multi.DelegatingMultiValueFieldTransformer
          field:
            name: text
            fieldType: text
    - name: tabMultiDeleg
      fields:
        - name: items
          fieldType: multiValue
          transformerClass: info.magnolia.ui.form.field.transformer.multi.DelegatingMultiValueSubnodeTransformer
          field:
            name: itemComposite
            fieldType: composite
            transformerClass: info.magnolia.ui.form.field.transformer.composite.DelegatingCompositeFieldTransformer
            fields:
              - name: text
                fieldType: text
              - name: link
                fieldType: text
    - name: multiValueChild
      # i18n: true
      fieldType: multiValue
      field:
        name: text
        fieldType: text
      transformerClass: info.magnolia.ui.form.field.transformer.multi.MultiValueChildNodeTransformer
    - name: tabMultiLex
      fields:
        - name: itemsLex
          fieldType: multiValue
          transformerClass: info.magnolia.ui.form.field.transformer.multi.MultiValueSubChildrenNodePropertiesTransformer
          field:
            name: itemComposite
            fieldType: composite
            transformerClass: info.magnolia.ui.form.field.transformer.composite.NoOpCompositeTransformer
            fields:
              - name: text
                fieldType: text
              - name: link
                fieldType: textform:
  properties:
    switchable:
      $type: switchableField
      field:
        name: switchable
        $type: radioButtonGroupField
        datasource:
          $type: optionListDatasource
          options:
            - name: text
              value: text
            - name: richText
              value: richText
      itemProvider:
        $type: currentItemProvider
      propertyNameDecorator: info.magnolia.ui.field.PrefixNameDecorator
      forms:
        - name: text
          properties:
            text:
              $type: textField
        - name: richText
          properties:
            richText:
              $type: richTextField
    multitext:
      $type: jcrMultiField
      itemProvider:
        $type: currentItemProvider
      entryResolution:
        class: info.magnolia.ui.editor.MultiFieldEntryResolution$Definition
        strict: true
      field:
        name: text
        $type: textField
    items:
      $type: jcrMultiField
      itemProvider:
        $type: jcrChildNodeProvider
        supportI18N: false
      entryResolution:
        class: info.magnolia.ui.editor.MultiFieldEntryResolution$Definition
        propertyNameDecorator: info.magnolia.ui.field.AlwaysEmptyPrefixNameDecorator
        strict: true
      field:
        $type: compositeField
        properties:
          text:
            $type: textField
          link:
            $type: textField
    multiValueChild:
      $type: jcrMultiValueField
      # i18n: true
      itemProvider:
        class: info.magnolia.ui.editor.MultiValueAsMultipleProperties$Definition
      field:
        $type: textField
    itemsLex:
      $type: jcrMultiField
      itemProvider:
        $type: jcrChildNodeProvider
        supportI18N: false
      entryResolution:
        class: info.magnolia.ui.editor.ByLexicographicallyIndexedChildNodes$Definition
        strict: true
      orderHandler:
        class: info.magnolia.ui.editor.LexicographicallyIndexedJcrNodeOrderHandler$Definition
      field:
        $type: compositeField
        properties:
          text:
            $type: textField
          link:
            $type: textField