Updates JreDocTool to print the JRE emulation reference HTML fragment to a file instead of stdout.

Rietveld review: http://gwt-code-reviews.appspot.com/130816


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7468 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/build-tools/doctool/src/com/google/doctool/JreDocTool.java b/build-tools/doctool/src/com/google/doctool/JreDocTool.java
index 7f33ce0..40b7b5c 100644
--- a/build-tools/doctool/src/com/google/doctool/JreDocTool.java
+++ b/build-tools/doctool/src/com/google/doctool/JreDocTool.java
@@ -39,6 +39,9 @@
       } else if (null != (arg = tryParseArg(args, i, "-classpath"))) {
         i++;
         factory.setClasspath(arg);
+      } else if (null != (arg = tryParseArg(args, i, "-out"))) {
+        i++;
+        factory.setOutputFile(arg);
       } else if (null != (arg = tryParseArg(args, i, "-packages"))) {
         i++;
         factory.setPackages(arg);
@@ -69,6 +72,8 @@
     s += "  -sourcepath\n";
     s += "    The path to find Java source for this doc set.\n";
     s += "    E.g. /gwt/src/trunk/user/super/com/google/gwt/emul\n";
+    s += "  -out\n";
+    s += "    The path and filename of the output file\n";
     s += "  -packages\n";
     s += "    A semicolon-separated list of fully-qualified package names.\n";
     s += "    E.g. java.lang;java.lang.annotation;java.util;java.io;java.sql\n";
@@ -112,12 +117,16 @@
 
   private String classpath;
 
+  private String outputFile;
+
   private String packages;
 
   private String sourcepath;
 
-  JreDocTool(String classpath, String packages, String sourcepath) {
+  JreDocTool(String classpath, String outputFile, String packages,
+      String sourcepath) {
     this.classpath = classpath;
+    this.outputFile = outputFile;
     this.packages = packages;
     this.sourcepath = sourcepath;
   }
@@ -141,6 +150,9 @@
     args.add("-sourcepath");
     args.add(this.sourcepath);
 
+    args.add(EztDoclet.OPT_EZTFILE);
+    args.add(this.outputFile);
+
     args.addAll(Arrays.asList(this.packages.split(";")));
 
     com.sun.tools.javadoc.Main.execute(args.toArray(new String[0]));
diff --git a/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java b/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
index d131be7..0e7ac66 100644
--- a/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
+++ b/build-tools/doctool/src/com/google/doctool/JreDocToolFactory.java
@@ -25,6 +25,8 @@
 
   private String classpath;
 
+  private String outputFile;
+
   private String packages;
 
   private String sourcepath;
@@ -35,6 +37,11 @@
       return null;
     }
 
+    if (this.outputFile == null) {
+      err.println("You must specify the output file (-out)");
+      return null;
+    }
+
     if (this.packages == null) {
       err.println("You must specify the -packages");
       return null;
@@ -45,13 +52,17 @@
       return null;
     }
 
-    return new JreDocTool(classpath, packages, sourcepath);
+    return new JreDocTool(classpath, outputFile, packages, sourcepath);
   }
 
   public void setClasspath(String classpath) {
     this.classpath = classpath;
   }
 
+  public void setOutputFile(String outputFile) {
+    this.outputFile = outputFile;
+  }
+
   public void setPackages(String packages) {
     this.packages = packages;
   }
diff --git a/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java b/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
index 4fc4dbc..b19f9fe 100644
--- a/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
+++ b/build-tools/doctool/src/com/google/doctool/custom/EztDoclet.java
@@ -17,10 +17,14 @@
 package com.google.doctool.custom;
 
 import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.DocErrorReporter;
 import com.sun.javadoc.ExecutableMemberDoc;
 import com.sun.javadoc.PackageDoc;
 import com.sun.javadoc.RootDoc;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -34,15 +38,29 @@
  */
 public class EztDoclet {
 
-  private static final String JAVADOC_URL = "http://java.sun.com/javase/6/docs/api/";
+  public static final String OPT_EZTFILE = "-eztfile";
 
   private static EztDoclet EZT_DOCLET;
 
+  private static final String JAVADOC_URL = "http://java.sun.com/javase/6/docs/api/";
+
+  public static int optionLength(String option) {
+    if (option.equals(OPT_EZTFILE)) {
+      return 2;
+    }
+    return 0;
+  }
+
   public static boolean start(RootDoc root) {
     getDoclet().process(root);
     return true;
   }
 
+  public static boolean validOptions(String[][] options,
+      DocErrorReporter reporter) {
+    return getDoclet().analyzeOptions(options, reporter);
+  }
+
   private static EztDoclet getDoclet() {
     if (EZT_DOCLET == null) {
       EZT_DOCLET = new EztDoclet();
@@ -50,6 +68,24 @@
     return EZT_DOCLET;
   }
 
+  private String outputFile;
+
+  private boolean analyzeOptions(String[][] options, DocErrorReporter reporter) {
+    for (int i = 0; i < options.length; i++) {
+      if (options[i][0] == OPT_EZTFILE) {
+        outputFile = options[i][1];
+      }
+    }
+
+    if (outputFile == null) {
+      reporter.printError("You must specify an output filepath with "
+          + OPT_EZTFILE);
+      return false;
+    }
+
+    return true;
+  }
+
   private String createMemberList(Collection<ExecutableMemberDoc> members) {
     StringBuffer buffer = new StringBuffer();
     Iterator<ExecutableMemberDoc> iter = members.iterator();
@@ -64,54 +100,61 @@
   }
 
   private void process(RootDoc root) {
-    PrintWriter pw = new PrintWriter(System.out, true);
+    try {
+      File outFile = new File(outputFile);
+      outFile.getParentFile().mkdirs();
+      FileWriter fw = new FileWriter(outFile);
+      PrintWriter pw = new PrintWriter(fw, true);
 
-    pw.println("<ol class=\"toc\" id=\"pageToc\">");
-    for (PackageDoc pack : root.specifiedPackages()) {
-      pw.format("  <li><a href=\"#Package_%s\">%s</a></li>\n",
-          pack.name().replace('.', '_'), pack.name());
-    }
-    pw.println("</ol>\n");
-
-    for (PackageDoc pack : root.specifiedPackages()) {
-      pw.format("<h1 id=\"Package_%s\">Package %s</h1>\n", pack.name().replace(
-          '.', '_'), pack.name());
-      pw.println("<dl>");
-
-      String packURL = JAVADOC_URL + pack.name().replace(".", "/") + "/";
-
-      // Sort the classes alphabetically
-      ClassDoc[] classes = pack.allClasses(true);
-      Arrays.sort(classes, new Comparator<ClassDoc>() {
-        public int compare(ClassDoc arg0, ClassDoc arg1) {
-          return arg0.name().compareTo(arg1.name());
-        }
-      });
-
-      Iterator<ClassDoc> iter = Arrays.asList(classes).iterator();
-      while (iter.hasNext()) {
-        ClassDoc cls = iter.next();
-
-        // Each class links to Sun's main JavaDoc
-        pw.format("  <dt><a href=\"%s%s.html\">%s</a></dt>\n", packURL,
-            cls.name(), cls.name());
-
-        // Print out all constructors and methods
-        Collection<ExecutableMemberDoc> members = new ArrayList<ExecutableMemberDoc>();
-        members.addAll(Arrays.asList(cls.constructors(true)));
-        members.addAll(Arrays.asList(cls.methods(true)));
-
-        if (!members.isEmpty()) {
-          pw.format("  <dd>%s</dd>\n", createMemberList(members));
-        }
-
-        if (iter.hasNext()) {
-          pw.print("\n");
-        }
+      pw.println("<ol class=\"toc\" id=\"pageToc\">");
+      for (PackageDoc pack : root.specifiedPackages()) {
+        pw.format("  <li><a href=\"#Package_%s\">%s</a></li>\n",
+            pack.name().replace('.', '_'), pack.name());
       }
+      pw.println("</ol>\n");
 
-      pw.println("</dl>\n");
+      for (PackageDoc pack : root.specifiedPackages()) {
+        pw.format("<h1 id=\"Package_%s\">Package %s</h1>\n",
+            pack.name().replace('.', '_'), pack.name());
+        pw.println("<dl>");
+
+        String packURL = JAVADOC_URL + pack.name().replace(".", "/") + "/";
+
+        // Sort the classes alphabetically
+        ClassDoc[] classes = pack.allClasses(true);
+        Arrays.sort(classes, new Comparator<ClassDoc>() {
+          public int compare(ClassDoc arg0, ClassDoc arg1) {
+            return arg0.name().compareTo(arg1.name());
+          }
+        });
+
+        Iterator<ClassDoc> iter = Arrays.asList(classes).iterator();
+        while (iter.hasNext()) {
+          ClassDoc cls = iter.next();
+
+          // Each class links to Sun's main JavaDoc
+          pw.format("  <dt><a href=\"%s%s.html\">%s</a></dt>\n", packURL,
+              cls.name(), cls.name());
+
+          // Print out all constructors and methods
+          Collection<ExecutableMemberDoc> members = new ArrayList<ExecutableMemberDoc>();
+          members.addAll(Arrays.asList(cls.constructors(true)));
+          members.addAll(Arrays.asList(cls.methods(true)));
+
+          if (!members.isEmpty()) {
+            pw.format("  <dd>%s</dd>\n", createMemberList(members));
+          }
+
+          if (iter.hasNext()) {
+            pw.print("\n");
+          }
+        }
+
+        pw.println("</dl>\n");
+      }
+      pw.close();
+    } catch (IOException e) {
+      throw new RuntimeException(e);
     }
-    pw.close();
   }
 }
diff --git a/doc/build.xml b/doc/build.xml
index 7f4be01..8c31465 100644
--- a/doc/build.xml
+++ b/doc/build.xml
@@ -100,23 +100,21 @@
     </outofdate>
   </target>
 
-  <target name="wiki-lang">
+  <target name="emul-ezt">
     <outofdate>
       <sourcefiles>
-        <fileset file="./src/RefJreHeader.wiki" />
         <fileset dir="${gwt.root}/user/super/com/google/gwt/emul">
           <include name="**/*.java" />
         </fileset>
       </sourcefiles>
       <targetfiles>
-        <pathelement path="${project.build}/wiki/RefJreEmulation.wiki" />
+        <pathelement path="${project.build}/emul-ezt/fragment.html" />
       </targetfiles>
       <sequential>
+        <echo>Building JRE emulation EZT</echo>
         <java classpathref="DOC_PATH" classname="com.google.doctool.JreDocTool" fork="yes" failonerror="true">
           <arg value="-out" />
-          <arg value="${project.build}/wiki/RefJreEmulation.wiki" />
-          <arg value="-header" />
-          <arg value="./src/RefJreHeader.wiki" />
+          <arg value="${project.build}/emul-ezt/fragment.html" />
           <arg value="-classpath" />
           <arg pathref="USER_CLASS_PATH" />
           <arg value="-sourcepath" />
@@ -128,5 +126,5 @@
     </outofdate>
   </target>
 
-  <target name="build" depends="javadoc, wiki-lang" />
+  <target name="build" depends="javadoc, emul-ezt" />
 </project>