Adds a -out argument to SoycDashboard specifying
the directory to generate the HTML into.

Review by: kprobst


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5442 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java b/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java
index 8f11353..cb62696 100644
--- a/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java
+++ b/tools/soyc-vis/src/com/google/gwt/soyc/MakeTopLevelHtmlForPerm.java
@@ -149,21 +149,21 @@
     }
     String inputFileName = "roundedCorners.css";
     File inputFile = new File(classPath + inputFileName);
-    File outputFile = new File("roundedCorners.css");
+    File outputFile = getOutFile("roundedCorners.css");
     copyFileOrDirectory(inputFile, outputFile, classPath, inputFileName, false);
 
     inputFileName = "classLevel.css";
     File inputFile2 = new File(classPath + inputFileName);
-    File outputFile2 = new File("classLevel.css");
+    File outputFile2 = getOutFile("classLevel.css");
     copyFileOrDirectory(inputFile2, outputFile2, classPath, inputFileName,
         false);
 
     inputFileName = "images";
     File inputDir = new File(classPath + "images");
-    File outputDir = new File("images");
+    File outputDir = getOutFile("images");
     copyFileOrDirectory(inputDir, outputDir, classPath, inputFileName, true);
 
-    final PrintWriter outFile = new PrintWriter(shellFileName(breakdown));
+    final PrintWriter outFile = new PrintWriter(getOutFile(shellFileName(breakdown)));
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">");
     outFile.println("<html>");
     outFile.println("<head>");
@@ -279,7 +279,7 @@
         }
       }
 
-      final PrintWriter outFile = new PrintWriter(outFileName);
+      final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
       outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
       outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -351,8 +351,8 @@
     for (String literalType : nameToLitColl.keySet()) {
 
       String outFileName = literalType + "Lits.html";
-      final PrintWriter outFile = new PrintWriter(breakdown.getId() + "_"
-          + outFileName);
+      final PrintWriter outFile = new PrintWriter(getOutFile(breakdown.getId()
+          + "_" + outFileName));
 
       outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
       outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -461,8 +461,8 @@
 
     for (String literalType : nameToLitColl.get("string").stringTypeToSize.keySet()) {
       String outFileName = literalType + "Strings.html";
-      final PrintWriter outFile = new PrintWriter(breakdown.getId() + "_"
-          + outFileName);
+      final PrintWriter outFile = new PrintWriter(getOutFile(breakdown.getId()
+          + "_" + outFileName));
 
       outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
       outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -579,7 +579,8 @@
   }
 
   public void makeTopLevelShell() throws IOException {
-    PrintWriter outFile = new PrintWriter("SoycDashboard-index.html");
+    PrintWriter outFile = new PrintWriter(
+        getOutFile("SoycDashboard-index.html"));
 
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">");
     outFile.println("<html>");
@@ -703,6 +704,15 @@
     }
   }
 
+  /**
+   * Return a {@link File} object for a file to be emitted into the output
+   * directory.
+   */
+  private static File getOutFile(String localFileName) {
+    File outDir = new File(GlobalInformation.settings.out.get());
+    return new File(outDir, localFileName);
+  }
+
   private static String makeCodeTypeHtml(SizeBreakdown breakdown,
       Map<String, CodeCollection> nameToCodeColl) throws IOException {
     String outFileName = breakdown.getId() + "_codeTypeBreakdown.html";
@@ -725,7 +735,7 @@
       }
     }
 
-    final PrintWriter outFile = new PrintWriter(outFileName);
+    final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
     outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -802,7 +812,7 @@
       }
     }
 
-    final PrintWriter outFile = new PrintWriter(outFileName);
+    final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
     outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -874,7 +884,7 @@
       }
     }
 
-    final PrintWriter outFile = new PrintWriter(outFileName);
+    final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
     outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -934,7 +944,7 @@
   private String makeStringLiteralsHtml(SizeBreakdown breakdown,
       Map<String, LiteralsCollection> nameToLitColl) throws IOException {
     String outFileName = breakdown.getId() + "_stringLiteralsBreakdown.html";
-    final PrintWriter outFile = new PrintWriter(outFileName);
+    final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
     outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
     outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -1053,7 +1063,7 @@
 
         String outFileName = origOutFileName + filename(curPackageName)
             + ".html";
-        outFile = new PrintWriter(outFileName);
+        outFile = new PrintWriter(getOutFile(outFileName));
 
         outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
         outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -1146,8 +1156,8 @@
         }
       }
 
-      PrintWriter outFile = new PrintWriter(classesInPackageFileName(breakdown,
-          packageName));
+      PrintWriter outFile = new PrintWriter(
+          getOutFile(classesInPackageFileName(breakdown, packageName)));
 
       outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
       outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
@@ -1292,7 +1302,7 @@
         String outFileName = "splitPoint-" + filename(curSplitPointLocation)
             + "-Classes.html";
 
-        final PrintWriter outFile = new PrintWriter(outFileName);
+        final PrintWriter outFile = new PrintWriter(getOutFile(outFileName));
 
         outFile.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"");
         outFile.println("\"http://www.w3.org/TR/html4/strict.dtd\">");
diff --git a/tools/soyc-vis/src/com/google/gwt/soyc/Settings.java b/tools/soyc-vis/src/com/google/gwt/soyc/Settings.java
index ce5f50a..8b772bb 100644
--- a/tools/soyc-vis/src/com/google/gwt/soyc/Settings.java
+++ b/tools/soyc-vis/src/com/google/gwt/soyc/Settings.java
@@ -157,6 +157,8 @@
 
   public String depFileName;
 
+  public final Setting<String> out = addSetting(new StringSetting("-out",
+      "dir", ".", "output directory"));
   public final Setting<String> resources = addSetting(new StringSetting(
       "-resources", "jarfile", null,
       " directory or jar file with CSS, etc., resources"));
diff --git a/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java b/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java
index 8d2cc1f..bdec55e 100644
--- a/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java
+++ b/tools/soyc-vis/src/com/google/gwt/soyc/SoycDashboard.java
@@ -21,6 +21,7 @@
 import org.xml.sax.helpers.DefaultHandler;
 
 import java.io.BufferedInputStream;
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -55,6 +56,8 @@
 
       MakeTopLevelHtmlForPerm makeTopLevelHtmlForPerm = new MakeTopLevelHtmlForPerm();
 
+      new File(settings.out.get()).mkdir();
+
       if (GlobalInformation.displayDependencies == true) {
         /**
          * handle dependencies