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));
+ }
+
}