[tor-commits] [metrics-web/master] Add graph parameters back to filenames.

karsten at torproject.org karsten at torproject.org
Tue Apr 3 06:50:31 UTC 2012


commit dd9f33b5b28e8700e15b5169c4652e4d61270780
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Apr 3 08:46:58 2012 +0200

    Add graph parameters back to filenames.
    
    Fixes #5555.
---
 .../torproject/ernie/web/GraphImageServlet.java    |   10 +++++-----
 src/org/torproject/ernie/web/RObject.java          |   18 ++++++++++++++++++
 src/org/torproject/ernie/web/RObjectGenerator.java |   10 ++++++++--
 3 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/org/torproject/ernie/web/GraphImageServlet.java b/src/org/torproject/ernie/web/GraphImageServlet.java
index 20d3297..88d5755 100644
--- a/src/org/torproject/ernie/web/GraphImageServlet.java
+++ b/src/org/torproject/ernie/web/GraphImageServlet.java
@@ -48,11 +48,11 @@ public class GraphImageServlet extends HttpServlet {
 
     /* Request graph from R object generator, which either returns it from
      * its cache or asks Rserve to generate it. */
-    byte[] graphBytes = rObjectGenerator.generateGraph(requestedGraph,
+    RObject graph = rObjectGenerator.generateGraph(requestedGraph,
         request.getParameterMap(), true);
 
     /* Make sure that we have a graph to return. */
-    if (graphBytes == null) {
+    if (graph == null || graph.getBytes() == null) {
       response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
       return;
     }
@@ -61,11 +61,11 @@ public class GraphImageServlet extends HttpServlet {
     BufferedOutputStream output = null;
     response.setContentType("image/png");
     response.setHeader("Content-Length",
-        String.valueOf(graphBytes.length));
+        String.valueOf(graph.getBytes().length));
     response.setHeader("Content-Disposition",
-        "inline; filename=\"" + requestedGraph + ".png\"");
+        "inline; filename=\"" + graph.getFileName() + "\"");
     output = new BufferedOutputStream(response.getOutputStream(), 1024);
-    output.write(graphBytes, 0, graphBytes.length);
+    output.write(graph.getBytes(), 0, graph.getBytes().length);
     output.flush();
     output.close();
   }
diff --git a/src/org/torproject/ernie/web/RObject.java b/src/org/torproject/ernie/web/RObject.java
new file mode 100644
index 0000000..4ee5cdc
--- /dev/null
+++ b/src/org/torproject/ernie/web/RObject.java
@@ -0,0 +1,18 @@
+/* Copyright 2011, 2012 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.ernie.web;
+
+public class RObject {
+  private byte[] bytes;
+  private String fileName;
+  public RObject(byte[] bytes, String fileName) {
+    this.bytes = bytes;
+    this.fileName = fileName;
+  }
+  public String getFileName() {
+    return fileName;
+  }
+  public byte[] getBytes() {
+    return bytes;
+  }
+}
diff --git a/src/org/torproject/ernie/web/RObjectGenerator.java b/src/org/torproject/ernie/web/RObjectGenerator.java
index 3482dce..005da85 100644
--- a/src/org/torproject/ernie/web/RObjectGenerator.java
+++ b/src/org/torproject/ernie/web/RObjectGenerator.java
@@ -137,7 +137,7 @@ public class RObjectGenerator implements ServletContextListener {
     /* Nothing to do. */
   }
 
-  public byte[] generateGraph(String requestedGraph, Map parameterMap,
+  public RObject generateGraph(String requestedGraph, Map parameterMap,
       boolean checkCache) {
     Map<String, String[]> checkedParameters = GraphParameterChecker.
         getInstance().checkParameters(requestedGraph, parameterMap);
@@ -172,7 +172,13 @@ public class RObjectGenerator implements ServletContextListener {
     String imageFilename = imageFilenameBuilder.toString();
     rQueryBuilder.append("path = '%s')");
     String rQuery = rQueryBuilder.toString();
-    return this.generateGraph(rQuery, imageFilename, checkCache);
+    byte[] graphBytes = this.generateGraph(rQuery, imageFilename,
+        checkCache);
+    if (graphBytes != null) {
+      return new RObject(graphBytes, imageFilename);
+    } else {
+      return null;
+    }
   }
 
   /* Generate a graph using the given R query that has a placeholder for



More information about the tor-commits mailing list