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()) {