chemistry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From f...@apache.org
Subject svn commit: r1439493 - in /chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser: BrowserBindingUtils.java ControlParser.java
Date Mon, 28 Jan 2013 16:54:07 GMT
Author: fmui
Date: Mon Jan 28 16:54:07 2013
New Revision: 1439493

URL: http://svn.apache.org/viewvc?rev=1439493&view=rev
Log:
Server: Simplified Browser Binding code

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java?rev=1439493&r1=1439492&r2=1439493&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java
(original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/BrowserBindingUtils.java
Mon Jan 28 16:54:07 2013
@@ -208,79 +208,40 @@ public final class BrowserBindingUtils {
     }
 
     public static Properties createNewProperties(ControlParser controlParser, TypeCache typeCache)
{
-        List<String> propertyIds = controlParser.getValues(Constants.CONTROL_PROP_ID);
-        if (propertyIds == null) {
+        Map<String, List<String>> properties = controlParser.getProperties();
+        if (properties == null) {
             return null;
         }
 
-        Map<Integer, String> singleValuePropertyMap = controlParser.getOneDimMap(Constants.CONTROL_PROP_VALUE);
-        Map<Integer, Map<Integer, String>> multiValuePropertyMap = controlParser
-                .getTwoDimMap(Constants.CONTROL_PROP_VALUE);
-
-        // load types
-        int i = 0;
-        for (String propertId : propertyIds) {
-            if (PropertyIds.OBJECT_TYPE_ID.equals(propertId) && singleValuePropertyMap
!= null) {
-                String typeId = singleValuePropertyMap.get(i);
-                if (typeId != null) {
-                    TypeDefinition typeDef = typeCache.getTypeDefinition(typeId);
-                    if (typeDef == null) {
-                        throw new CmisInvalidArgumentException("Invalid type: " + typeId);
-                    }
-                }
+        // load primary type
+        List<String> objectTypeIdsValues = properties.get(PropertyIds.OBJECT_TYPE_ID);
+        if (objectTypeIdsValues != null && !objectTypeIdsValues.isEmpty()) {
+            TypeDefinition typeDef = typeCache.getTypeDefinition(objectTypeIdsValues.get(0));
+            if (typeDef == null) {
+                throw new CmisInvalidArgumentException("Invalid type: " + objectTypeIdsValues.get(0));
             }
+        }
 
-            if (PropertyIds.SECONDARY_OBJECT_TYPE_IDS.equals(propertId)) {
-                Map<Integer, String> values = null;
-
-                if (multiValuePropertyMap != null) {
-                    values = multiValuePropertyMap.get(i);
-                }
-
-                if (values != null) {
-                    for (String secTypeId : values.values()) {
-                        TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
-                        if (typeDef == null) {
-                            throw new CmisInvalidArgumentException("Invalid secondary type:
" + secTypeId);
-                        }
-                    }
-                } else if (singleValuePropertyMap != null) {
-                    String value = singleValuePropertyMap.get(i);
-                    if (value != null) {
-                        TypeDefinition typeDef = typeCache.getTypeDefinition(value);
-                        if (typeDef == null) {
-                            throw new CmisInvalidArgumentException("Invalid secondary type:
" + value);
-                        }
-                    }
+        // load secondary types
+        List<String> secondaryObjectTypeIdsValues = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+        if (secondaryObjectTypeIdsValues != null && !secondaryObjectTypeIdsValues.isEmpty())
{
+            for (String secTypeId : secondaryObjectTypeIdsValues) {
+                TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
+                if (typeDef == null) {
+                    throw new CmisInvalidArgumentException("Invalid type: " + secTypeId);
                 }
             }
-
-            i++;
         }
 
         // create properties
         PropertiesImpl result = new PropertiesImpl();
-
-        i = 0;
-        for (String propertyId : propertyIds) {
-            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(propertyId);
+        for (Map.Entry<String, List<String>> property : properties.entrySet())
{
+            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(property.getKey());
             if (propDef == null) {
-                throw new CmisInvalidArgumentException(propertyId + " is unknown!");
-            }
-
-            PropertyData<?> propertyData = null;
-
-            if (singleValuePropertyMap != null && singleValuePropertyMap.containsKey(i))
{
-                propertyData = createPropertyData(propDef, singleValuePropertyMap.get(i));
-            } else if (multiValuePropertyMap != null && multiValuePropertyMap.containsKey(i))
{
-                propertyData = createPropertyData(propDef, controlParser.getValues(Constants.CONTROL_PROP_VALUE,
i));
-            } else {
-                propertyData = createPropertyData(propDef, null);
+                throw new CmisInvalidArgumentException(property.getKey() + " is unknown!");
             }
 
-            result.addProperty(propertyData);
-
-            i++;
+            result.addProperty(createPropertyData(propDef, property.getValue()));
         }
 
         return result;
@@ -288,16 +249,12 @@ public final class BrowserBindingUtils {
 
     public static Properties createUpdateProperties(ControlParser controlParser, String typeId,
             List<String> secondaryTypeIds, List<String> objectIds, TypeCache
typeCache) {
-        List<String> propertyIds = controlParser.getValues(Constants.CONTROL_PROP_ID);
-        if (propertyIds == null) {
+        Map<String, List<String>> properties = controlParser.getProperties();
+        if (properties == null) {
             return null;
         }
 
-        Map<Integer, String> singleValuePropertyMap = controlParser.getOneDimMap(Constants.CONTROL_PROP_VALUE);
-        Map<Integer, Map<Integer, String>> multiValuePropertyMap = controlParser
-                .getTwoDimMap(Constants.CONTROL_PROP_VALUE);
-
-        // get type definition
+        // load primary type
         if (typeId != null) {
             TypeDefinition typeDef = typeCache.getTypeDefinition(typeId);
             if (typeDef == null) {
@@ -305,36 +262,15 @@ public final class BrowserBindingUtils {
             }
         }
 
-        // get secondary type definition
-        int i = 0;
-        for (String propertId : propertyIds) {
-            if (PropertyIds.SECONDARY_OBJECT_TYPE_IDS.equals(propertId)) {
-                Map<Integer, String> values = null;
-
-                if (multiValuePropertyMap != null) {
-                    values = multiValuePropertyMap.get(i);
-                }
-
-                if (values != null) {
-                    for (String secTypeId : values.values()) {
-                        TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
-                        if (typeDef == null) {
-                            throw new CmisInvalidArgumentException("Invalid secondary type:
" + secTypeId);
-                        }
-                    }
-                } else if (singleValuePropertyMap != null) {
-                    String value = singleValuePropertyMap.get(i);
-                    if (value != null) {
-                        TypeDefinition typeDef = typeCache.getTypeDefinition(value);
-                        if (typeDef == null) {
-                            throw new CmisInvalidArgumentException("Invalid secondary type:
" + value);
-                        }
-                    }
+        // load secondary types
+        List<String> secondaryObjectTypeIdsValues = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+        if (secondaryObjectTypeIdsValues != null && !secondaryObjectTypeIdsValues.isEmpty())
{
+            for (String secTypeId : secondaryObjectTypeIdsValues) {
+                TypeDefinition typeDef = typeCache.getTypeDefinition(secTypeId);
+                if (typeDef == null) {
+                    throw new CmisInvalidArgumentException("Invalid type: " + secTypeId);
                 }
-                break;
             }
-
-            i++;
         }
 
         if (secondaryTypeIds != null) {
@@ -348,36 +284,22 @@ public final class BrowserBindingUtils {
 
         // create properties
         PropertiesImpl result = new PropertiesImpl();
-
-        i = 0;
-        for (String propertyId : propertyIds) {
-            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(propertyId);
+        for (Map.Entry<String, List<String>> property : properties.entrySet())
{
+            PropertyDefinition<?> propDef = typeCache.getPropertyDefinition(property.getKey());
             if (propDef == null && objectIds != null) {
                 for (String objectId : objectIds) {
                     typeCache.getTypeDefinitionForObject(objectId);
-                    propDef = typeCache.getPropertyDefinition(propertyId);
+                    propDef = typeCache.getPropertyDefinition(property.getKey());
                     if (propDef != null) {
                         break;
                     }
                 }
             }
             if (propDef == null) {
-                throw new CmisInvalidArgumentException(propertyId + " is unknown!");
+                throw new CmisInvalidArgumentException(property.getKey() + " is unknown!");
             }
 
-            PropertyData<?> propertyData = null;
-
-            if (singleValuePropertyMap != null && singleValuePropertyMap.containsKey(i))
{
-                propertyData = createPropertyData(propDef, singleValuePropertyMap.get(i));
-            } else if (multiValuePropertyMap != null && multiValuePropertyMap.containsKey(i))
{
-                propertyData = createPropertyData(propDef, controlParser.getValues(Constants.CONTROL_PROP_VALUE,
i));
-            } else {
-                propertyData = createPropertyData(propDef, null);
-            }
-
-            result.addProperty(propertyData);
-
-            i++;
+            result.addProperty(createPropertyData(propDef, property.getValue()));
         }
 
         return result;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java?rev=1439493&r1=1439492&r2=1439493&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java
(original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/ControlParser.java
Mon Jan 28 16:54:07 2013
@@ -19,7 +19,9 @@
 package org.apache.chemistry.opencmis.server.impl.browser;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -27,12 +29,16 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.impl.Constants;
 
 /**
  * Parses HTML form controls.
  */
 public class ControlParser {
 
+    public static final String CONTROL_PROP_ID_LOWER = "propertyid";
+    private static final String CONTROL_PROP_VALUE_LOWER = "propertyvalue";
+
     private final HttpServletRequest request;
 
     private final Map<String, String> zeroDim = new HashMap<String, String>();
@@ -193,4 +199,50 @@ public class ControlParser {
 
         return twoDim.get(controlName.toLowerCase(Locale.ENGLISH));
     }
+
+    public Map<String, List<String>> getProperties() {
+        Map<Integer, String> propertyIds = oneDim.get(CONTROL_PROP_ID_LOWER);
+        if (propertyIds == null) {
+            return null;
+        }
+
+        Map<Integer, String> oneDimPropValues = oneDim.get(CONTROL_PROP_VALUE_LOWER);
+        Map<Integer, Map<Integer, String>> twoDimPropValues = twoDim.get(CONTROL_PROP_VALUE_LOWER);
+
+        int count = propertyIds.size();
+        Map<String, List<String>> result = new LinkedHashMap<String, List<String>>();
+
+        for (int i = 0; i < count; i++) {
+            String propertyId = propertyIds.get(i);
+            if (propertyId == null) {
+                throw new CmisInvalidArgumentException(Constants.CONTROL_PROP_ID + " has
gaps!");
+            }
+
+            List<String> values = null;
+            if (oneDimPropValues != null && oneDimPropValues.containsKey(i)) {
+                values = Collections.singletonList(oneDimPropValues.get(i));
+            } else if (twoDimPropValues != null && twoDimPropValues.containsKey(i))
{
+                values = new ArrayList<String>();
+
+                Map<Integer, String> valuesMap = twoDimPropValues.get(i);
+                if (valuesMap != null) {
+                    int valueCount = valuesMap.size();
+
+                    for (int j = 0; j < valueCount; j++) {
+                        String value = valuesMap.get(j);
+                        if (value == null) {
+                            throw new CmisInvalidArgumentException(Constants.CONTROL_PROP_VALUE
+ "[" + i
+                                    + "] has gaps!");
+                        }
+
+                        values.add(value);
+                    }
+                }
+            }
+
+            result.put(propertyId, values);
+        }
+
+        return result;
+    }
 }



Mime
View raw message