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 {