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 2009/09/22 15:30:02 UTC

svn commit: r817655 - in /sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl: SlingMainServlet.java filter/SlingFilterChainHelper.java

Author: cziegeler
Date: Tue Sep 22 13:30:01 2009
New Revision: 817655

URL: http://svn.apache.org/viewvc?rev=817655&view=rev
Log:
SLING-1119 : First implementation for a filter configuration printer.

Modified:
    sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
    sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java

Modified: sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=817655&r1=817654&r2=817655&view=diff
==============================================================================
--- sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java (original)
+++ sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java Tue Sep 22 13:30:01 2009
@@ -47,6 +47,7 @@
 import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.felix.webconsole.ConfigurationPrinter;
 import org.apache.sling.api.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -90,6 +91,7 @@
  *
  * @scr.component immediate="true" label="%sling.name"
  *                description="%sling.description"
+ * @scr.service interface="ConfigurationPrinter"
  * @scr.property name="service.vendor" value="The Apache Software Foundation"
  * @scr.property name="service.description" value="Sling Servlet"
  * @scr.reference name="Filter" interface="javax.servlet.Filter"
@@ -97,7 +99,7 @@
  */
 @SuppressWarnings("serial")
 public class SlingMainServlet extends GenericServlet implements ErrorHandler,
-        HttpContext {
+        HttpContext, ConfigurationPrinter {
 
     /** @scr.property valueRef="RequestData.DEFAULT_MAX_CALL_COUNTER" */
     public static final String PROP_MAX_CALL_COUNTER = "sling.max.calls";
@@ -879,4 +881,42 @@
         return oldThreadName;
     }
 
+    /**
+     * Return the title for the configuration printer
+     * @see org.apache.felix.webconsole.ConfigurationPrinter#getTitle()
+     */
+    public String getTitle() {
+        return "Servlet Filter";
+    }
+
+    /**
+     * Helper method for printing out a filter chain.
+     */
+    private void printFilterChain(final PrintWriter pw, final SlingFilterChainHelper.FilterListEntry[] entries) {
+        if ( entries == null ) {
+            pw.println("---");
+        } else {
+            for(final SlingFilterChainHelper.FilterListEntry entry : entries) {
+                pw.print(entry.getOrder());
+                pw.print(" : ");
+                pw.print(entry.getFilter().getClass());
+                pw.print(" (");
+                pw.print(entry.getFitlerId());
+                pw.println(")");
+            }
+        }
+    }
+    /**
+     * Print out the servlet filter chains.
+     * @see org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter)
+     */
+    public void printConfiguration(PrintWriter pw) {
+        pw.println("Current Apache Sling Servlet Filter Configuration");
+        pw.println();
+        pw.println("Request Filters:");
+        printFilterChain(pw, this.requestFilterChain.getFilterListEntries());
+        pw.println();
+        pw.println("Component Filters:");
+        printFilterChain(pw, this.innerFilterChain.getFilterListEntries());
+    }
 }

Modified: sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java?rev=817655&r1=817654&r2=817655&view=diff
==============================================================================
--- sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java (original)
+++ sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/SlingFilterChainHelper.java Tue Sep 22 13:30:01 2009
@@ -26,7 +26,7 @@
 
 /**
  * The <code>SlingFilterChainHelper</code> class is used by Sling to
- * support building lists of <code>RenderFilter</code>s. To ensure filter
+ * support building lists of <code>Filter</code>s. To ensure filter
  * ordering, each filter is optionally registered with an ordering index. If
  * none is provided the default ordering index is Integer.MAX_VALUE to append
  * the filter to the end of the list.
@@ -95,7 +95,7 @@
     }
 
     /**
-     * Returns the list of <code>RenderFilter</code>s added to this instance
+     * Returns the list of <code>Filter</code>s added to this instance
      * or <code>null</code> if no filters have been added.
      */
     public synchronized Filter[] getFilters() {
@@ -113,7 +113,20 @@
         return filters;
     }
 
-    private static class FilterListEntry implements Comparable<FilterListEntry> {
+    /**
+     * Returns the list of <code>FilterListEntry</code>s added to this instance
+     * or <code>null</code> if no filters have been added.
+     */
+    public synchronized FilterListEntry[] getFilterListEntries() {
+        FilterListEntry[] result = null;
+        if (filterList != null && !filterList.isEmpty()) {
+            result = new FilterListEntry[filterList.size()];
+            filterList.toArray(result);
+        }
+        return result;
+    }
+
+    public static class FilterListEntry implements Comparable<FilterListEntry> {
 
         private Filter filter;
 
@@ -127,14 +140,18 @@
             this.order = order;
         }
 
-        Filter getFilter() {
+        public Filter getFilter() {
             return filter;
         }
 
-        Long getFitlerId() {
+        public Long getFitlerId() {
             return filterId;
         }
 
+        public int getOrder() {
+            return order;
+        }
+
         /**
          * Note: this class has a natural ordering that is inconsistent with
          * equals.