Author: fmeschbe
Date: Thu Nov 29 06:23:29 2007
New Revision: 599451

URL: http://svn.apache.org/viewvc?rev=599451&view=rev
Log:
SLING-109 Adapt to new Resource and provider interfaces

Modified:
    
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/request/SlingRequestDispatcher.java
    
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/scripting/DefaultSlingScript.java
    
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/servlets/DefaultServlet.java

Modified: 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/request/SlingRequestDispatcher.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/request/SlingRequestDispatcher.java?rev=599451&r1=599450&r2=599451&view=diff
==============================================================================
--- 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/request/SlingRequestDispatcher.java
 (original)
+++ 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/request/SlingRequestDispatcher.java
 Thu Nov 29 06:23:29 2007
@@ -20,7 +20,10 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 
+import javax.jcr.Node;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
@@ -28,9 +31,13 @@
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestDispatcherOptions;
+import org.apache.sling.api.resource.NodeProvider;
+import org.apache.sling.api.resource.ObjectProvider;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.StreamProvider;
+import org.apache.sling.api.resource.URLProvider;
 
 public class SlingRequestDispatcher implements RequestDispatcher {
 
@@ -116,7 +123,8 @@
         return uri + '/' + path;
     }
 
-    private static class ResourceWrapper implements Resource {
+    private static class ResourceWrapper implements Resource, NodeProvider, 
ObjectProvider, StreamProvider, URLProvider {
+
         private final Resource delegatee;
         private final String resourceType;
 
@@ -129,24 +137,41 @@
             return resourceType;
         }
 
+        public ResourceMetadata getResourceMetadata() {
+            return delegatee.getResourceMetadata();
+        }
+
+        public String getURI() {
+            return delegatee.getURI();
+        }
+
         public InputStream getInputStream() throws IOException {
-            return delegatee.getInputStream();
+            if (delegatee instanceof StreamProvider) {
+                return ((StreamProvider) delegatee).getInputStream();
+            }
+            return null;
         }
 
         public Object getObject() {
-            return delegatee.getObject();
+            if (delegatee instanceof ObjectProvider) {
+                return ((ObjectProvider) delegatee).getObject();
+            }
+            return null;
         }
 
-        public Object getRawData() {
-            return delegatee.getRawData();
+        public Node getNode() {
+            if (delegatee instanceof NodeProvider) {
+                return ((NodeProvider) delegatee).getNode();
+            }
+            return null;
         }
 
-        public ResourceMetadata getResourceMetadata() {
-            return delegatee.getResourceMetadata();
+        public URL getURL() throws MalformedURLException {
+            if (delegatee instanceof URLProvider) {
+                return ((URLProvider) delegatee).getURL();
+            }
+            return null;
         }
 
-        public String getURI() {
-            return delegatee.getURI();
-        }
     }
 }

Modified: 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/scripting/DefaultSlingScript.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/scripting/DefaultSlingScript.java?rev=599451&r1=599450&r2=599451&view=diff
==============================================================================
--- 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/scripting/DefaultSlingScript.java
 (original)
+++ 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/impl/scripting/DefaultSlingScript.java
 Thu Nov 29 06:23:29 2007
@@ -24,12 +24,9 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
+import org.apache.sling.api.resource.StreamProvider;
 import org.apache.sling.api.scripting.SlingScript;
 import org.apache.sling.api.scripting.SlingScriptEngine;
 
@@ -54,48 +51,9 @@
 
     public Reader getScriptReader() throws IOException {
 
-        Property property;
-        Value value;
-
-        try {
-
-            if (getScriptResource().getRawData() instanceof Node) {
-                // SLING-72: Cannot use primary items due to WebDAV creating
-                // nt:unstructured as jcr:content node. So we just assume
-                // nt:file and try to use the well-known data path
-                Node node = (Node) getScriptResource().getRawData();
-                property = node.getProperty("jcr:content/jcr:data");
-            } else {
-                throw new IOException("Scriptresource " + getScriptResource()
-                    + " must is not JCR Node based");
-            }
-
-            value = null;
-            if (property.getDefinition().isMultiple()) {
-                // for a multi-valued property, we take the first non-null
-                // value (null values are possible in multi-valued
-                // properties)
-                // TODO: verify this claim ...
-                Value[] values = property.getValues();
-                for (Value candidateValue : values) {
-                    if (candidateValue != null) {
-                        value = candidateValue;
-                        break;
-                    }
-                }
-
-                // incase we could not find a non-null value, we bail out
-                if (value == null) {
-                    throw new IOException("Cannot access "
-                        + getScriptResource().getURI());
-                }
-            } else {
-                // for single-valued properties, we just take this value
-                value = property.getValue();
-            }
-        } catch (RepositoryException re) {
-            throw (IOException) new IOException("Cannot get script "
-                + getScriptResource().getURI()).initCause(re);
+        if (!(getScriptResource() instanceof StreamProvider)) {
+            throw new IOException("Scriptresource " + getScriptResource()
+                + " is not a StreamProvider");
         }
 
         // Now know how to get the input stream, we still have to decide
@@ -103,27 +61,16 @@
         // UTF-8, which is a default in many places in JCR. Secondarily
         // we try to get a jcr:encoding property besides the data property
         // to provide a possible encoding
-        String encoding = "UTF-8";
-        try {
-            Node parent = property.getParent();
-            if (parent.hasNode(DefaultSlingScriptResolver.JCR_ENCODING)) {
-                encoding = parent.getProperty(
-                    DefaultSlingScriptResolver.JCR_ENCODING).getString();
-            }
-        } catch (RepositoryException re) {
-            // don't care if we fail for any reason here, just assume
-            // default
+        ResourceMetadata meta = getScriptResource().getResourceMetadata();
+        String encoding = (String) 
meta.get(ResourceMetadata.CHARACTER_ENCODING);
+        if (encoding == null) {
+            encoding = "UTF-8";
         }
 
         // access the value as a stream and return a buffered reader
         // converting the stream data using UTF-8 encoding, which is
         // the default encoding used
-        try {
-            InputStream input = value.getStream();
-            return new BufferedReader(new InputStreamReader(input, encoding));
-        } catch (RepositoryException re) {
-            throw (IOException) new IOException("Cannot get script "
-                + getScriptResource().getURI()).initCause(re);
-        }
+        InputStream input = ((StreamProvider) 
getScriptResource()).getInputStream();
+        return new BufferedReader(new InputStreamReader(input, encoding));
     }
 }

Modified: 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/servlets/DefaultServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/servlets/DefaultServlet.java?rev=599451&r1=599450&r2=599451&view=diff
==============================================================================
--- 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/servlets/DefaultServlet.java
 (original)
+++ 
incubator/sling/trunk/sling/core/src/main/java/org/apache/sling/core/servlets/DefaultServlet.java
 Thu Nov 29 06:23:29 2007
@@ -37,6 +37,7 @@
 import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.api.request.RequestParameterMap;
 import org.apache.sling.api.resource.NonExistingResource;
+import org.apache.sling.api.resource.ObjectProvider;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceManager;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
@@ -295,12 +296,17 @@
 
     @SuppressWarnings("unchecked")
     private Map<Object, Object> asMap(Resource resource) {
-        Object object = resource.getObject();
-        if (object instanceof Map) {
-            return (Map<Object, Object>) object; // unchecked cast
+        if (resource instanceof ObjectProvider) {
+            Object object = ((ObjectProvider) resource).getObject();
+            if (object instanceof Map) {
+                return (Map<Object, Object>) object; // unchecked cast
+            }
+
+            return new BeanMap(object); // unchecked cast
         }
 
-        return new BeanMap(object); // unchecked cast
+        // no objects available
+        return null;
     }
 
     private Object toObject(RequestParameter parameter) throws IOException {


Reply via email to