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


Reply via email to