You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2016/11/28 18:11:34 UTC

svn commit: r1771782 - /sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java

Author: radu
Date: Mon Nov 28 18:11:34 2016
New Revision: 1771782

URL: http://svn.apache.org/viewvc?rev=1771782&view=rev
Log:
SLING-6336 - Implement a ResourceResolverWrapper

Added:
    sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java

Added: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java?rev=1771782&view=auto
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java (added)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java Mon Nov 28 18:11:34 2016
@@ -0,0 +1,210 @@
+/*******************************************************************************
+ * 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.api.resource;
+
+import java.util.Iterator;
+import java.util.Map;
+import javax.annotation.Nonnull;
+import javax.servlet.http.HttpServletRequest;
+
+import org.osgi.annotation.versioning.ConsumerType;
+
+/**
+ * The {@code ResourceResolverWrapper} is a wrapper for any {@code ResourceResolver}, delegating all method calls to the wrapped resource
+ * resolver by default. Extensions of this class may overwrite any method to return different values as appropriate.
+ */
+@ConsumerType
+public class ResourceResolverWrapper implements ResourceResolver {
+
+    private ResourceResolver wrapped;
+
+    public ResourceResolverWrapper(ResourceResolver resolver) {
+        wrapped = resolver;
+    }
+
+    @Nonnull
+    @Override
+    public Resource resolve(@Nonnull HttpServletRequest request, @Nonnull String absPath) {
+        return wrapped.resolve(request, absPath);
+    }
+
+    @Nonnull
+    @Override
+    public Resource resolve(@Nonnull String absPath) {
+        return wrapped.resolve(absPath);
+    }
+
+    @Nonnull
+    @Override
+    public Resource resolve(@Nonnull HttpServletRequest request) {
+        return wrapped.resolve(request);
+    }
+
+    @Nonnull
+    @Override
+    public String map(@Nonnull String resourcePath) {
+        return wrapped.map(resourcePath);
+    }
+
+    @Override
+    public String map(@Nonnull HttpServletRequest request, @Nonnull String resourcePath) {
+        return wrapped.map(request, resourcePath);
+    }
+
+    @Override
+    public Resource getResource(@Nonnull String path) {
+        return wrapped.getResource(path);
+    }
+
+    @Override
+    public Resource getResource(Resource base, @Nonnull String path) {
+        return wrapped.getResource(base, path);
+    }
+
+    @Nonnull
+    @Override
+    public String[] getSearchPath() {
+        return wrapped.getSearchPath();
+    }
+
+    @Nonnull
+    @Override
+    public Iterator<Resource> listChildren(@Nonnull Resource parent) {
+        return wrapped.listChildren(parent);
+    }
+
+    @Override
+    public Resource getParent(@Nonnull Resource child) {
+        return wrapped.getParent(child);
+    }
+
+    @Nonnull
+    @Override
+    public Iterable<Resource> getChildren(@Nonnull Resource parent) {
+        return wrapped.getChildren(parent);
+    }
+
+    @Nonnull
+    @Override
+    public Iterator<Resource> findResources(@Nonnull String query, String language) {
+        return wrapped.findResources(query, language);
+    }
+
+    @Nonnull
+    @Override
+    public Iterator<Map<String, Object>> queryResources(@Nonnull String query, String language) {
+        return wrapped.queryResources(query, language);
+    }
+
+    @Override
+    public boolean hasChildren(@Nonnull Resource resource) {
+        return wrapped.hasChildren(resource);
+    }
+
+    @Nonnull
+    @Override
+    public ResourceResolver clone(Map<String, Object> authenticationInfo) throws LoginException {
+        return wrapped.clone(authenticationInfo);
+    }
+
+    @Override
+    public boolean isLive() {
+        return wrapped.isLive();
+    }
+
+    @Override
+    public void close() {
+        wrapped.close();
+    }
+
+    @Override
+    public String getUserID() {
+        return wrapped.getUserID();
+    }
+
+    @Nonnull
+    @Override
+    public Iterator<String> getAttributeNames() {
+        return wrapped.getAttributeNames();
+    }
+
+    @Override
+    public Object getAttribute(@Nonnull String name) {
+        return wrapped.getAttribute(name);
+    }
+
+    @Override
+    public void delete(@Nonnull Resource resource) throws PersistenceException {
+        wrapped.delete(resource);
+    }
+
+    @Nonnull
+    @Override
+    public Resource create(@Nonnull Resource parent, @Nonnull String name, Map<String, Object> properties) throws PersistenceException {
+        return wrapped.create(parent, name, properties);
+    }
+
+    @Override
+    public void revert() {
+        wrapped.revert();
+    }
+
+    @Override
+    public void commit() throws PersistenceException {
+        wrapped.commit();
+    }
+
+    @Override
+    public boolean hasChanges() {
+        return wrapped.hasChanges();
+    }
+
+    @Override
+    public String getParentResourceType(Resource resource) {
+        return wrapped.getParentResourceType(resource);
+    }
+
+    @Override
+    public String getParentResourceType(String resourceType) {
+        return wrapped.getParentResourceType(resourceType);
+    }
+
+    @Override
+    public boolean isResourceType(Resource resource, String resourceType) {
+        return wrapped.isResourceType(resource, resourceType);
+    }
+
+    @Override
+    public void refresh() {
+        wrapped.refresh();
+    }
+
+    @Override
+    public Resource copy(String srcAbsPath, String destAbsPath) throws PersistenceException {
+        return wrapped.copy(srcAbsPath, destAbsPath);
+    }
+
+    @Override
+    public Resource move(String srcAbsPath, String destAbsPath) throws PersistenceException {
+        return wrapped.move(srcAbsPath, destAbsPath);
+    }
+
+    @Override
+    public <AdapterType> AdapterType adaptTo(@Nonnull Class<AdapterType> type) {
+        return wrapped.adaptTo(type);
+    }
+}



Re: svn commit: r1771782 - /sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java

Posted by Radu Cotescu <ra...@apache.org>.
Hi Julian,

You're right, we should also wrap the returned resources. I've just replied
on JIRA a couple of minutes ago.

Thanks,
Radu

On Mon, 28 Nov 2016 at 19:15 Julian Sedding <js...@gmail.com> wrote:

> Hi Radu
>
> I would argue that this implementation is incorrect.
>
> Consider that with this implementation resolver !=
> resolver.getResource("/foo").getResourceResolver(), which should be
> the case IMHO.
>
> I commented on the issue with two tickets, where the same feature was
> previously discussed. The tickets also have patches attached, which
> implement proper (or deep) wrapping of the ResourceResolver.
>
> Regards
> Julian
>
>
>
> On Mon, Nov 28, 2016 at 7:11 PM,  <ra...@apache.org> wrote:
> > Author: radu
> > Date: Mon Nov 28 18:11:34 2016
> > New Revision: 1771782
> >
> > URL: http://svn.apache.org/viewvc?rev=1771782&view=rev
> > Log:
> > SLING-6336 - Implement a ResourceResolverWrapper
> >
> > Added:
> >
>  sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
> >
> > Added:
> sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
> > URL:
> http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java?rev=1771782&view=auto
> >
> ==============================================================================
> > ---
> sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
> (added)
> > +++
> sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
> Mon Nov 28 18:11:34 2016
> > @@ -0,0 +1,210 @@
> >
> +/*******************************************************************************
> > + * 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.api.resource;
> > +
> > +import java.util.Iterator;
> > +import java.util.Map;
> > +import javax.annotation.Nonnull;
> > +import javax.servlet.http.HttpServletRequest;
> > +
> > +import org.osgi.annotation.versioning.ConsumerType;
> > +
> > +/**
> > + * The {@code ResourceResolverWrapper} is a wrapper for any {@code
> ResourceResolver}, delegating all method calls to the wrapped resource
> > + * resolver by default. Extensions of this class may overwrite any
> method to return different values as appropriate.
> > + */
> > +@ConsumerType
> > +public class ResourceResolverWrapper implements ResourceResolver {
> > +
> > +    private ResourceResolver wrapped;
> > +
> > +    public ResourceResolverWrapper(ResourceResolver resolver) {
> > +        wrapped = resolver;
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Resource resolve(@Nonnull HttpServletRequest request,
> @Nonnull String absPath) {
> > +        return wrapped.resolve(request, absPath);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Resource resolve(@Nonnull String absPath) {
> > +        return wrapped.resolve(absPath);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Resource resolve(@Nonnull HttpServletRequest request) {
> > +        return wrapped.resolve(request);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public String map(@Nonnull String resourcePath) {
> > +        return wrapped.map(resourcePath);
> > +    }
> > +
> > +    @Override
> > +    public String map(@Nonnull HttpServletRequest request, @Nonnull
> String resourcePath) {
> > +        return wrapped.map(request, resourcePath);
> > +    }
> > +
> > +    @Override
> > +    public Resource getResource(@Nonnull String path) {
> > +        return wrapped.getResource(path);
> > +    }
> > +
> > +    @Override
> > +    public Resource getResource(Resource base, @Nonnull String path) {
> > +        return wrapped.getResource(base, path);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public String[] getSearchPath() {
> > +        return wrapped.getSearchPath();
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Iterator<Resource> listChildren(@Nonnull Resource parent) {
> > +        return wrapped.listChildren(parent);
> > +    }
> > +
> > +    @Override
> > +    public Resource getParent(@Nonnull Resource child) {
> > +        return wrapped.getParent(child);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Iterable<Resource> getChildren(@Nonnull Resource parent) {
> > +        return wrapped.getChildren(parent);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Iterator<Resource> findResources(@Nonnull String query,
> String language) {
> > +        return wrapped.findResources(query, language);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Iterator<Map<String, Object>> queryResources(@Nonnull String
> query, String language) {
> > +        return wrapped.queryResources(query, language);
> > +    }
> > +
> > +    @Override
> > +    public boolean hasChildren(@Nonnull Resource resource) {
> > +        return wrapped.hasChildren(resource);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public ResourceResolver clone(Map<String, Object>
> authenticationInfo) throws LoginException {
> > +        return wrapped.clone(authenticationInfo);
> > +    }
> > +
> > +    @Override
> > +    public boolean isLive() {
> > +        return wrapped.isLive();
> > +    }
> > +
> > +    @Override
> > +    public void close() {
> > +        wrapped.close();
> > +    }
> > +
> > +    @Override
> > +    public String getUserID() {
> > +        return wrapped.getUserID();
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Iterator<String> getAttributeNames() {
> > +        return wrapped.getAttributeNames();
> > +    }
> > +
> > +    @Override
> > +    public Object getAttribute(@Nonnull String name) {
> > +        return wrapped.getAttribute(name);
> > +    }
> > +
> > +    @Override
> > +    public void delete(@Nonnull Resource resource) throws
> PersistenceException {
> > +        wrapped.delete(resource);
> > +    }
> > +
> > +    @Nonnull
> > +    @Override
> > +    public Resource create(@Nonnull Resource parent, @Nonnull String
> name, Map<String, Object> properties) throws PersistenceException {
> > +        return wrapped.create(parent, name, properties);
> > +    }
> > +
> > +    @Override
> > +    public void revert() {
> > +        wrapped.revert();
> > +    }
> > +
> > +    @Override
> > +    public void commit() throws PersistenceException {
> > +        wrapped.commit();
> > +    }
> > +
> > +    @Override
> > +    public boolean hasChanges() {
> > +        return wrapped.hasChanges();
> > +    }
> > +
> > +    @Override
> > +    public String getParentResourceType(Resource resource) {
> > +        return wrapped.getParentResourceType(resource);
> > +    }
> > +
> > +    @Override
> > +    public String getParentResourceType(String resourceType) {
> > +        return wrapped.getParentResourceType(resourceType);
> > +    }
> > +
> > +    @Override
> > +    public boolean isResourceType(Resource resource, String
> resourceType) {
> > +        return wrapped.isResourceType(resource, resourceType);
> > +    }
> > +
> > +    @Override
> > +    public void refresh() {
> > +        wrapped.refresh();
> > +    }
> > +
> > +    @Override
> > +    public Resource copy(String srcAbsPath, String destAbsPath) throws
> PersistenceException {
> > +        return wrapped.copy(srcAbsPath, destAbsPath);
> > +    }
> > +
> > +    @Override
> > +    public Resource move(String srcAbsPath, String destAbsPath) throws
> PersistenceException {
> > +        return wrapped.move(srcAbsPath, destAbsPath);
> > +    }
> > +
> > +    @Override
> > +    public <AdapterType> AdapterType adaptTo(@Nonnull
> Class<AdapterType> type) {
> > +        return wrapped.adaptTo(type);
> > +    }
> > +}
> >
> >
>

Re: svn commit: r1771782 - /sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java

Posted by Julian Sedding <js...@gmail.com>.
Hi Radu

I would argue that this implementation is incorrect.

Consider that with this implementation resolver !=
resolver.getResource("/foo").getResourceResolver(), which should be
the case IMHO.

I commented on the issue with two tickets, where the same feature was
previously discussed. The tickets also have patches attached, which
implement proper (or deep) wrapping of the ResourceResolver.

Regards
Julian



On Mon, Nov 28, 2016 at 7:11 PM,  <ra...@apache.org> wrote:
> Author: radu
> Date: Mon Nov 28 18:11:34 2016
> New Revision: 1771782
>
> URL: http://svn.apache.org/viewvc?rev=1771782&view=rev
> Log:
> SLING-6336 - Implement a ResourceResolverWrapper
>
> Added:
>     sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
>
> Added: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java
> URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java?rev=1771782&view=auto
> ==============================================================================
> --- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java (added)
> +++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceResolverWrapper.java Mon Nov 28 18:11:34 2016
> @@ -0,0 +1,210 @@
> +/*******************************************************************************
> + * 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.api.resource;
> +
> +import java.util.Iterator;
> +import java.util.Map;
> +import javax.annotation.Nonnull;
> +import javax.servlet.http.HttpServletRequest;
> +
> +import org.osgi.annotation.versioning.ConsumerType;
> +
> +/**
> + * The {@code ResourceResolverWrapper} is a wrapper for any {@code ResourceResolver}, delegating all method calls to the wrapped resource
> + * resolver by default. Extensions of this class may overwrite any method to return different values as appropriate.
> + */
> +@ConsumerType
> +public class ResourceResolverWrapper implements ResourceResolver {
> +
> +    private ResourceResolver wrapped;
> +
> +    public ResourceResolverWrapper(ResourceResolver resolver) {
> +        wrapped = resolver;
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Resource resolve(@Nonnull HttpServletRequest request, @Nonnull String absPath) {
> +        return wrapped.resolve(request, absPath);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Resource resolve(@Nonnull String absPath) {
> +        return wrapped.resolve(absPath);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Resource resolve(@Nonnull HttpServletRequest request) {
> +        return wrapped.resolve(request);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public String map(@Nonnull String resourcePath) {
> +        return wrapped.map(resourcePath);
> +    }
> +
> +    @Override
> +    public String map(@Nonnull HttpServletRequest request, @Nonnull String resourcePath) {
> +        return wrapped.map(request, resourcePath);
> +    }
> +
> +    @Override
> +    public Resource getResource(@Nonnull String path) {
> +        return wrapped.getResource(path);
> +    }
> +
> +    @Override
> +    public Resource getResource(Resource base, @Nonnull String path) {
> +        return wrapped.getResource(base, path);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public String[] getSearchPath() {
> +        return wrapped.getSearchPath();
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Iterator<Resource> listChildren(@Nonnull Resource parent) {
> +        return wrapped.listChildren(parent);
> +    }
> +
> +    @Override
> +    public Resource getParent(@Nonnull Resource child) {
> +        return wrapped.getParent(child);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Iterable<Resource> getChildren(@Nonnull Resource parent) {
> +        return wrapped.getChildren(parent);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Iterator<Resource> findResources(@Nonnull String query, String language) {
> +        return wrapped.findResources(query, language);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Iterator<Map<String, Object>> queryResources(@Nonnull String query, String language) {
> +        return wrapped.queryResources(query, language);
> +    }
> +
> +    @Override
> +    public boolean hasChildren(@Nonnull Resource resource) {
> +        return wrapped.hasChildren(resource);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public ResourceResolver clone(Map<String, Object> authenticationInfo) throws LoginException {
> +        return wrapped.clone(authenticationInfo);
> +    }
> +
> +    @Override
> +    public boolean isLive() {
> +        return wrapped.isLive();
> +    }
> +
> +    @Override
> +    public void close() {
> +        wrapped.close();
> +    }
> +
> +    @Override
> +    public String getUserID() {
> +        return wrapped.getUserID();
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Iterator<String> getAttributeNames() {
> +        return wrapped.getAttributeNames();
> +    }
> +
> +    @Override
> +    public Object getAttribute(@Nonnull String name) {
> +        return wrapped.getAttribute(name);
> +    }
> +
> +    @Override
> +    public void delete(@Nonnull Resource resource) throws PersistenceException {
> +        wrapped.delete(resource);
> +    }
> +
> +    @Nonnull
> +    @Override
> +    public Resource create(@Nonnull Resource parent, @Nonnull String name, Map<String, Object> properties) throws PersistenceException {
> +        return wrapped.create(parent, name, properties);
> +    }
> +
> +    @Override
> +    public void revert() {
> +        wrapped.revert();
> +    }
> +
> +    @Override
> +    public void commit() throws PersistenceException {
> +        wrapped.commit();
> +    }
> +
> +    @Override
> +    public boolean hasChanges() {
> +        return wrapped.hasChanges();
> +    }
> +
> +    @Override
> +    public String getParentResourceType(Resource resource) {
> +        return wrapped.getParentResourceType(resource);
> +    }
> +
> +    @Override
> +    public String getParentResourceType(String resourceType) {
> +        return wrapped.getParentResourceType(resourceType);
> +    }
> +
> +    @Override
> +    public boolean isResourceType(Resource resource, String resourceType) {
> +        return wrapped.isResourceType(resource, resourceType);
> +    }
> +
> +    @Override
> +    public void refresh() {
> +        wrapped.refresh();
> +    }
> +
> +    @Override
> +    public Resource copy(String srcAbsPath, String destAbsPath) throws PersistenceException {
> +        return wrapped.copy(srcAbsPath, destAbsPath);
> +    }
> +
> +    @Override
> +    public Resource move(String srcAbsPath, String destAbsPath) throws PersistenceException {
> +        return wrapped.move(srcAbsPath, destAbsPath);
> +    }
> +
> +    @Override
> +    public <AdapterType> AdapterType adaptTo(@Nonnull Class<AdapterType> type) {
> +        return wrapped.adaptTo(type);
> +    }
> +}
>
>