You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/02/15 11:52:05 UTC
svn commit: r628008 - in /incubator/sling/trunk:
api/src/main/java/org/apache/sling/api/resource/
jcr/resource/src/main/java/org/apache/sling/jcr/resource/
jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/
jcr/resource/src/main/java/or...
Author: fmeschbe
Date: Fri Feb 15 02:52:02 2008
New Revision: 628008
URL: http://svn.apache.org/viewvc?rev=628008&view=rev
Log:
SLING-246 replace Resource.getResourceProvider() by Resource.getResourceResolver()
and adapt uses and test cases
Added:
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
Modified:
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/NonExistingResource.java
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/Resource.java
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceProvider.java
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceWrapper.java
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/SyntheticResource.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntry.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResource.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceIterator.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceProvider.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java
incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
incubator/sling/trunk/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntryTest.java
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java
incubator/sling/trunk/sling/core/src/test/java/org/apache/sling/core/impl/request/SlingRequestPathInfoTest.java
incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResource.java
incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/NonExistingResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/NonExistingResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/NonExistingResource.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/NonExistingResource.java Fri Feb 15 02:52:02 2008
@@ -23,11 +23,15 @@
*/
public final class NonExistingResource implements Resource {
+ private final ResourceResolver resourceResolver;
+
private final String resourceURI;
private final ResourceMetadata resourceMetadata;
- public NonExistingResource(String resourceURI) {
+ public NonExistingResource(ResourceResolver resourceResolver,
+ String resourceURI) {
+ this.resourceResolver = resourceResolver;
this.resourceURI = resourceURI;
resourceMetadata = new ResourceMetadata();
@@ -46,12 +50,8 @@
return resourceMetadata;
}
- /**
- * Returns <code>null</code> because this resource instance is not
- * reflected by a real resource by any provider.
- */
- public ResourceProvider getResourceProvider() {
- return null;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
/**
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/Resource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/Resource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/Resource.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/Resource.java Fri Feb 15 02:52:02 2008
@@ -69,8 +69,9 @@
ResourceMetadata getResourceMetadata();
/**
- * Returns the ResourceProvider from which this resource has been retrieved.
+ * Returns the {@link ResourceResolver} from which this resource has been
+ * retrieved.
*/
- ResourceProvider getResourceProvider();
+ ResourceResolver getResourceResolver();
}
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceProvider.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceProvider.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceProvider.java Fri Feb 15 02:52:02 2008
@@ -59,28 +59,35 @@
* is support for a JSR-311 style resource provider to support the
* parametrized URL patterns.
*
+ * @param resourceResolver The {@link ResourceResolver} to which the
+ * returned {@link Resource} is attached.
* @return <code>null</code> If this provider does not have a resource for
* the path.
* @throws SlingException may be thrown in case of any problem creating the
* <code>Resource</code> instance.
*/
- Resource getResource(HttpServletRequest request, String path);
+ Resource getResource(ResourceResolver resourceResolver,
+ HttpServletRequest request, String path);
/**
* Returns a resource from this resource provider or <code>null</code> if
* the resource provider cannot find it. The path should have one of the
* {@link #getRoots()} strings as its prefix.
*
+ * @param resourceResolver The {@link ResourceResolver} to which the
+ * returned {@link Resource} is attached.
* @return <code>null</code> If this provider does not have a resource for
* the path.
* @throws SlingException may be thrown in case of any problem creating the
* <code>Resource</code> instance.
*/
- Resource getResource(String path);
+ Resource getResource(ResourceResolver resourceResolver, String path);
/**
* Returns an <code>Iterator</code> of {@link Resource} objects loaded
- * from the children of the given <code>Resource</code>.
+ * from the children of the given <code>Resource</code>. The returned
+ * {@link Resource} instances are attached to the same
+ * {@link ResourceResolver} as the given <code>parent</code> resource.
* <p>
* This method is only called for resource providers whose root path list
* contains an entry which is a prefix for the path of the parent resource.
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceWrapper.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceWrapper.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceWrapper.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/ResourceWrapper.java Fri Feb 15 02:52:02 2008
@@ -52,8 +52,8 @@
return resource.getResourceMetadata();
}
- public ResourceProvider getResourceProvider() {
- return resource.getResourceProvider();
+ public ResourceResolver getResourceResolver() {
+ return resource.getResourceResolver();
}
public String getResourceType() {
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java Fri Feb 15 02:52:02 2008
@@ -25,6 +25,9 @@
*/
public class SyntheticResource implements Resource {
+ /** The resoure resolver to which this resource is related */
+ private final ResourceResolver resourceResolver;
+
/** The path of the synthetic resource */
private final String path;
@@ -38,7 +41,9 @@
* Creates a synthetic resource with the given <code>path</code> and
* <code>resourceType</code>.
*/
- public SyntheticResource(String path, String resourceType) {
+ public SyntheticResource(ResourceResolver resourceResolver, String path,
+ String resourceType) {
+ this.resourceResolver = resourceResolver;
this.path = path;
this.resourceType = resourceType;
this.resourceMetadata = new ResourceMetadata();
@@ -62,11 +67,11 @@
}
/**
- * Returns <code>null</code> because synthetic resources have no actual
- * data and are not provided by any {@link ResourceProvider}.
+ * Returns the {@link ResourceResolver} with which this synthetic resource
+ * is related or <code>null</code> if none.
*/
- public ResourceProvider getResourceProvider() {
- return null;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
/**
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/SyntheticResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/SyntheticResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/SyntheticResource.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/SyntheticResource.java Fri Feb 15 02:52:02 2008
@@ -20,7 +20,7 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
/**
* The <code>SyntheticResource</code> class is a simple implementation of the
@@ -70,7 +70,7 @@
}
/** synthetic resources have no provider */
- public ResourceProvider getResourceProvider() {
+ public ResourceResolver getResourceResolver() {
return null;
}
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver.java Fri Feb 15 02:52:02 2008
@@ -87,7 +87,7 @@
Resource result = resolve(pathInfo);
if (result == null) {
- result = new NonExistingResource(pathInfo);
+ result = new NonExistingResource(this, pathInfo);
}
return result;
@@ -221,8 +221,7 @@
try {
QueryResult res = JcrResourceUtil.query(getSession(), query,
language);
- return new JcrNodeResourceIterator(
- rootProvider.getResourceProvider(), res.getNodes());
+ return new JcrNodeResourceIterator(this, res.getNodes());
} catch (javax.jcr.query.InvalidQueryException iqe) {
throw new QuerySyntaxException(iqe.getMessage(), query, language,
iqe);
@@ -345,7 +344,7 @@
*/
protected Resource getResourceInternal(String path) {
- Resource resource = rootProvider.getResource(path);
+ Resource resource = rootProvider.getResource(this, path);
if (resource != null) {
resource.getResourceMetadata().setResolutionPath(path);
return resource;
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntry.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntry.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntry.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntry.java Fri Feb 15 02:52:02 2008
@@ -24,6 +24,7 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
/**
* The <code>ResourceProviderEntry</code> class represents a node in the tree
@@ -109,8 +110,8 @@
* @throws SlingException if an error occurrs trying to access an existing
* resource.
*/
- public Resource getResource(String path) {
- return getResource(path, path);
+ public Resource getResource(ResourceResolver resourceResolver, String path) {
+ return getResource(resourceResolver, path, path);
}
/**
@@ -131,9 +132,10 @@
* @throws SlingException if an error occurrs trying to access an existing
* resource.
*/
- private Resource getResource(String path, String fullPath) {
+ private Resource getResource(ResourceResolver resourceResolver,
+ String path, String fullPath) {
if (path.equals(this.path)) {
- return getResourceProvider().getResource(fullPath);
+ return getResourceProvider().getResource(resourceResolver, fullPath);
} else if (path.startsWith(this.prefix)) {
if (entries != null) {
@@ -141,7 +143,8 @@
path = path.substring(this.prefix.length());
for (ResourceProviderEntry entry : entries) {
- Resource test = entry.getResource(path, fullPath);
+ Resource test = entry.getResource(resourceResolver, path,
+ fullPath);
if (test != null) {
return test;
}
@@ -149,7 +152,7 @@
}
// no more specific provider, return mine
- return getResourceProvider().getResource(fullPath);
+ return getResourceProvider().getResource(resourceResolver, fullPath);
}
// no match for my prefix, return null
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResource.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResource.java Fri Feb 15 02:52:02 2008
@@ -28,7 +28,7 @@
import org.apache.sling.adapter.SlingAdaptable;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.jcr.resource.internal.helper.Descendable;
import org.osgi.framework.Bundle;
import org.slf4j.Logger;
@@ -41,7 +41,7 @@
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- private final ResourceProvider resourceProvider;
+ private final ResourceResolver resourceResolver;
private final Bundle bundle;
@@ -53,12 +53,12 @@
private final ResourceMetadata metadata;
- public static BundleResource getResource(ResourceProvider resourceProvider, Bundle bundle, String path) {
+ public static BundleResource getResource(ResourceResolver resourceResolver, Bundle bundle, String path) {
// if the entry has no trailing slash, try to with a trailing
// slash in case the entry would be a folder
if (!path.endsWith("/")) {
- BundleResource br = getResource(resourceProvider, bundle, path + "/");
+ BundleResource br = getResource(resourceResolver, bundle, path + "/");
if (br != null) {
return br;
}
@@ -67,15 +67,15 @@
// has trailing slash or not a folder, try path itself
URL entry = bundle.getEntry(path);
if (entry != null) {
- return new BundleResource(resourceProvider, bundle, path);
+ return new BundleResource(resourceResolver, bundle, path);
}
// the bundle does not contain the path
return null;
}
- public BundleResource(ResourceProvider resourceProvider, Bundle bundle, String path) {
- this.resourceProvider = resourceProvider;
+ public BundleResource(ResourceResolver resourceResolver, Bundle bundle, String path) {
+ this.resourceResolver = resourceResolver;
this.bundle = bundle;
this.path = path.endsWith("/")
? path.substring(0, path.length() - 1)
@@ -100,8 +100,8 @@
return metadata;
}
- public ResourceProvider getResourceProvider() {
- return resourceProvider;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
@SuppressWarnings("unchecked")
@@ -170,7 +170,7 @@
if (!isFile()) {
URL descendent = bundle.getEntry(path + relPath);
if (descendent != null) {
- new BundleResource(resourceProvider, bundle, descendent.getPath());
+ new BundleResource(resourceResolver, bundle, descendent.getPath());
}
}
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceIterator.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceIterator.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceIterator.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceIterator.java Fri Feb 15 02:52:02 2008
@@ -23,7 +23,7 @@
import java.util.NoSuchElementException;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,8 +38,8 @@
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- /** The bundle resource provider */
- private ResourceProvider resourceProvider;
+ /** The bundle resource resolver */
+ private ResourceResolver resourceResolver;
/** Bundle providing the entry resources */
private Bundle bundle;
@@ -62,7 +62,7 @@
if (parent.isFile()) {
// if the parent is a file, the iterator is empty
- this.resourceProvider = null;
+ this.resourceResolver = null;
this.bundle = null;
this.entries = null;
this.prefixLength = 0;
@@ -72,7 +72,7 @@
// trailing slash to enumerate children
String parentPath = parent.getPath() + "/";
- this.resourceProvider = parent.getResourceProvider();
+ this.resourceResolver = parent.getResourceResolver();
this.bundle = parent.getBundle();
// unchecked cast
this.entries = parent.getBundle().getEntryPaths(parentPath);
@@ -121,7 +121,7 @@
int slash = entry.indexOf('/', prefixLength);
if (slash < 0 || slash == entry.length() - 1) {
log.debug("seek: Using entry {}", entry);
- return new BundleResource(resourceProvider, bundle, entry);
+ return new BundleResource(resourceResolver, bundle, entry);
}
log.debug("seek: Ignoring entry {}", entry);
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceProvider.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceProvider.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/bundle/BundleResourceProvider.java Fri Feb 15 02:52:02 2008
@@ -28,6 +28,7 @@
import org.apache.sling.api.SlingException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Bundle;
public class BundleResourceProvider implements ResourceProvider {
@@ -62,8 +63,9 @@
return roots;
}
- public Resource getResource(HttpServletRequest request, String path) {
- return getResource(path);
+ public Resource getResource(ResourceResolver resourceResolver,
+ HttpServletRequest request, String path) {
+ return getResource(resourceResolver, path);
}
/**
@@ -71,8 +73,8 @@
* bundle of this provider. The JcrResourceResolver is ignored by this
* implementation.
*/
- public Resource getResource(String path) {
- return BundleResource.getResource(this, bundle, path);
+ public Resource getResource(ResourceResolver resourceResolver, String path) {
+ return BundleResource.getResource(resourceResolver, bundle, path);
}
public Iterator<Resource> listChildren(Resource parent)
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java Fri Feb 15 02:52:02 2008
@@ -39,7 +39,7 @@
import org.apache.sling.adapter.SlingAdaptable;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.jcr.resource.internal.helper.Descendable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,7 +51,7 @@
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- private final ResourceProvider resourceProvider;
+ private final ResourceResolver resourceResolver;
private final Node node;
@@ -61,9 +61,9 @@
private final ResourceMetadata metadata;
- JcrNodeResource(ResourceProvider resourceProvider, Node node)
+ JcrNodeResource(ResourceResolver resourceResolver, Node node)
throws RepositoryException {
- this.resourceProvider = resourceProvider;
+ this.resourceResolver = resourceResolver;
this.node = node;
this.path = node.getPath();
metadata = new ResourceMetadata();
@@ -105,8 +105,8 @@
+ ", path=" + getPath();
}
- public ResourceProvider getResourceProvider() {
- return resourceProvider;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
Node getNode() {
@@ -177,10 +177,10 @@
public Resource getDescendent(String relPath) {
try {
if (node.hasNode(relPath)) {
- return new JcrNodeResource(resourceProvider,
+ return new JcrNodeResource(resourceResolver,
node.getNode(relPath));
} else if (node.hasProperty(relPath)) {
- return new JcrPropertyResource(resourceProvider, getPath()
+ return new JcrPropertyResource(resourceResolver, getPath()
+ "/" + relPath, node.getProperty(relPath));
}
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceIterator.java Fri Feb 15 02:52:02 2008
@@ -25,7 +25,7 @@
import javax.jcr.RepositoryException;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,8 +40,8 @@
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- /** resource manager used to create resources from nodes */
- private ResourceProvider resourceProvider;
+ /** resource resolver used to create resources from nodes */
+ private ResourceResolver resourceResolver;
/** underlying node iterator to be used for resources */
private NodeIterator nodes;
@@ -57,20 +57,20 @@
try {
NodeIterator nodes = parent.getNode().getNodes();
- this.resourceProvider = parent.getResourceProvider();
+ this.resourceResolver = parent.getResourceResolver();
this.nodes = nodes;
this.nextResult = seek();
} catch (RepositoryException re) {
log.error("<init>: Cannot get children of resource " + parent, re);
- this.resourceProvider = null;
+ this.resourceResolver = null;
this.nodes = null;
this.nextResult = null;
}
}
- public JcrNodeResourceIterator(ResourceProvider resourceProvider,
+ public JcrNodeResourceIterator(ResourceResolver resourceResolver,
NodeIterator nodes) {
- this.resourceProvider = resourceProvider;
+ this.resourceResolver = resourceResolver;
this.nodes = nodes;
this.nextResult = seek();
}
@@ -100,7 +100,7 @@
private Resource seek() {
while (nodes.hasNext()) {
try {
- return new JcrNodeResource(resourceProvider, nodes.nextNode());
+ return new JcrNodeResource(resourceResolver, nodes.nextNode());
} catch (Throwable t) {
log.error(
"seek: Problem creating Resource for next node, skipping",
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrPropertyResource.java Fri Feb 15 02:52:02 2008
@@ -28,11 +28,11 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
public class JcrPropertyResource implements Resource {
- private final ResourceProvider resourceProvider;
+ private final ResourceResolver resourceResolver;
private final String path;
@@ -42,9 +42,9 @@
private final ResourceMetadata metadata;
- public JcrPropertyResource(ResourceProvider resourceProvider, String path,
+ public JcrPropertyResource(ResourceResolver resourceResolver, String path,
Property property) throws RepositoryException {
- this.resourceProvider = resourceProvider;
+ this.resourceResolver = resourceResolver;
this.path = path;
this.property = property;
this.resourceType = JcrNodeResource.getResourceTypeForNode(property.getParent())
@@ -65,8 +65,8 @@
return resourceType;
}
- public ResourceProvider getResourceProvider() {
- return resourceProvider;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
@SuppressWarnings("unchecked")
Modified: incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java (original)
+++ incubator/sling/trunk/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java Fri Feb 15 02:52:02 2008
@@ -32,6 +32,7 @@
import org.apache.sling.api.SlingException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl;
import org.apache.sling.jcr.resource.internal.helper.Descendable;
import org.slf4j.Logger;
@@ -66,15 +67,16 @@
return new String[] { "/" };
}
- public Resource getResource(HttpServletRequest request, String path)
- throws SlingException {
- return getResource(path);
+ public Resource getResource(ResourceResolver resourceResolver,
+ HttpServletRequest request, String path) throws SlingException {
+ return getResource(resourceResolver, path);
}
- public Resource getResource(String path) throws SlingException {
+ public Resource getResource(ResourceResolver resourceResolver, String path)
+ throws SlingException {
try {
- return createResource(path);
+ return createResource(resourceResolver, path);
} catch (RepositoryException re) {
throw new SlingException("Problem retrieving node based resource "
+ path, re);
@@ -88,7 +90,7 @@
}
try {
- parent = getResource(parent.getPath());
+ parent = getResource(parent.getResourceResolver(), parent.getPath());
if (parent instanceof Descendable) {
return ((Descendable) parent).listChildren();
}
@@ -121,20 +123,22 @@
* @throws AccessControlException If the item really exists but this content
* manager's session has no read access to it.
*/
- private Resource createResource(String path) throws RepositoryException {
+ private Resource createResource(ResourceResolver resourceResolver,
+ String path) throws RepositoryException {
if (itemExists(path)) {
Item item = getSession().getItem(path);
if (item.isNode()) {
log.debug(
"createResource: Found JCR Node Resource at path '{}'",
path);
- return new JcrNodeResource(this, (Node) item);
+ return new JcrNodeResource(resourceResolver, (Node) item);
}
log.debug(
"createResource: Found JCR Property Resource at path '{}'",
path);
- return new JcrPropertyResource(this, path, (Property) item);
+ return new JcrPropertyResource(resourceResolver, path,
+ (Property) item);
}
log.debug("createResource: No JCR Item exists at path '{}'", path);
Modified: incubator/sling/trunk/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntryTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntryTest.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntryTest.java (original)
+++ incubator/sling/trunk/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/ResourceProviderEntryTest.java Fri Feb 15 02:52:02 2008
@@ -19,6 +19,7 @@
package org.apache.sling.jcr.resource.internal.helper;
import java.util.Iterator;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -27,6 +28,7 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
public class ResourceProviderEntryTest extends TestCase {
@@ -48,12 +50,13 @@
}
public void testRootProvider() {
- assertNull(root.getResource("relpath"));
- assertEquals(root, root.getResource("/"));
- assertEquals(root, root.getResource("/rootel"));
- assertEquals(root, root.getResource("/rootel/child"));
- assertEquals(root, root.getResource("/apps/sling/sample/html.js"));
- assertEquals(root, root.getResource("/apps/sling/microsling/html.js"));
+ assertNull(root.getResource(null, "relpath"));
+ assertEquals(root, root.getResource(null, "/"));
+ assertEquals(root, root.getResource(null, "/rootel"));
+ assertEquals(root, root.getResource(null, "/rootel/child"));
+ assertEquals(root, root.getResource(null, "/apps/sling/sample/html.js"));
+ assertEquals(root, root.getResource(null,
+ "/apps/sling/microsling/html.js"));
}
public void testAdd1Provider() {
@@ -61,15 +64,15 @@
ResourceProvider first = new TestResourceProvider(firstPath);
root.addResourceProvider(firstPath, first);
- assertEquals(root, root.getResource("/"));
- assertEquals(first, root.getResource("/rootel"));
- assertEquals(first, root.getResource("/rootel/html.js"));
- assertEquals(first, root.getResource("/rootel/child"));
- assertEquals(first, root.getResource("/rootel/child/html.js"));
- assertEquals(rootProvider,
- root.getResource("/apps/sling/sample/html.js"));
- assertEquals(rootProvider,
- root.getResource("/apps/sling/microsling/html.js"));
+ assertEquals(root, root.getResource(null, "/"));
+ assertEquals(first, root.getResource(null, "/rootel"));
+ assertEquals(first, root.getResource(null, "/rootel/html.js"));
+ assertEquals(first, root.getResource(null, "/rootel/child"));
+ assertEquals(first, root.getResource(null, "/rootel/child/html.js"));
+ assertEquals(rootProvider, root.getResource(null,
+ "/apps/sling/sample/html.js"));
+ assertEquals(rootProvider, root.getResource(null,
+ "/apps/sling/microsling/html.js"));
}
public void testAdd3Providers() {
@@ -85,14 +88,15 @@
root.addResourceProvider(secondPath, second);
root.addResourceProvider(thirdPath, third);
- assertEquals(rootProvider, root.getResource("/"));
- assertEquals(first, root.getResource("/rootel"));
- assertEquals(first, root.getResource("/rootel/html.js"));
- assertEquals(second, root.getResource("/rootel/child"));
- assertEquals(second, root.getResource("/rootel/child/html.js"));
- assertEquals(third, root.getResource("/apps/sling/sample/html.js"));
- assertEquals(rootProvider,
- root.getResource("/apps/sling/microsling/html.js"));
+ assertEquals(rootProvider, root.getResource(null, "/"));
+ assertEquals(first, root.getResource(null, "/rootel"));
+ assertEquals(first, root.getResource(null, "/rootel/html.js"));
+ assertEquals(second, root.getResource(null, "/rootel/child"));
+ assertEquals(second, root.getResource(null, "/rootel/child/html.js"));
+ assertEquals(third,
+ root.getResource(null, "/apps/sling/sample/html.js"));
+ assertEquals(rootProvider, root.getResource(null,
+ "/apps/sling/microsling/html.js"));
}
public void testAdd3ProvidersReverse() {
@@ -108,14 +112,15 @@
root.addResourceProvider(secondPath, second);
root.addResourceProvider(firstPath, first);
- assertEquals(rootProvider, root.getResource("/"));
- assertEquals(first, root.getResource("/rootel"));
- assertEquals(first, root.getResource("/rootel/html.js"));
- assertEquals(second, root.getResource("/rootel/child"));
- assertEquals(second, root.getResource("/rootel/child/html.js"));
- assertEquals(third, root.getResource("/apps/sling/sample/html.js"));
- assertEquals(rootProvider,
- root.getResource("/apps/sling/microsling/html.js"));
+ assertEquals(rootProvider, root.getResource(null, "/"));
+ assertEquals(first, root.getResource(null, "/rootel"));
+ assertEquals(first, root.getResource(null, "/rootel/html.js"));
+ assertEquals(second, root.getResource(null, "/rootel/child"));
+ assertEquals(second, root.getResource(null, "/rootel/child/html.js"));
+ assertEquals(third,
+ root.getResource(null, "/apps/sling/sample/html.js"));
+ assertEquals(rootProvider, root.getResource(null,
+ "/apps/sling/microsling/html.js"));
}
public void testRemoveProviders() {
@@ -131,32 +136,38 @@
root.addResourceProvider(secondPath, second);
root.addResourceProvider(thirdPath, third);
- assertEquals(rootProvider, root.getResource("/"));
- assertEquals(first, root.getResource("/rootel/html.js"));
- assertEquals(second, root.getResource("/rootel/child/html.js"));
+ assertEquals(rootProvider, root.getResource(null, "/"));
+ assertEquals(first, root.getResource(null, "/rootel/html.js"));
+ assertEquals(second, root.getResource(null, "/rootel/child/html.js"));
root.removeResourceProvider(firstPath);
- assertEquals(rootProvider, root.getResource("/"));
- assertEquals(rootProvider, root.getResource("/rootel/html.js"));
- assertEquals(second, root.getResource("/rootel/child/html.js"));
+ assertEquals(rootProvider, root.getResource(null, "/"));
+ assertEquals(rootProvider, root.getResource(null, "/rootel/html.js"));
+ assertEquals(second, root.getResource(null, "/rootel/child/html.js"));
root.addResourceProvider(firstPath, first);
- assertEquals(rootProvider, root.getResource("/"));
- assertEquals(first, root.getResource("/rootel/html.js"));
- assertEquals(second, root.getResource("/rootel/child/html.js"));
+ assertEquals(rootProvider, root.getResource(null, "/"));
+ assertEquals(first, root.getResource(null, "/rootel/html.js"));
+ assertEquals(second, root.getResource(null, "/rootel/child/html.js"));
}
protected void assertEquals(ResourceProvider resProvider, Resource res) {
- assertEquals(resProvider, res.getResourceProvider());
+ assertEquals(resProvider, res.getResourceResolver());
}
-
- protected void assertEquals(ResourceProviderEntry resProviderEntry, Resource res) {
- assertEquals(resProviderEntry.getResourceProvider(), res.getResourceProvider());
+
+ protected void assertEquals(ResourceProviderEntry resProviderEntry,
+ Resource res) {
+ assertEquals(resProviderEntry.getResourceProvider(),
+ res.getResourceResolver());
}
- private static class TestResourceProvider implements ResourceProvider {
+ // The test provider implements the ResourceResolver interface and sets
+ // itself on the returned resource. This way the assertEquals methods above
+ // may identify whether a resource has been returned from the expected
+ // ResourceProvider
+ private static class TestResourceProvider implements ResourceProvider, ResourceResolver {
private final String[] roots;
@@ -164,11 +175,12 @@
roots = new String[] { root };
}
- public Resource getResource(HttpServletRequest request, String path) {
- return null;
+ public Resource getResource(ResourceResolver resolver,
+ HttpServletRequest request, String path) {
+ return getResource(resolver, path);
}
- public Resource getResource(String path) {
+ public Resource getResource(ResourceResolver resolver, String path) {
return new TestResource(path, this);
}
@@ -179,18 +191,57 @@
public Iterator<Resource> listChildren(Resource parent) {
return null;
}
+
+ // just dummy implementation to mark our resources for the tests
+ public Iterator<Resource> findResources(String query, String language) {
+ return null;
+ }
+
+ public Resource getResource(String path) {
+ return null;
+ }
+
+ public Resource getResource(Resource base, String path) {
+ return null;
+ }
+
+ public String[] getSearchPath() {
+ return null;
+ }
+
+ public String map(String resourcePath) {
+ return null;
+ }
+
+ public Iterator<Map<String, Object>> queryResources(String query,
+ String language) {
+ return null;
+ }
+
+ public Resource resolve(HttpServletRequest request) {
+ return null;
+ }
+
+ public Resource resolve(String absPath) {
+ return null;
+ }
+
+ public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+ return null;
+ }
}
-
+
private static class TestResource implements Resource {
private final String path;
- private final ResourceProvider resourceProvider;
- public TestResource(String path, ResourceProvider resourceProvider) {
+ private final ResourceResolver resourceResolver;
+
+ public TestResource(String path, ResourceResolver resourceResolver) {
this.path = path;
- this.resourceProvider = resourceProvider;
+ this.resourceResolver = resourceResolver;
}
-
+
public String getPath() {
return path;
}
@@ -199,8 +250,8 @@
return null;
}
- public ResourceProvider getResourceProvider() {
- return resourceProvider;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
public String getResourceType() {
@@ -210,6 +261,6 @@
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
return null;
}
-
+
}
}
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java Fri Feb 15 02:52:02 2008
@@ -23,9 +23,12 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.scripting.javascript.helper.SlingWrapper;
import org.mozilla.javascript.Context;
+import org.mozilla.javascript.Function;
import org.mozilla.javascript.ScriptRuntime;
+import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.Undefined;
+import org.mozilla.javascript.Wrapper;
/**
* Resource in JavaScript has following signature: [Object] getData(); [Object]
@@ -60,17 +63,11 @@
}
public Object jsFunction_getObject() {
- Object object = resource.adaptTo(Object.class);
- return (object != null) ? object : Undefined.instance;
+ return toJS(resource.adaptTo(Object.class));
}
public Object jsFunction_getNode() {
- Node node = resource.adaptTo(Node.class);
- Object result = Undefined.instance;
- if(node != null) {
- result = ScriptRuntime.toObject(this,node);
- }
- return result;
+ return toJS(resource.adaptTo(Node.class));
}
/** alias for getNode */
@@ -86,20 +83,20 @@
return this.jsFunction_getResourceType();
}
- public Object jsFunction_getPath() {
- return Context.javaToJS(resource.getPath(), this);
+ public String jsFunction_getPath() {
+ return resource.getPath();
}
- public Object jsGet_path() {
+ public String jsGet_path() {
return this.jsFunction_getPath();
}
public Object jsFunction_getMetadata() {
- return resource.getResourceMetadata();
+ return toJS(resource.getResourceMetadata());
}
public Object jsGet_meta() {
- return resource.getResourceMetadata();
+ return jsFunction_getMetadata();
}
// TODO a wrapper would be more convenient than an Iterator,
@@ -107,7 +104,54 @@
// proper wrapping of its elements: javascript constructor
// not found when scope = ScriptableItemMap
public Iterator<Resource> jsGet_children() {
- return resource.getResourceProvider().listChildren(resource);
+ return resource.getResourceResolver().listChildren(resource);
+ }
+
+ public Object jsFunction_getResourceResolver() {
+ return toJS(resource.getResourceResolver());
+ }
+
+ public Object jsGet_resourceResolver() {
+ return jsFunction_getResourceResolver();
+ }
+
+ public static Object jsFunction_adaptTo(Context cx, Scriptable thisObj,
+ Object[] args, Function funObj) {
+
+ // get and unwrap the argument
+ Object arg = (args.length > 0) ? args[0] : null;
+ while (arg instanceof Wrapper) {
+ arg = ((Wrapper) arg).unwrap();
+ }
+
+ // try to get the Class object for the argument
+ Class<?> adapter = null;
+ if (arg instanceof Class) {
+
+ adapter = (Class<?>) arg;
+
+ } else if (arg != null && arg != Undefined.instance) {
+
+ // try loading the class from the String
+ String className = ScriptRuntime.toString(arg);
+ try {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ if (loader == null) {
+ loader = thisObj.getClass().getClassLoader();
+ }
+ adapter = Class.forName(className, true, loader);
+ } catch (Exception e) {
+ // TODO: log exception
+ }
+
+ }
+
+ if (adapter != null) {
+ ScriptableResource sr = (ScriptableResource) thisObj;
+ return sr.toJS(sr.resource.adaptTo(adapter));
+ }
+
+ return Undefined.instance;
}
@Override
@@ -126,4 +170,13 @@
return resource;
}
+ //---------- Internal helper ----------------------------------------------
+
+ private Object toJS(Object javaObject) {
+ if (javaObject == null) {
+ return Undefined.instance;
+ }
+
+ return ScriptRuntime.toObject(this, javaObject);
+ }
}
Added: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java?rev=628008&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java Fri Feb 15 02:52:02 2008
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.scripting.wrapper;
+
+import javax.jcr.Item;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+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.scripting.RepositoryScriptingTestBase;
+import org.apache.sling.scripting.ScriptEngineHelper;
+import org.mozilla.javascript.Undefined;
+import org.mozilla.javascript.Wrapper;
+
+public class ScriptableResourceTest extends RepositoryScriptingTestBase {
+
+ private Node node;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ node = getNewNode();
+ }
+
+ public void testDefaultValuePath() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("resource", new TestResource(node));
+
+ // the path of the resource
+ assertEquals(node.getPath(), script.evalToString("out.print(resource)",
+ data));
+ assertEquals(node.getPath(), script.eval("resource.path", data));
+ assertEquals(node.getPath(), script.eval("resource.getPath()", data));
+ }
+
+ public void testNode() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("resource", new TestResource(node));
+
+ // the path of the resource
+ assertEquals(node, script.eval("resource.node", data));
+ assertEquals(node, script.eval("resource.getNode()", data));
+ }
+
+ public void testAdaptToNode() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("resource", new TestResource(node));
+
+ // the node to which the resource adapts
+ assertEquals(node, script.eval("resource.adaptTo('javax.jcr.Node')",
+ data));
+ assertEquals(node, script.eval(
+ "resource.adaptTo(Packages.javax.jcr.Node)", data));
+ }
+
+ public void testAdaptToNothing() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("resource", new TestResource(node));
+
+ // the node to which the resource adapts
+ assertEquals(Undefined.instance,
+ script.eval("resource.adaptTo()", data));
+ assertEquals(Undefined.instance, script.eval("resource.adaptTo(null)",
+ data));
+ assertEquals(Undefined.instance, script.eval(
+ "resource.adaptTo(undefined)", data));
+ assertEquals(Undefined.instance, script.eval(
+ "resource.adaptTo(Packages.java.util.Date)", data));
+ }
+
+ private void assertEquals(Node expected, Object actual) {
+ while (actual instanceof Wrapper) {
+ actual = ((Wrapper) actual).unwrap();
+ }
+
+ super.assertEquals(expected, actual);
+ }
+
+ private static class TestResource implements Resource {
+
+ private final Node node;
+
+ private final String path;
+
+ private final String resourceType;
+
+ private final ResourceMetadata metadata;
+
+ TestResource(Node node) throws RepositoryException {
+ this.node = node;
+ this.path = node.getPath();
+ this.resourceType = node.getPrimaryNodeType().getName();
+ this.metadata = new ResourceMetadata();
+ this.metadata.setResolutionPath(this.path);
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public ResourceMetadata getResourceMetadata() {
+ return metadata;
+ }
+
+ public ResourceResolver getResourceResolver() {
+ // none, don't care
+ return null;
+ }
+
+ public String getResourceType() {
+ return resourceType;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+ if (type == Node.class || type == Item.class) {
+ return (AdapterType) node;
+ }
+
+ return null;
+ }
+
+ }
+
+}
Modified: incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java (original)
+++ incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java Fri Feb 15 02:52:02 2008
@@ -94,7 +94,8 @@
Resource tmp = request.getResourceResolver().resolve(path);
if (tmp == null && resourceType != null) {
opts = null; // not needed
- resource = new SyntheticResource(path, resourceType);
+ resource = new SyntheticResource(
+ request.getResourceResolver(), path, resourceType);
}
}
}
Modified: incubator/sling/trunk/sling/core/src/test/java/org/apache/sling/core/impl/request/SlingRequestPathInfoTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/core/src/test/java/org/apache/sling/core/impl/request/SlingRequestPathInfoTest.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/sling/core/src/test/java/org/apache/sling/core/impl/request/SlingRequestPathInfoTest.java (original)
+++ incubator/sling/trunk/sling/core/src/test/java/org/apache/sling/core/impl/request/SlingRequestPathInfoTest.java Fri Feb 15 02:52:02 2008
@@ -21,7 +21,7 @@
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
-import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
/** Test the SlingRequestPathInfo class */
public class SlingRequestPathInfoTest extends TestCase {
@@ -287,7 +287,7 @@
return metadata;
}
- public ResourceProvider getResourceProvider() {
+ public ResourceResolver getResourceResolver() {
return null;
}
Modified: incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResource.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResource.java (original)
+++ incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResource.java Fri Feb 15 02:52:02 2008
@@ -24,10 +24,11 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
-public class ServletResource extends SlingAdaptable implements Resource {
+class ServletResource extends SlingAdaptable implements Resource {
- private final ResourceProvider resourceProvider;
+ private final ResourceResolver resourceResolver;
private final Servlet servlet;
@@ -35,9 +36,9 @@
private final ResourceMetadata metadata;
- public ServletResource(ResourceProvider resourceProvider, Servlet servlet,
+ ServletResource(ResourceResolver resourceResolver, Servlet servlet,
String path) {
- this.resourceProvider = resourceProvider;
+ this.resourceResolver = resourceResolver;
this.servlet = servlet;
this.path = path;
@@ -49,8 +50,8 @@
return metadata;
}
- public ResourceProvider getResourceProvider() {
- return resourceProvider;
+ public ResourceResolver getResourceResolver() {
+ return resourceResolver;
}
public String getResourceType() {
Modified: incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java?rev=628008&r1=628007&r2=628008&view=diff
==============================================================================
--- incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java (original)
+++ incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java Fri Feb 15 02:52:02 2008
@@ -25,23 +25,29 @@
import static org.apache.sling.servlet.resolver.ServletResolverConstants.SLING_SERVLET_SELECTORS;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
import javax.servlet.Servlet;
import javax.servlet.http.HttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.osgi.commons.OsgiUtil;
import org.apache.sling.servlet.resolver.helper.PathSupport;
import org.osgi.framework.ServiceReference;
public class ServletResourceProvider implements ResourceProvider {
- private Map<String, ServletResource> servletMap;
+ private final Servlet servlet;
+
+ private Set<String> resourcePaths;
public static ServletResourceProvider create(ServiceReference ref,
Servlet servlet, String servletRoot) {
@@ -49,7 +55,7 @@
// check whether explicit paths are set
String[] paths = OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_PATHS));
if (paths != null && paths.length > 0) {
- for (int i=0; i < paths.length; i++) {
+ for (int i = 0; i < paths.length; i++) {
if (!paths[i].startsWith("/")) {
paths[i] = servletRoot + paths[i];
}
@@ -68,29 +74,29 @@
// check for selectors
String[] selectors = OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_SELECTORS));
if (selectors == null) {
- selectors = new String[]{ null };
+ selectors = new String[] { null };
}
-
+
// we have types and expect extensions and/or methods
String[] extensions = OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_EXTENSIONS));
String[] methods = OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_METHODS));
-// if ((extensions == null || extensions.length == 0)
-// && (methods == null || methods.length == 0)) {
-// // TODO: should log, why we ignore this servlet
-// return null;
-// }
+ // if ((extensions == null || extensions.length == 0)
+ // && (methods == null || methods.length == 0)) {
+ // // TODO: should log, why we ignore this servlet
+ // return null;
+ // }
List<String> pathList = new ArrayList<String>();
for (String type : types) {
-
+
// ensure namespace prefixes are converted to slashes
type = PathSupport.toPath(type);
-
+
// make absolute if relative
if (!type.startsWith("/")) {
type = servletRoot + type;
}
-
+
// ensure trailing slash for full path building
if (!type.endsWith("/")) {
type += "/";
@@ -98,14 +104,14 @@
// add entries for each selector combined with each ext and method
for (String selector : selectors) {
-
+
String selPath = type;
if (selector != null && selector.length() > 0) {
selPath += selector.replace('.', '/') + "/";
}
boolean pathAdded = false;
-
+
// create paths with extensions
if (extensions != null) {
for (String ext : extensions) {
@@ -121,10 +127,10 @@
pathAdded = true;
}
}
-
+
// if neither methods nore extensions were added
if (!pathAdded) {
- pathList.add(selPath.substring(0, selPath.length()-1));
+ pathList.add(selPath.substring(0, selPath.length() - 1));
}
}
}
@@ -134,28 +140,73 @@
}
private ServletResourceProvider(String[] paths, Servlet servlet) {
- servletMap = new HashMap<String, ServletResource>();
- for (String path : paths) {
- ServletResource res = new ServletResource(this, servlet, path);
- servletMap.put(path, res);
- }
+ this.servlet = servlet;
+ this.resourcePaths = new HashSet<String>(Arrays.asList(paths));
}
- public Resource getResource(HttpServletRequest request, String path) {
- return getResource(path);
+ public Resource getResource(ResourceResolver resourceResolver,
+ HttpServletRequest request, String path) {
+ return getResource(resourceResolver, path);
}
- public Resource getResource(String path) {
- return servletMap.get(path);
- }
+ public Resource getResource(ResourceResolver resourceResolver, String path) {
+ if (resourcePaths.contains(path)) {
+ return new ServletResource(resourceResolver, servlet, path);
+ }
- public Iterator<Resource> listChildren(Resource parent) {
- // the resource provider only has exact paths no children
return null;
}
+ public Iterator<Resource> listChildren(final Resource parent) {
+ return new Iterator<Resource>() {
+
+ private Iterator<String> pathIter;
+
+ private String parentPath;
+
+ private Resource next;
+
+ {
+ pathIter = resourcePaths.iterator();
+ parentPath = parent.getPath() + "/";
+ next = seek();
+ }
+
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ public Resource next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ Resource result = next;
+ next = seek();
+ return result;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException("remove");
+ }
+
+ private Resource seek() {
+ while (pathIter.hasNext()) {
+ String path = pathIter.next();
+ if (path.startsWith(parentPath)
+ && path.indexOf('/', parentPath.length()) < 0) {
+ return new ServletResource(
+ parent.getResourceResolver(), servlet, path);
+ }
+ }
+
+ return null;
+ }
+
+ };
+ }
+
public String[] getSerlvetPaths() {
- return servletMap.keySet().toArray(
- new String[servletMap.keySet().size()]);
+ return resourcePaths.toArray(new String[resourcePaths.size()]);
}
}