Author: cziegeler
Date: Thu Apr 6 07:17:46 2017
New Revision: 1790349
URL: http://svn.apache.org/viewvc?rev=1790349&view=rev
Log:
SLING-6723 : Make dependency to javax.jcr, jcr.contentloader and jcr.api
optional
Added:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
- copied, changed from r1790348,
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupport.java
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
- copied, changed from r1790348,
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupportImpl.java
Removed:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupport.java
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupportImpl.java
Modified:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/ReferenceParser.java
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
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/AbstractPostOperation.java
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
Copied:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
(from r1790348,
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupport.java)
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java?p2=sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java&p1=sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupport.java&r1=1790348&r2=1790349&rev=1790349&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupport.java
(original)
+++
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
Thu Apr 6 07:17:46 2017
@@ -16,10 +16,15 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.servlets.post.impl.operations;
+package org.apache.sling.servlets.post.impl.helper;
import java.util.List;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
@@ -101,4 +106,25 @@ public class JCRSupport {
}
return false;
}
+
+ public Value parse(Session session, String value, ValueFactory factory,
boolean weak) throws RepositoryException {
+ return ReferenceParser.parse(session, value, factory, weak);
+ }
+
+ /**
+ * Parses the given source strings and returns the respective reference
value
+ * instances. If no node matches for any of the sources
+ * returns <code>null</code>.
+ * <p/>
+ *
+ * @param values path or UUID strings
+ * @param factory the value factory
+ * @param weak true to create a WeakReference value
+ * @return the values or <code>null</code>
+ * @throws RepositoryException
+ */
+ public Value[] parse(Session session, String[] values, ValueFactory
factory, boolean weak) throws RepositoryException {
+ return ReferenceParser.parse(session, values, factory, weak);
+ }
+
}
Copied:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
(from r1790348,
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupportImpl.java)
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java?p2=sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java&p1=sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupportImpl.java&r1=1790348&r2=1790349&rev=1790349&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/JCRSupportImpl.java
(original)
+++
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
Thu Apr 6 07:17:46 2017
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.servlets.post.impl.operations;
+package org.apache.sling.servlets.post.impl.helper;
import java.util.List;
Modified:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/ReferenceParser.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/ReferenceParser.java?rev=1790349&r1=1790348&r2=1790349&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/ReferenceParser.java
(original)
+++
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/ReferenceParser.java
Thu Apr 6 07:17:46 2017
@@ -16,30 +16,17 @@
*/
package org.apache.sling.servlets.post.impl.helper;
-import java.lang.reflect.Method;
-
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
/**
- * Takes a string representation of a node (either a path or a uuid) and tries
for parse it.
+ * Takes a string representation of a node (either a path or a uuid) and tries
to parse it.
*/
public class ReferenceParser {
- private final Session session;
-
- private static final Logger logger =
LoggerFactory.getLogger(ReferenceParser.class);
-
- public ReferenceParser(Session session) {
- this.session = session;
- }
-
/**
* Parses the given source string and returns the correct Value object.
* If no node matches returns <code>null</code>.
@@ -51,8 +38,8 @@ public class ReferenceParser {
* @return the value or <code>null</code>
* @throws RepositoryException
*/
- public Value parse(String value, ValueFactory factory, boolean weak)
throws RepositoryException {
- Node n = parse(value);
+ public static Value parse(Session session, String value, ValueFactory
factory, boolean weak) throws RepositoryException {
+ Node n = parse(session, value);
if (n == null) {
return null;
}
@@ -71,10 +58,10 @@ public class ReferenceParser {
* @return the values or <code>null</code>
* @throws RepositoryException
*/
- public Value[] parse(String[] values, ValueFactory factory, boolean weak)
throws RepositoryException {
+ public static Value[] parse(Session session, String[] values, ValueFactory
factory, boolean weak) throws RepositoryException {
Value ret[] = new Value[values.length];
for (int i=0; i< values.length; i++) {
- Node n = parse(values[i]);
+ Node n = parse(session, values[i]);
if (n == null) {
return null;
}
@@ -83,24 +70,15 @@ public class ReferenceParser {
return ret;
}
- private Value createReferenceValue(Node node, ValueFactory factory,
boolean weak) throws RepositoryException {
+ private static Value createReferenceValue(Node node, ValueFactory factory,
boolean weak) throws RepositoryException {
if (weak) {
- try {
- final Method m = factory.getClass().getMethod("createValue",
new Class[] { Node.class, Boolean.TYPE });
- return (Value) m.invoke(factory, node, true);
- } catch (NoSuchMethodException e) {
- logger.warn("A WeakReference type hint was received, but JCR 2
isn't available. Falling back to Reference type.");
- return factory.createValue(node);
- } catch (Exception e) {
- logger.error("Unable to create WeakReference Value.", e);
- return null;
- }
+ return factory.createValue(node, true);
} else {
return factory.createValue(node);
}
}
- private Node parse(String value) throws RepositoryException {
+ private static Node parse(Session session, String value) throws
RepositoryException {
try {
if (session.itemExists(value)) {
return (Node) session.getItem(value);
Modified:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java?rev=1790349&r1=1790348&r2=1790349&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
(original)
+++
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
Thu Apr 6 07:17:46 2017
@@ -48,7 +48,6 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.servlets.post.Modification;
import org.apache.sling.servlets.post.SlingPostConstants;
-import org.apache.sling.servlets.post.impl.operations.JCRSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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=1790349&r1=1790348&r2=1790349&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 Apr 6 07:17:46 2017
@@ -70,7 +70,7 @@ public class SlingPropertyValueHandler {
private final DateParser dateParser;
- private final ReferenceParser referenceParser;
+ private final JCRSupport jcrSupport;
/**
* current date for all properties in this request
@@ -78,11 +78,13 @@ public class SlingPropertyValueHandler {
private final Calendar now = Calendar.getInstance();
/**
- * Constructs a propert value handler
+ * Constructs a property value handler
*/
- public SlingPropertyValueHandler(DateParser dateParser, ReferenceParser
referenceParser, List<Modification> changes) {
+ public SlingPropertyValueHandler(final DateParser dateParser,
+ final JCRSupport jcrSupport,
+ final List<Modification> changes) {
this.dateParser = dateParser;
- this.referenceParser = referenceParser;
+ this.jcrSupport = jcrSupport;
this.changes = changes;
}
@@ -558,16 +560,20 @@ public class SlingPropertyValueHandler {
* Stores property value(s) as reference(s). Will parse the reference(s)
from the string
* value(s) in the {@link RequestProperty}.
*
- * @return true only if parsing was successfull and the property was
actually changed
+ * @return true only if parsing was successful and the property was
actually changed
*/
- private boolean storeAsReference(final Modifiable parent, String name,
String[] values, int type, boolean multiValued, ValueFactory valFac)
- throws RepositoryException, PersistenceException {
+ private boolean storeAsReference(final Modifiable parent,
+ final String name,
+ final String[] values,
+ final int type,
+ final boolean multiValued,
+ final ValueFactory valFac)
+ throws RepositoryException, PersistenceException {
if ( parent.node == null ) {
- // TODO
throw new PersistenceException("Resource " +
parent.resource.getPath() + " does not support reference properties.");
}
if (multiValued) {
- Value[] array = referenceParser.parse(values, valFac,
isWeakReference(type));
+ Value[] array = this.jcrSupport.parse(parent.node.getSession(),
values, valFac, isWeakReference(type));
if (array != null) {
changes.add(Modification.onModified(
parent.node.setProperty(name, array).getPath()
@@ -576,7 +582,7 @@ public class SlingPropertyValueHandler {
}
} else {
if (values.length >= 1) {
- Value v = referenceParser.parse(values[0], valFac,
isWeakReference(type));
+ Value v = this.jcrSupport.parse(parent.node.getSession(),
values[0], valFac, isWeakReference(type));
if (v != null) {
changes.add(Modification.onModified(
parent.node.setProperty(name, v).getPath()
Modified:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractPostOperation.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractPostOperation.java?rev=1790349&r1=1790348&r2=1790349&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractPostOperation.java
(original)
+++
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractPostOperation.java
Thu Apr 6 07:17:46 2017
@@ -40,6 +40,7 @@ import org.apache.sling.servlets.post.Po
import org.apache.sling.servlets.post.SlingPostConstants;
import org.apache.sling.servlets.post.SlingPostProcessor;
import org.apache.sling.servlets.post.VersioningConfiguration;
+import org.apache.sling.servlets.post.impl.helper.JCRSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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=1790349&r1=1790348&r2=1790349&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 Apr 6 07:17:46 2017
@@ -42,7 +42,6 @@ import org.apache.sling.servlets.post.Po
import org.apache.sling.servlets.post.SlingPostConstants;
import org.apache.sling.servlets.post.VersioningConfiguration;
import org.apache.sling.servlets.post.impl.helper.DateParser;
-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;
@@ -378,7 +377,7 @@ public class ModifyOperation extends Abs
throws RepositoryException, PersistenceException {
final SlingPropertyValueHandler propHandler = new
SlingPropertyValueHandler(
- dateParser, new ReferenceParser(resolver.adaptTo(Session.class)),
changes);
+ dateParser, this.jcrSsupport, changes);
for (final RequestProperty prop : reqProperties.values()) {
if (prop.hasValues()) {