From 4ed7957b63514e292585f3ac89ebcd54faf8c72d Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Mon, 15 Jun 2009 23:32:40 +0000 Subject: [PATCH] Last refactor of forms API before Labs release - FieldConstraints API now receives and returns a Map rather than Map, a method to return the parameters as JSON has also been added and is used in the REST API. This means that parameters go all the way to client side validation handlers in their native form. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14727 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/forms/DataTypeParameters.java | 4 +- .../repo/forms/FormServiceImplTest.java | 2 +- .../repo/forms/PropertyFieldDefinition.java | 58 ++++++++++++++++++- .../processor/node/NodeFormProcessor.java | 20 +------ .../node/PeriodDataTypeParameters.java | 8 +-- .../repo/forms/script/test_formService.js | 2 +- 6 files changed, 64 insertions(+), 30 deletions(-) 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.");