]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1709: Add StaticResourcesServlet for loading static resources from plugins
authorGodin <mandrikov@gmail.com>
Sat, 25 Sep 2010 01:14:53 +0000 (01:14 +0000)
committerGodin <mandrikov@gmail.com>
Sat, 25 Sep 2010 01:14:53 +0000 (01:14 +0000)
sonar-server/src/dev/web.xml
sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java [new file with mode: 0644]
sonar-server/src/main/webapp/WEB-INF/app/helpers/application_helper.rb
sonar-server/src/main/webapp/WEB-INF/web.xml

index afd470ea8e022794ccb70013509e31bf93069463..5943fb50f0993f4a7f13fa014aa4def6a1db105c 100644 (file)
     <servlet-name>gchart</servlet-name>
     <servlet-class>org.jfree.eastwood.ChartServlet</servlet-class>
   </servlet>
+  <servlet>
+    <servlet-name>static</servlet-name>
+    <servlet-class>org.sonar.server.plugins.StaticResourcesServlet</servlet-class>
+  </servlet>
+
   <servlet-mapping>
     <servlet-name>chart</servlet-name>
     <url-pattern>/chart</url-pattern>
     <servlet-name>gchart</servlet-name>
     <url-pattern>/gchart</url-pattern>
   </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>static</servlet-name>
+    <url-pattern>/static/*</url-pattern>
+  </servlet-mapping>
 
   <listener>
     <listener-class>org.sonar.server.platform.PlatformLifecycleListener</listener-class>
diff --git a/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java b/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java
new file mode 100644 (file)
index 0000000..4864f89
--- /dev/null
@@ -0,0 +1,51 @@
+package org.sonar.server.plugins;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonar.server.platform.Platform;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class StaticResourcesServlet extends HttpServlet {
+
+  private static final Logger LOG = LoggerFactory.getLogger(StaticResourcesServlet.class);
+
+  @Override
+  public void doGet(HttpServletRequest request, HttpServletResponse response)
+      throws ServletException, IOException {
+    String path = StringUtils.substringAfter(request.getRequestURI(), request.getContextPath() + request.getServletPath() + "/");
+    String pluginKey = StringUtils.substringBefore(path, "/");
+    String resource = "/static/" + StringUtils.substringAfter(path, "/");
+
+    PluginClassLoaders pluginClassLoaders = Platform.getInstance().getContainer().getComponent(PluginClassLoaders.class);
+
+    ClassLoader classLoader = pluginClassLoaders.getClassLoader(pluginKey);
+    if (classLoader == null) {
+      return;
+    }
+
+    InputStream in = null;
+    OutputStream out = null;
+    try {
+      in = classLoader.getResourceAsStream(resource);
+      if (in != null) {
+        out = response.getOutputStream();
+        IOUtils.copy(in, out);
+      }
+    } catch (Exception e) {
+      LOG.error("Unable to load static resource '" + resource + "' from plugin '" + pluginKey + "'", e);
+    } finally {
+      IOUtils.closeQuietly(in);
+      IOUtils.closeQuietly(out);
+    }
+  }
+}
index 92ac5eabba95bc6169acd79d8731659572a0efa1..f8997db4be1d228efffddc6c66fb3d4f1965ec16 100644 (file)
@@ -162,9 +162,9 @@ module ApplicationHelper
     if options[:resource]
       "#{ApplicationController.root_context}/plugins/resource/#{options[:resource]}?page=#{page}"
     elsif @project
-         "#{ApplicationController.root_context}/plugins/resource/#{@project.id}?page=#{page}"
-       else
-         ''
+      "#{ApplicationController.root_context}/plugins/resource/#{@project.id}?page=#{page}"
+    else
+      ''
     end
   end
 
index 58c1f1a825b64b17ecf5f9f7b8a81f025636347a..99d68dcc5f6008ec3afb56284d0dd382c502262f 100644 (file)
     <servlet-name>gchart</servlet-name>
     <servlet-class>org.jfree.eastwood.ChartServlet</servlet-class>
   </servlet>
+  <servlet>
+    <servlet-name>static</servlet-name>
+    <servlet-class>org.sonar.server.plugins.StaticResourcesServlet</servlet-class>
+  </servlet>
+
   <servlet-mapping>
     <servlet-name>chart</servlet-name>
     <url-pattern>/chart</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>gchart</servlet-name>
-    <url-pattern>/gchart</url-pattern> 
+    <url-pattern>/gchart</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>static</servlet-name>
+    <url-pattern>/static/*</url-pattern>
   </servlet-mapping>
 
   <listener>