You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/10/30 16:56:34 UTC

svn commit: r1711500 - in /sling/trunk/bundles/servlets/resolver: ./ src/main/java/org/apache/sling/servlets/resolver/internal/ src/main/java/org/apache/sling/servlets/resolver/internal/resource/ src/test/java/org/apache/sling/servlets/resolver/internal/

Author: cziegeler
Date: Fri Oct 30 15:56:33 2015
New Revision: 1711500

URL: http://svn.apache.org/viewvc?rev=1711500&view=rev
Log:
SLING-5222 : Migrate servlet resource provider to new provider api

Modified:
    sling/trunk/bundles/servlets/resolver/pom.xml
    sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
    sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java
    sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java

Modified: sling/trunk/bundles/servlets/resolver/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/pom.xml?rev=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/pom.xml (original)
+++ sling/trunk/bundles/servlets/resolver/pom.xml Fri Oct 30 15:56:33 2015
@@ -81,7 +81,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.4.0</version>
+            <version>2.9.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java Fri Oct 30 15:56:33 2015
@@ -71,7 +71,6 @@ import org.apache.sling.api.request.Slin
 import org.apache.sling.api.request.SlingRequestListener;
 import org.apache.sling.api.resource.LoginException;
 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.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
@@ -92,6 +91,7 @@ import org.apache.sling.servlets.resolve
 import org.apache.sling.servlets.resolver.internal.resource.ServletResourceProvider;
 import org.apache.sling.servlets.resolver.internal.resource.ServletResourceProviderFactory;
 import org.apache.sling.servlets.resolver.jmx.SlingServletResolverCacheMBean;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
@@ -1000,24 +1000,27 @@ public class SlingServletResolver
             return false;
         }
 
-        final ServiceRegistration reg = context.getBundleContext().registerService(
-            ResourceProvider.SERVICE_NAME,
-            provider,
-            createServiceProperties(reference, provider));
-
+        final List<ServiceRegistration> regs = new ArrayList<ServiceRegistration>();
+        for(final String root : provider.getServletPaths()) {
+            final ServiceRegistration reg = context.getBundleContext().registerService(
+                ResourceProvider.class.getName(),
+                provider,
+                createServiceProperties(reference, provider, root));
+            regs.add(reg);
+        }
         LOGGER.debug("Registered {}", provider.toString());
         synchronized (this.servletsByReference) {
-            servletsByReference.put(reference, new ServletReg(servlet, reg));
+            servletsByReference.put(reference, new ServletReg(servlet, regs));
         }
-
         return true;
     }
 
     private Dictionary<String, Object> createServiceProperties(final ServiceReference reference,
-            final ServletResourceProvider provider) {
+            final ServletResourceProvider provider,
+            final String root) {
 
         final Dictionary<String, Object> params = new Hashtable<String, Object>();
-        params.put(ResourceProvider.ROOTS, provider.getServletPaths());
+        params.put(ResourceProvider.PROPERTY_ROOT, root);
         params.put(Constants.SERVICE_DESCRIPTION,
             "ServletResourceProvider for Servlets at " + Arrays.asList(provider.getServletPaths()));
 
@@ -1043,7 +1046,9 @@ public class SlingServletResolver
         }
         if (registration != null) {
 
-            registration.registration.unregister();
+            for(final ServiceRegistration reg : registration.registrations) {
+                reg.unregister();
+            }
             final String name = RequestUtil.getServletName(registration.servlet);
             LOGGER.debug("unbindServlet: Servlet {} removed", name);
 
@@ -1129,11 +1134,11 @@ public class SlingServletResolver
 
     private static final class ServletReg {
         public final Servlet servlet;
-        public final ServiceRegistration registration;
+        public final List<ServiceRegistration> registrations;
 
-        public ServletReg(final Servlet s, final ServiceRegistration sr) {
+        public ServletReg(final Servlet s, final List<ServiceRegistration> srs) {
             this.servlet = s;
-            this.registration = sr;
+            this.registrations = srs;
         }
     }
 

Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java?rev=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java Fri Oct 30 15:56:33 2015
@@ -24,24 +24,27 @@ 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.spi.resource.provider.ResolverContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
 
-public class ServletResourceProvider implements ResourceProvider {
+public class ServletResourceProvider extends ResourceProvider<Object> {
 
     private static final Iterator<Resource> EMPTY_ITERATOR = new Iterator<Resource>() {
 
+        @Override
         public boolean hasNext() {
             return false;
         }
 
+        @Override
         public Resource next() {
             throw new NoSuchElementException();
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
@@ -59,22 +62,19 @@ public class ServletResourceProvider imp
         this.servlet = servlet;
     }
 
-    public Resource getResource(ResourceResolver resourceResolver,
-            HttpServletRequest request, String path) {
-        return getResource(resourceResolver, path);
-    }
-
-    public Resource getResource(ResourceResolver resourceResolver, String path) {
+    @Override
+    public Resource getResource(final ResolverContext<Object> ctx, String path, ResourceContext resourceContext, Resource parent) {
         // only return a resource if the servlet has been assigned
         if (servlet != null && resourcePaths.contains(path)) {
-            return new ServletResource(resourceResolver, servlet, path);
+            return new ServletResource(ctx.getResourceResolver(), servlet, path);
         }
 
         return null;
     }
 
-    public Iterator<Resource> listChildren(final Resource parent) {
-        return EMPTY_ITERATOR;
+    @Override
+    public Iterator<Resource> listChildren(ResolverContext<Object> ctx, Resource parent) {
+        return null;
     }
 
     Servlet getServlet() {

Modified: sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java?rev=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java Fri Oct 30 15:56:33 2015
@@ -95,6 +95,7 @@ public class SlingServletResolverTest {
                 throw new LoginException("MockResourceResolver can't be cloned - excepted for this test!");
             }
 
+            @Override
             public void refresh() {
                 // nothing to do
             }
@@ -103,17 +104,32 @@ public class SlingServletResolverTest {
 
         final ResourceResolverFactory factory = new ResourceResolverFactory() {
 
+            @Override
             public ResourceResolver getAdministrativeResourceResolver(
                     Map<String, Object> authenticationInfo)
                     throws LoginException {
                 return mockResourceResolver;
             }
 
+            @Override
             public ResourceResolver getResourceResolver(
                     Map<String, Object> authenticationInfo)
                     throws LoginException {
                 return mockResourceResolver;
             }
+
+            @Override
+            public ResourceResolver getServiceResourceResolver(Map<String, Object> authenticationInfo)
+                    throws LoginException {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public ResourceResolver getThreadResourceResolver() {
+                // TODO Auto-generated method stub
+                return null;
+            }
         };
 
         servlet = new MockSlingRequestHandlerServlet();
@@ -212,13 +228,13 @@ public class SlingServletResolverTest {
 
         ServletResourceProvider servlet = factory.create(msr);
 
-        Method createServiceProperties = SlingServletResolver.class.getDeclaredMethod("createServiceProperties", ServiceReference.class, ServletResourceProvider.class);
+        Method createServiceProperties = SlingServletResolver.class.getDeclaredMethod("createServiceProperties", ServiceReference.class, ServletResourceProvider.class, String.class);
         createServiceProperties.setAccessible(true);
 
         // no ranking
         assertNull(msr.getProperty(Constants.SERVICE_RANKING));
         @SuppressWarnings("unchecked")
-        final Dictionary<String, Object> p1 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+        final Dictionary<String, Object> p1 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
         assertNull(p1.get(Constants.SERVICE_RANKING));
 
         // illegal type of ranking
@@ -226,7 +242,7 @@ public class SlingServletResolverTest {
         msr.setProperty(Constants.SERVICE_RANKING, nonIntValue);
         assertEquals(nonIntValue, msr.getProperty(Constants.SERVICE_RANKING));
         @SuppressWarnings("unchecked")
-        final Dictionary<String, Object> p2 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+        final Dictionary<String, Object> p2 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
         assertNull(p2.get(Constants.SERVICE_RANKING));
 
         // illegal type of ranking
@@ -234,7 +250,7 @@ public class SlingServletResolverTest {
         msr.setProperty(Constants.SERVICE_RANKING, intValue);
         assertEquals(intValue, msr.getProperty(Constants.SERVICE_RANKING));
         @SuppressWarnings("unchecked")
-        final Dictionary<String, Object> p3 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+        final Dictionary<String, Object> p3 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
         assertEquals(intValue, p3.get(Constants.SERVICE_RANKING));
     }
 
@@ -247,6 +263,7 @@ public class SlingServletResolverTest {
     private static class MockSlingRequestHandlerServlet extends HttpServlet
             implements OptingServlet {
 
+        @Override
         public boolean accepts(SlingHttpServletRequest request) {
             return request.isSecure();
         }