diff --git a/source/java/org/alfresco/repo/forms/DataTypeParameters.java b/source/java/org/alfresco/repo/forms/DataTypeParameters.java index e77f587eb5..c2159a8ecd 100644 --- a/source/java/org/alfresco/repo/forms/DataTypeParameters.java +++ b/source/java/org/alfresco/repo/forms/DataTypeParameters.java @@ -39,7 +39,7 @@ public interface DataTypeParameters * * @return An Object representing the data type parameters */ - public Object getParameters(); + public Object getAsObject(); /** * Returns the parameters represented as JSON. @@ -52,5 +52,5 @@ public interface DataTypeParameters * * @return JSON Object representing the parameters */ - public Object getParametersAsJSON(); + public Object getAsJSON(); } diff --git a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java index 97dd98ba13..22c44741b4 100644 --- a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java +++ b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java @@ -324,7 +324,7 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest assertEquals("Expecting 1 constraint for cm:name", 1, constraints.size()); FieldConstraint constraint = constraints.get(0); assertEquals("Expecting name of constraint to be 'REGEX'", "REGEX", constraint.getType()); - Map params = constraint.getParams(); + Map params = constraint.getParameters(); assertNotNull("Expecting constraint parameters", params); assertEquals("Expecting 2 constraint parameters", 2, params.size()); assertNotNull("Expecting an 'expression' constraint parameter", params.get("expression")); diff --git a/source/java/org/alfresco/repo/forms/PropertyFieldDefinition.java b/source/java/org/alfresco/repo/forms/PropertyFieldDefinition.java index ef95c1b5cd..c567e3d766 100644 --- a/source/java/org/alfresco/repo/forms/PropertyFieldDefinition.java +++ b/source/java/org/alfresco/repo/forms/PropertyFieldDefinition.java @@ -24,9 +24,16 @@ */ package org.alfresco.repo.forms; +import java.util.Collection; import java.util.List; import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + /** * A property field definition. * @@ -34,6 +41,9 @@ import java.util.Map; */ public class PropertyFieldDefinition extends FieldDefinition { + /** Logger */ + private static Log logger = LogFactory.getLog(PropertyFieldDefinition.class); + protected String dataType; protected DataTypeParameters dataTypeParams; protected boolean mandatory = false; @@ -175,7 +185,7 @@ public class PropertyFieldDefinition extends FieldDefinition public class FieldConstraint { protected String type; - protected Map params; + protected Map params; /** * Constructs a FieldConstraint @@ -183,7 +193,7 @@ public class PropertyFieldDefinition extends FieldDefinition * @param type The type of the constraint * @param params Map of parameters for the constraint */ - public FieldConstraint(String type, Map params) + public FieldConstraint(String type, Map params) { super(); this.type = type; @@ -206,9 +216,51 @@ public class PropertyFieldDefinition extends FieldDefinition * @return Map of parameters for the constraint or null if * there are no parameters */ - public Map getParams() + public Map getParameters() { return this.params; } + + /** + * Returns the paramters for the constraint as a JSONObject + * + * @return JSONObject representation of the parameters + */ + @SuppressWarnings("unchecked") + public JSONObject getParametersAsJSON() + { + JSONObject result = null; + + if (this.params != null) + { + result = new JSONObject(); + + for (String name : this.params.keySet()) + { + try + { + Object value = this.params.get(name); + if (value instanceof Collection) + { + // if the value is a Collection add to JSONObject as a JSONArray + result.put(name, new JSONArray((Collection)value)); + } + else + { + result.put(name, value); + } + } + catch (JSONException je) + { + // just log a warning + if (logger.isWarnEnabled()) + logger.warn("Failed to add constraint parameter '" + name + + "' to JSON object.", je); + } + } + } + + return result; + } } } diff --git a/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java index b31d7e956c..3077fab9c4 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java @@ -624,26 +624,8 @@ public class NodeFormProcessor extends FilteredFormProcessor for (ConstraintDefinition constraintDef : constraints) { Constraint constraint = constraintDef.getConstraint(); - Map fieldConstraintParams = null; - Map constraintParams = constraint.getParameters(); - if (constraintParams != null) - { - // TODO: Just return the param value object, don't convert to String - fieldConstraintParams = new HashMap(constraintParams.size()); - for (String name : constraintParams.keySet()) - { - Object paramValue = constraintParams.get(name); - - if (paramValue instanceof List) - { - paramValue = makeListString((List)paramValue); - } - - fieldConstraintParams.put(name, paramValue.toString()); - } - } FieldConstraint fieldConstraint = fieldDef.new FieldConstraint( - constraint.getType(), fieldConstraintParams); + constraint.getType(), constraint.getParameters()); fieldConstraints.add(fieldConstraint); } diff --git a/source/java/org/alfresco/repo/forms/processor/node/PeriodDataTypeParameters.java b/source/java/org/alfresco/repo/forms/processor/node/PeriodDataTypeParameters.java index 8d0ecf30f9..c2cc057ae8 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/PeriodDataTypeParameters.java +++ b/source/java/org/alfresco/repo/forms/processor/node/PeriodDataTypeParameters.java @@ -75,10 +75,10 @@ public class PeriodDataTypeParameters implements DataTypeParameters, Serializabl * Retrieves a List of PeriodProvider objects representing * the valid period options for the property * - * @see org.alfresco.repo.forms.DataTypeParameters#getParameters() + * @see org.alfresco.repo.forms.DataTypeParameters#getAsObject() * @return List of PeriodProvider objects */ - public Object getParameters() + public Object getAsObject() { return this.providers; } @@ -86,11 +86,11 @@ public class PeriodDataTypeParameters implements DataTypeParameters, Serializabl /** * Returns the valid period options as a JSONArray of JSONObject's. * - * @see org.alfresco.repo.forms.DataTypeParameters#getParametersAsJSON() + * @see org.alfresco.repo.forms.DataTypeParameters#getAsJSON() * @return A JSONArray object holding JSONObject's representing the * period definitions */ - public Object getParametersAsJSON() + public Object getAsJSON() { JSONArray periods = new JSONArray(); diff --git a/source/java/org/alfresco/repo/forms/script/test_formService.js b/source/java/org/alfresco/repo/forms/script/test_formService.js index 72b5d987d8..b0f611799a 100644 --- a/source/java/org/alfresco/repo/forms/script/test_formService.js +++ b/source/java/org/alfresco/repo/forms/script/test_formService.js @@ -86,7 +86,7 @@ function testGetFormForContentNode() test.assertEquals(1, constraints.size()); var constraint = constraints.get(0); test.assertEquals("REGEX", constraint.type); - var params = constraint.params; + var params = constraint.parameters; test.assertNotNull(params, "params should not be null."); test.assertEquals(2, params.length); test.assertNotNull(params["expression"], "params['expression'] should not be null.");