Author: justin
Date: Thu Jan 28 21:56:11 2010
New Revision: 904275

URL: http://svn.apache.org/viewvc?rev=904275&view=rev
Log:
SLING-1333 - making work with multi-valued properties

Modified:
    
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java
    
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java

Modified: 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java?rev=904275&r1=904274&r2=904275&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java
 (original)
+++ 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java
 Thu Jan 28 21:56:11 2010
@@ -60,6 +60,8 @@
 
     private final DateParser dateParser;
 
+    private final ReferenceParser referenceParser;
+
     /**
      * current date for all properties in this request
      */
@@ -68,8 +70,9 @@
     /**
      * Constructs a propert value handler
      */
-    public SlingPropertyValueHandler(DateParser dateParser, List<Modification> 
changes) {
+    public SlingPropertyValueHandler(DateParser dateParser, ReferenceParser 
referenceParser, List<Modification> changes) {
         this.dateParser = dateParser;
+        this.referenceParser = referenceParser;
         this.changes = changes;
     }
 
@@ -241,19 +244,22 @@
                         return;
                     }
                 } else if (type == PropertyType.REFERENCE) {
-                    boolean valueIsNodePath = false;
-                    try {
-                        if (parent.getSession().itemExists(values[0])) {
-                            valueIsNodePath = true;
+                    Node n = referenceParser.parse(values[0]);
+                    if (n != null) {
+                        if ( prop.hasMultiValueTypeHint() ) {
+                            final Value[] array = new Value[1];
+                            array[0] = 
parent.getSession().getValueFactory().createValue(n);
+                            changes.add(Modification.onModified(
+                                parent.setProperty(prop.getName(), 
array).getPath()
+                            ));
+                        } else {
+                            changes.add(Modification.onModified(
+                                    parent.setProperty(prop.getName(), 
n).getPath()
+                                ));
                         }
-                    } catch (RepositoryException e) {}
-                    if (valueIsNodePath) {
-                        Property createdProp = 
parent.setProperty(prop.getName(), (Node) 
parent.getSession().getItem(values[0]));
-
-                        
changes.add(Modification.onModified(createdProp.getPath()));
-
                         return;
                     }
+
                 }
 
                 // fall back to default behaviour
@@ -284,8 +290,18 @@
                     ));
                     return;
                 }
-                // fall back to default behaviour
+            } else if (type == PropertyType.REFERENCE) {
+                // try conversion
+                ValueFactory valFac = parent.getSession().getValueFactory();
+                Value[] n = referenceParser.parse(values, valFac);
+                if (n != null) {
+                    changes.add(Modification.onModified(
+                        parent.setProperty(prop.getName(), n).getPath()
+                    ));
+                    return;
+                }
             }
+            // fall back to default behaviour
             final Property p;
             if ( type == PropertyType.UNDEFINED ) {
                 p = parent.setProperty(prop.getName(), values);

Modified: 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java?rev=904275&r1=904274&r2=904275&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
 (original)
+++ 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
 Thu Jan 28 21:56:11 2010
@@ -45,6 +45,7 @@
 import org.apache.sling.servlets.post.SlingPostConstants;
 import org.apache.sling.servlets.post.impl.helper.DateParser;
 import org.apache.sling.servlets.post.impl.helper.NodeNameGenerator;
+import org.apache.sling.servlets.post.impl.helper.ReferenceParser;
 import org.apache.sling.servlets.post.impl.helper.RequestProperty;
 import org.apache.sling.servlets.post.impl.helper.SlingFileUploadHandler;
 import org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler;
@@ -414,7 +415,7 @@
             throws RepositoryException {
 
         SlingPropertyValueHandler propHandler = new SlingPropertyValueHandler(
-            dateParser, changes);
+            dateParser, new ReferenceParser(session), changes);
 
         for (RequestProperty prop : reqProperties.values()) {
             if (prop.hasValues()) {


Reply via email to