From f1a304506a67be40ba46f07abf21d85b1a163dca Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Wed, 2 Apr 2014 21:07:09 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 65422: Merged V4.2-BUG-FIX (4.2.2) to HEAD-BUG-FIX (4.3/Cloud) 65044: Merged DEV to V4.2-BUG-FIX (4.2.2) 65027 : MNT-10969 : FormService doesn't allow empty value in multivalued field - Multivalue properties may now contain empty values. - Unit test added. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@66234 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../node/ContentModelFormProcessor.java | 9 +---- .../repo/forms/FormServiceImplTest.java | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/source/java/org/alfresco/repo/forms/processor/node/ContentModelFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/node/ContentModelFormProcessor.java index da1485cd75..bb3d1bcfd6 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/ContentModelFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/node/ContentModelFormProcessor.java @@ -29,11 +29,11 @@ import static org.alfresco.repo.forms.processor.node.FormFieldConstants.PROP_DAT import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -360,12 +360,7 @@ public abstract class ContentModelFormProcessor extends { // if value is a String convert to List of // String - StringTokenizer tokenizer = new StringTokenizer((String) value, ","); - List list = new ArrayList(8); - while (tokenizer.hasMoreTokens()) - { - list.add(tokenizer.nextToken()); - } + List list = Arrays.asList(((String)value).split(",", -1)); // persist the List value = list; diff --git a/source/test-java/org/alfresco/repo/forms/FormServiceImplTest.java b/source/test-java/org/alfresco/repo/forms/FormServiceImplTest.java index 2cd8b16752..3835b28abf 100644 --- a/source/test-java/org/alfresco/repo/forms/FormServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/forms/FormServiceImplTest.java @@ -20,6 +20,7 @@ package org.alfresco.repo.forms; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Date; @@ -1745,6 +1746,45 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest assertEquals(newName, updatedName); } + @SuppressWarnings("unchecked") + public void testMNT_10969() throws Exception + { + // create a node (cm:content) + Map nodeProps = new HashMap(1); + String nodeName = "testNode" + GUID.generate(); + nodeProps.put(ContentModel.PROP_NAME, nodeName); + NodeRef node = this.nodeService.createNode( + this.folder, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, nodeName), + ContentModel.TYPE_CONTENT, + nodeProps).getChildRef(); + + this.nodeService.addAspect(node, ContentModel.ASPECT_WEBDAV_OBJECT, null); + + List fields = new ArrayList(8); + fields.add(ContentModel.PROP_DEAD_PROPERTIES.toPrefixString(this.namespaceService)); + + Form form = this.formService.getForm(new Item(NODE_FORM_ITEM_KIND, node.toString()), fields); + + // check a form got returned + assertNotNull("Expecting form to be present", form); + + // check fields were returned + List fieldNames = form.getFieldDefinitionNames(); + assertEquals(1, fieldNames.size()); + + // set the multivalue property with empty values + FormData data = new FormData(); + String value = ",titi,toto,"; + data.addFieldData("prop_webdav_deadproperties", value); + this.formService.saveForm(new Item(NODE_FORM_ITEM_KIND, node.toString()), data); + + Map updatedProps = this.nodeService.getProperties(node); + List savedValue = (List)updatedProps.get(ContentModel.PROP_DEAD_PROPERTIES); + assertEquals(Arrays.asList("", "titi", "toto", ""), savedValue); + } + public void testJavascriptAPI() throws Exception { Map model = new HashMap();