Author: jlmonteiro
Date: Fri Oct  4 17:02:28 2013
New Revision: 1529219

URL: http://svn.apache.org/r1529219
Log:
Makes it possible to override resources - ie. theme

Modified:
    
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
    
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
    
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
    
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
    
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java

Modified: 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
 (original)
+++ 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
 Fri Oct  4 17:02:28 2013
@@ -28,6 +28,7 @@ import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
@@ -59,8 +60,8 @@ public class MonitoringController implem
     public void init(final FilterConfig config) throws ServletException {
         classloader = Thread.currentThread().getContextClassLoader();
         initMapping(config);
-        initHandlers();
         Templates.init(config.getServletContext().getContextPath(), mapping);
+        initHandlers();
     }
 
     private void initHandlers() {
@@ -101,7 +102,9 @@ public class MonitoringController implem
         final HttpServletRequest httpRequest = 
HttpServletRequest.class.cast(request);
         final HttpServletResponse httpResponse = 
HttpServletResponse.class.cast(response);
 
-        String path = 
httpRequest.getRequestURI().substring(httpRequest.getContextPath().length() + 
mapping.length());
+        final String baseUri = httpRequest.getContextPath() + mapping;
+        request.setAttribute("baseUri", baseUri);
+        String path = httpRequest.getRequestURI().substring(baseUri.length() + 
1);
         if (!path.startsWith("/")) {
             path = "/" + path;
         }
@@ -113,7 +116,9 @@ public class MonitoringController implem
             matcher = entry.getKey().matcher(path);
             if (matcher.matches()) {
                 invoker = entry.getValue();
-                break;
+                if (!entry.getKey().pattern().endsWith(".*")) {
+                    break;
+                }
             }
         }
 
@@ -140,10 +145,13 @@ public class MonitoringController implem
                 }
 
                 if (is != null) {
-                    final ByteArrayOutputStream baos = new 
ByteArrayOutputStream();
-                    int i;
-                    while ((i = is.read()) != -1) {
-                        baos.write(i);
+                    ByteArrayOutputStream baos = 
ByteArrayOutputStream.class.cast(request.getAttribute("resourceCache"));
+                    if (baos == null) {
+                        baos = new ByteArrayOutputStream();
+                        int i;
+                        while ((i = is.read()) != -1) {
+                            baos.write(i);
+                        }
                     }
 
                     bytes = baos.toByteArray();
@@ -151,7 +159,11 @@ public class MonitoringController implem
                 }
             }
             if (bytes != null) {
-                httpResponse.getOutputStream().write(bytes);
+                if (bytes.length == 0) {
+                    httpResponse.setStatus(404);
+                } else {
+                    httpResponse.getOutputStream().write(bytes);
+                }
                 return;
             }
         }

Modified: 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
 (original)
+++ 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
 Fri Oct  4 17:02:28 2013
@@ -18,11 +18,34 @@ package org.apache.commons.monitoring.re
 
 import org.apache.commons.monitoring.reporting.web.handler.api.Regex;
 import org.apache.commons.monitoring.reporting.web.handler.api.TemplateHelper;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.RuntimeSingleton;
+import org.apache.velocity.runtime.resource.loader.ResourceLoader;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
 
 public class FilteringEndpoints {
     private static final String BOOTSTRAP_CSS = 
"/resources/css/bootstrap.min.css";
     private static final String MONITORING_CSS = 
"/resources/css/monitoring.css";
 
+    private ResourceLoader rl;
+
+    public FilteringEndpoints() {
+        try {
+            rl = 
ResourceLoader.class.cast(FilteringEndpoints.class.getClassLoader().loadClass((String)
 RuntimeSingleton.getProperty(Templates.RESOURCE_LOADER_KEY)).newInstance());
+        } catch (final Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
     @Regex(MONITORING_CSS)
     public void filterCss(final TemplateHelper helper) {
         helper.renderPlain(MONITORING_CSS);
@@ -32,4 +55,32 @@ public class FilteringEndpoints {
     public void filterBootstrapCss(final TemplateHelper helper) {
         helper.renderPlain(BOOTSTRAP_CSS);
     }
+
+    @Regex("/resources/.*")
+    public void filterOtherResources(final HttpServletRequest req, final 
HttpServletResponse resp) {
+        final InputStream is;
+        try {
+            is = rl.getResourceStream(req.getRequestURI().substring(((String) 
req.getAttribute("baseUri")).length()));
+        } catch (final ResourceNotFoundException rnfe) {
+            return;
+        }
+
+        try {
+            byte[] buffer = new byte[1024];
+            final ByteArrayOutputStream os = new ByteArrayOutputStream();
+            int length;
+            while ((length = is.read(buffer)) != -1) {
+                os.write(buffer, 0, length);
+            }
+            req.setAttribute("resourceCache", os);
+        } catch (final IOException ioe) {
+            throw new IllegalStateException(ioe);
+        } finally {
+            try {
+                is.close();
+            } catch (final IOException e) {
+                // no-op
+            }
+        }
+    }
 }

Modified: 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
 (original)
+++ 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
 Fri Oct  4 17:02:28 2013
@@ -18,6 +18,8 @@ package org.apache.commons.monitoring.re
 
 import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
 import org.apache.commons.monitoring.reporting.web.template.Templates;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.runtime.RuntimeSingleton;
 
 import java.io.PrintWriter;
 import java.util.Collections;

Modified: 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
 (original)
+++ 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
 Fri Oct  4 17:02:28 2013
@@ -23,6 +23,7 @@ import org.apache.commons.monitoring.rep
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.Method;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Pattern;

Modified: 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
 (original)
+++ 
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
 Fri Oct  4 17:02:28 2013
@@ -30,6 +30,8 @@ import java.util.Map;
 import java.util.Properties;
 
 public final class Templates {
+    public static final String RESOURCE_LOADER_KEY = "monitoring." + 
RuntimeConstants.RESOURCE_LOADER + ".class";
+
     private static String mapping;
 
     public static void init(final String context, final String filterMapping) {
@@ -42,7 +44,7 @@ public final class Templates {
         
velocityConfiguration.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE,
 Boolean.TRUE.toString());
         velocityConfiguration.setProperty(RuntimeConstants.RESOURCE_LOADER, 
"monitoring");
         velocityConfiguration.setProperty(RuntimeConstants.VM_LIBRARY, 
"/templates/macro.vm");
-        velocityConfiguration.setProperty("monitoring." + 
RuntimeConstants.RESOURCE_LOADER + ".class", 
Configuration.getProperty(Configuration.COMMONS_MONITORING_PREFIX + 
"reporting.resource-loader", ClasspathResourceLoader.class.getName()));
+        velocityConfiguration.setProperty(RESOURCE_LOADER_KEY, 
Configuration.getProperty(Configuration.COMMONS_MONITORING_PREFIX + 
"reporting.resource-loader", ClasspathResourceLoader.class.getName()));
         Velocity.init(velocityConfiguration);
 
         if (filterMapping.isEmpty()) {


Reply via email to