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 2009/10/07 11:10:16 UTC

svn commit: r822627 - /sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java

Author: fmeschbe
Date: Wed Oct  7 09:10:16 2009
New Revision: 822627

URL: http://svn.apache.org/viewvc?rev=822627&view=rev
Log:
SLING-1138 ConfigurationPrinter for resource resolver mappings

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java?rev=822627&r1=822626&r2=822627&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolverWebConsolePlugin.java Wed Oct  7 09:10:16 2009
@@ -22,18 +22,20 @@
 import java.io.PrintWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.List;
 
 import javax.jcr.Session;
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+import org.apache.felix.webconsole.ConfigurationPrinter;
 import org.apache.felix.webconsole.WebConsoleConstants;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.jcr.resource.internal.helper.MapEntries;
@@ -42,10 +44,11 @@
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 
-public class JcrResourceResolverWebConsolePlugin extends AbstractWebConsolePlugin {
-    
+public class JcrResourceResolverWebConsolePlugin extends
+        AbstractWebConsolePlugin implements ConfigurationPrinter {
+
     private static final long serialVersionUID = 0;
-    
+
     private static final String ATTR_TEST = "plugin.test";
 
     private static final String ATTR_SUBMIT = "plugin.submit";
@@ -69,7 +72,9 @@
         props.put(Constants.SERVICE_PID, getClass().getName());
         props.put(WebConsoleConstants.PLUGIN_LABEL, getLabel());
 
-        service = context.registerService(Servlet.class.getName(), this, props);
+        service = context.registerService(new String[] {
+            WebConsoleConstants.SERVICE_NAME, ConfigurationPrinter.SERVICE },
+            this, props);
     }
 
     void dispose() {
@@ -80,6 +85,8 @@
         }
     }
 
+    // ---------- AbstractWebConsolePlugin
+
     @Override
     public String getLabel() {
         return "jcrresolver";
@@ -104,7 +111,7 @@
 
         MapEntries mapEntries = resolverFactory.getMapEntries();
 
-        title(
+        titleHtml(
             pw,
             "Configuration Test",
             "To test the configuration, enter an URL or a resource path into the field and click 'Resolve' to resolve the URL or click 'Map' to map the resource path");
@@ -132,7 +139,7 @@
 
         separator(pw);
 
-        dumpMap(
+        dumpMapHtml(
             pw,
             "Resolver Map Entries",
             "Lists the entries used by the ResourceResolver.resolve methods to map URLs to Resources",
@@ -140,7 +147,7 @@
 
         separator(pw);
 
-        dumpMap(
+        dumpMapHtml(
             pw,
             "Mapping Map Entries",
             "Lists the entries used by the ResourceResolver.map methods to map Resource Paths to URLs",
@@ -150,10 +157,78 @@
 
     }
 
-    private void dumpMap(PrintWriter pw, String title, String description,
+    @Override
+    protected void doPost(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException, IOException {
+
+        String test = request.getParameter(ATTR_TEST);
+        if (test != null && test.length() > 0) {
+
+            // set test value for the re-rendering of the form
+            request.setAttribute(ATTR_TEST, test);
+
+            Session session = null;
+            try {
+                // prepare the request for the resource resolver
+                HttpServletRequest helper = new ResolverRequest(request, test);
+
+                // get the resource resolver with an administrative session
+                session = resolverFactory.getRepository().loginAdministrative(
+                    null);
+                ResourceResolver resolver = resolverFactory.getResourceResolver(session);
+
+                // map or resolve as instructed
+                Object result;
+                if ("Map".equals(request.getParameter(ATTR_SUBMIT))) {
+                    result = resolver.map(helper, helper.getPathInfo());
+                } else {
+                    result = resolver.resolve(helper, helper.getPathInfo());
+                }
+
+                // set the result to render the result
+                request.setAttribute(ATTR_RESULT, result.toString());
+
+            } catch (Throwable t) {
+
+                // some error occurred, report it as a result
+                request.setAttribute(ATTR_RESULT, "Test Failure: " + t);
+
+            } finally {
+                if (session != null) {
+                    session.logout();
+                }
+            }
+
+        }
+
+        // finally render the result
+        doGet(request, response);
+    }
+
+    // ---------- ConfigurationPrinter
+
+    public void printConfiguration(PrintWriter pw) {
+        final MapEntries mapEntries = resolverFactory.getMapEntries();
+
+        dumpMapText(
+            pw,
+            "Resolver Map Entries",
+            mapEntries.getResolveMaps());
+
+        separator(pw);
+
+        dumpMapText(
+            pw,
+            "Mapping Map Entries",
+            mapEntries.getMapMaps());
+    }
+
+    // ---------- internal
+
+    private void dumpMapHtml(PrintWriter pw, String title, String description,
             Collection<MapEntry> list) {
 
-        title(pw, title, description);
+        titleHtml(pw, title, description);
 
         pw.println("<tr class='content'>");
         pw.println("<th class='content'>Pattern</th>");
@@ -184,7 +259,7 @@
         }
     }
 
-    private void title(PrintWriter pw, String title, String description) {
+    private void titleHtml(PrintWriter pw, String title, String description) {
         pw.println("<tr class='content'>");
         pw.println("<th colspan='3'class='content container'>" + title
             + "</th>");
@@ -198,58 +273,27 @@
         }
     }
 
-    private void separator(PrintWriter pw) {
-        pw.println("<tr class='content'>");
-        pw.println("<td class='content' colspan='3'>&nbsp;</td>");
-        pw.println("</tr>");
-    }
-
-    @Override
-    protected void doPost(HttpServletRequest request,
-            HttpServletResponse response) throws ServletException, IOException {
-
-        String test = request.getParameter(ATTR_TEST);
-        if (test != null && test.length() > 0) {
-
-            // set test value for the re-rendering of the form
-            request.setAttribute(ATTR_TEST, test);
-
-            Session session = null;
-            try {
-                // prepare the request for the resource resolver
-                HttpServletRequest helper = new ResolverRequest(request, test);
-
-                // get the resource resolver with an administrative session
-                session = resolverFactory.getRepository().loginAdministrative(
-                    null);
-                ResourceResolver resolver = resolverFactory.getResourceResolver(session);
-
-                // map or resolve as instructed
-                Object result;
-                if ("Map".equals(request.getParameter(ATTR_SUBMIT))) {
-                    result = resolver.map(helper, helper.getPathInfo());
-                } else {
-                    result = resolver.resolve(helper, helper.getPathInfo());
-                }
+    private void dumpMapText(PrintWriter pw, String title,
+            Collection<MapEntry> list) {
 
-                // set the result to render the result
-                request.setAttribute(ATTR_RESULT, result.toString());
+        pw.println(title);
 
-            } catch (Throwable t) {
-            
-                // some error occurred, report it as a result
-                request.setAttribute(ATTR_RESULT, "Test Failure: " + t);
-
-            } finally {
-                if (session != null) {
-                    session.logout();
-                }
-            }
+        final String format = "%25s%25s%15s\r\n";
+        pw.printf(format, "Pattern", "Replacement", "Redirect");
 
+        for (MapEntry entry : list) {
+            final List<String> redir = Arrays.asList(entry.getRedirect());
+            final String status = entry.isInternal()
+                    ? "internal"
+                    : "external: " + entry.getStatus();
+            pw.printf(format, entry.getPattern(), redir, status);
         }
+    }
 
-        // finally render the result
-        doGet(request, response);
+    private void separator(PrintWriter pw) {
+        pw.println("<tr class='content'>");
+        pw.println("<td class='content' colspan='3'>&nbsp;</td>");
+        pw.println("</tr>");
     }
 
     private static class ResolverRequest extends HttpServletRequestWrapper {