diff --git a/magnolia-ui-form/src/main/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformer.java b/magnolia-ui-form/src/main/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformer.java index e7485e3..3d30e5d 100644 --- a/magnolia-ui-form/src/main/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformer.java +++ b/magnolia-ui-form/src/main/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformer.java @@ -47,7 +47,7 @@ import com.vaadin.data.Property; /** * Specific MultiSelect field {@link info.magnolia.ui.form.field.transformer.Transformer}.
* For example, the Vaadin native {@link com.vaadin.ui.OptionGroup} used as root component of our configured Option Group Field do not support List, but only Sets. - * + * * @param */ public class ListToSetTransformer extends BasicTransformer { @@ -65,6 +65,9 @@ public class ListToSetTransformer extends BasicTransformer { if (p.getValue() instanceof List && newValue instanceof Set) { newValue = (T) new LinkedList((Set) newValue); + if (((List) newValue).isEmpty()) { + newValue = null; + } } p.setValue(newValue); } diff --git a/magnolia-ui-form/src/test/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformerTest.java b/magnolia-ui-form/src/test/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformerTest.java index d909807..692cee5 100644 --- a/magnolia-ui-form/src/test/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformerTest.java +++ b/magnolia-ui-form/src/test/java/info/magnolia/ui/form/field/transformer/basic/ListToSetTransformerTest.java @@ -154,4 +154,28 @@ public class ListToSetTransformerTest extends RepositoryTestCase { assertTrue(property.contains("d")); } + @Test + public void testWriteRemovesPropertyIfEmpty() throws RepositoryException { + // GIVEN + definition.setMultiselect(true); + rootNode.setProperty(propertyName, new String[] { "a", "b", "c" }); + JcrNodeAdapter rootItem = new JcrNodeAdapter(rootNode); + + ListToSetTransformer handler = new ListToSetTransformer(rootItem, definition, String.class); + Object value = handler.readFromItem(); + assertNotNull(value); + assertTrue(value instanceof HashSet); + ((HashSet) value).remove("a"); + ((HashSet) value).remove("b"); + ((HashSet) value).remove("c"); + + // WHEN + handler.writeToItem(value); + rootItem.applyChanges(); + + // THEN + assertNull(rootItem.getItemProperty(propertyName).getValue()); + assertFalse(rootNode.hasProperty(propertyName)); + } + }