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/01/15 10:49:29 UTC

svn commit: r612063 - in /incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver: ServletResolverConstants.java resource/ServletResourceProvider.java

Author: fmeschbe
Date: Tue Jan 15 01:49:28 2008
New Revision: 612063

URL: http://svn.apache.org/viewvc?rev=612063&view=rev
Log:
Add support to configure selectors for path construction

Modified:
    incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/ServletResolverConstants.java
    incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java

Modified: incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/ServletResolverConstants.java
URL: http://svn.apache.org/viewvc/incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/ServletResolverConstants.java?rev=612063&r1=612062&r2=612063&view=diff
==============================================================================
--- incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/ServletResolverConstants.java (original)
+++ incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/ServletResolverConstants.java Tue Jan 15 01:49:28 2008
@@ -44,6 +44,20 @@
 
     /**
      * The name of the service registration property of a Servlet registered as
+     * a service containing the request URL selectors supported by the servlet
+     * (value is "sling.servlet.selectors"). The selectors must be configured as
+     * they would be specified in the URL that is as a list of dot-separated
+     * strings such as <em>print.a4</em>.
+     * <p>
+     * The type of this property is a String or String[] (array of strings)
+     * denoting the resource types. This property is ignored if the
+     * {@link #SLING_SERVLET_PATHS} property is set. Otherwise this property is
+     * optional and ignored if not set.
+     */
+    public static final String SLING_SERVLET_SELECTORS = "sling.servlet.selectors";
+
+    /**
+     * The name of the service registration property of a Servlet registered as
      * a service containing the request URL extensions supported by the servlet
      * for GET requests (value is "sling.servlet.extensions").
      * <p>

Modified: incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java?rev=612063&r1=612062&r2=612063&view=diff
==============================================================================
--- incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java (original)
+++ incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/resource/ServletResourceProvider.java Tue Jan 15 01:49:28 2008
@@ -22,6 +22,7 @@
 import static org.apache.sling.servlet.resolver.ServletResolverConstants.SLING_SERVLET_METHODS;
 import static org.apache.sling.servlet.resolver.ServletResolverConstants.SLING_SERVLET_PATHS;
 import static org.apache.sling.servlet.resolver.ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES;
+import static org.apache.sling.servlet.resolver.ServletResolverConstants.SLING_SERVLET_SELECTORS;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -35,6 +36,7 @@
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.osgi.commons.OsgiUtil;
+import org.apache.sling.servlet.resolver.ServletResolverConstants;
 import org.apache.sling.servlet.resolver.helper.PathSupport;
 import org.osgi.framework.ServiceReference;
 
@@ -64,6 +66,12 @@
             return null;
         }
 
+        // check for selectors
+        String[] selectors = OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_SELECTORS));
+        if (selectors == 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));
@@ -89,17 +97,26 @@
                 type += "/";
             }
 
-            // create paths with extensions
-            if (extensions != null) {
-                for (String ext : extensions) {
-                    pathList.add(type + ext);
+            // 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('.', '/') + "/";
+                }
+                
+                // create paths with extensions
+                if (extensions != null) {
+                    for (String ext : extensions) {
+                        pathList.add(selPath + ext);
+                    }
                 }
-            }
 
-            // create paths with method names
-            if (methods != null) {
-                for (String method : methods) {
-                    pathList.add(type + method);
+                // create paths with method names
+                if (methods != null) {
+                    for (String method : methods) {
+                        pathList.add(selPath + method);
+                    }
                 }
             }
         }