[PATCH] Ant Task for JavaSrc

Davanum Srinivas <[email protected]> Sat, 27 Dec 2003 21:37:46 -0800 (PST)
Newsgroups gmane.comp.jakarta.alexandria.devel
Message-ID <[email protected]>
--0-1411424175-1072589866=:65368
Content-Type: text/plain; charset=us-ascii
Content-Id: 
Content-Disposition: inline

Hi team,

please find enclosed a patch that populates allclasses-frame.html and an ant task for JavaSrc.
Eventually, i'd like to be able to use gump and javasrc to generate stuff that we can open up to
crawlers for say google search engine.

thanks,
dims

=====
Davanum Srinivas - http://webservices.apache.org/~dims/
--0-1411424175-1072589866=:65368
Content-Type: text/plain; name="diff.txt"
Content-Description: diff.txt
Content-Disposition: inline; filename="diff.txt"

? diff.txt
? src/java/org/apache/alexandria/javasrc/JavaSrcTask.java
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/build.xml,v
retrieving revision 1.25
diff -d -u -b -B -w -u -r1.25 build.xml
--- build.xml	15 Apr 2003 16:14:23 -0000	1.25
+++ build.xml	28 Dec 2003 05:26:08 -0000
@@ -34,6 +34,16 @@
       </fileset>
    </path>
 
+   <path id="task.classpath">
+      <fileset  dir="lib">
+         <include name="*.jar" />
+      </fileset>
+      <fileset dir="${ant.home}/lib">
+         <include name="*.jar" />
+      </fileset>
+      <pathelement path="${build.classes}"/>
+   </path>
+
    <target
     name="init">
 <!-- Create the time stamp -->
@@ -46,6 +56,7 @@
    <target name="compile" depends="init">
 <!-- Compile the java code from ${src} into ${target} -->
       <javac srcdir="${src}"
+             debug="true"
              destdir="${build.classes}"
              classpathref="lib.classpath" />
    </target>
@@ -137,6 +148,14 @@
       <jsdoc jSDir="${js.src}" destDir="${target.jsdoc}" />
    </target>   
    
+   <target name="javasrc2" depends="compile">
+      <mkdir dir="${target.javasrc}" />
+      <taskdef name="javasrc" classname="org.apache.alexandria.javasrc.JavaSrcTask">
+        <classpath refid="task.classpath"/>
+      </taskdef>
+      <javasrc srcDir="${java.src}" destDir="${target.javasrc}" />
+   </target>   
+
    <target name="uml" depends="xml, xml2dot, dot">
        <antcall target="dot">
         <param name="dot.format" value="svg"/>
Index: src/java/org/apache/alexandria/javasrc/Pass1.java
===================================================================
RCS file: /home/cvs/jakarta-alexandria/src/java/org/apache/alexandria/javasrc/Pass1.java,v
retrieving revision 1.2
diff -d -u -b -B -w -u -r1.2 Pass1.java
--- src/java/org/apache/alexandria/javasrc/Pass1.java	11 Apr 2003 14:31:53 -0000	1.2
+++ src/java/org/apache/alexandria/javasrc/Pass1.java	28 Dec 2003 05:26:10 -0000
@@ -138,8 +138,6 @@
 
             // if we have at least one command-line argument
             if (args.length > 0 ) {
-                initializeDefaults();
-
 				System.out.println("outDirPath is "+getOutDir());
 				symbolTable.setOutDirPath(getOutDir());
 
Index: src/java/org/apache/alexandria/javasrc/Pass2.java
===================================================================
RCS file: /home/cvs/jakarta-alexandria/src/java/org/apache/alexandria/javasrc/Pass2.java,v
retrieving revision 1.2
diff -d -u -b -B -w -u -r1.2 Pass2.java
--- src/java/org/apache/alexandria/javasrc/Pass2.java	11 Apr 2003 14:31:53 -0000	1.2
+++ src/java/org/apache/alexandria/javasrc/Pass2.java	28 Dec 2003 05:26:11 -0000
@@ -452,6 +452,32 @@
 		return result;
 	}
 	
+    private List orderedAllClasses()
+    {
+        List result = new ArrayList();
+        Iterator packageIter = packageNames.iterator();
+        while (packageIter.hasNext()) {
+            String packageName = (String)packageIter.next();
+            HashMap hm = (HashMap)packageClasses.get(packageName);
+            String packageFileName = "";
+            if(packageName.indexOf('.')!= -1) {
+                packageFileName = packageName.replace('.','/');
+                packageFileName += '/';
+            }
+    
+            // Hmmm, is this supposed to be easier than using Hashtable.keys()?
+            Set es = hm.entrySet();
+            Iterator iter = es.iterator();
+            while (iter.hasNext()) {
+                Map.Entry me = (Map.Entry)iter.next();
+                ClassFile cf = new ClassFile((String)me.getKey(), packageFileName + (String)me.getValue());
+                result.add(cf);
+            }
+        }
+        Collections.sort(result, classFileComparator());
+        return result;
+    }
+    
 	private Comparator stringComparator()
 	{
 		return new Comparator() {
@@ -550,7 +576,20 @@
 
         try {
             PrintWriter pw = new PrintWriter(new FileOutputStream(file));
-            pw.println("packageFrame");
+            pw.println("<html><head><link rel=\"stylesheet\" type=\"text/css\"" +
+                       "href=\"styles.css\"></head><body>");
+            Iterator iter = orderedAllClasses().iterator();
+            while (iter.hasNext())
+            {	    
+                ClassFile cf = (ClassFile)iter.next();
+                String className = cf.className;
+                String fileClassName = (String)cf.fileName;
+                String anchor = className;
+                String tag = "<p class=\"classListItem\"><a href=\"" + fileClassName + "_java.html#" + anchor + "\" TARGET=\"classFrame\">"+ className +"</a></p>";
+                pw.println(tag);
+            }
+            
+            pw.println("</body></html>");
             pw.close();
         }
         catch (Exception e) { e.printStackTrace(); }

--0-1411424175-1072589866=:65368
Content-Type: text/java; name="JavaSrcTask.java"
Content-Description: JavaSrcTask.java
Content-Disposition: inline; filename="JavaSrcTask.java"

package org.apache.alexandria.javasrc;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.GlobPatternMapper;
import org.apache.tools.ant.util.SourceFileScanner;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Runs the javasrc converter as a task inside
 * the well known build tool "ant" (see ant.apache.org).
 * 
 * @author <a href="mailto:[email protected]">Davanum Srinivas</a>
 */
public class JavaSrcTask extends MatchingTask {
    private File srcDir;
    private File destDir;
    private boolean recurse = true;
    private String title = "JavaSrc";
    private boolean verbose = false;

    /**
     * Constructor for JavaSrcTask.
     */
    public JavaSrcTask() {
        super();
    }

    /**
     * Returns the directory where the Java sources are stored.
     * 
     * @return String directory name
     */
    public File getSrcDir() {
        return srcDir;
    }

    /**
     * Sets the directory where the Java sources are stored.
     * 
     * @param javaDir directory name
     */
    public void setSrcDir(File javaDir) {
        this.srcDir = javaDir;
    }

    /**
     * Returns the directory where the HTML output is written.
     * 
     * @return String directory name
     */
    public File getDestDir() {
        return destDir;
    }

    /**
     * Sets the directory where the HTML output is written.
     * 
     * @param htmlDir directory name
     */
    public void setDestDir(File htmlDir) {
        this.destDir = htmlDir;
    }

    /**
     * @see org.apache.tools.ant.Task#execute()
     */
    public void execute() throws BuildException {
        if (srcDir == null) {
            // We directly change the user variable, because it
            // shouldn't lead to problems
            srcDir = this.getProject().resolveFile(".");
        }

        // find the files/directories
        DirectoryScanner dirScanner = getDirectoryScanner(srcDir);

        // get a list of files to work on
        String[] allSourceFiles = dirScanner.getIncludedFiles();

        SourceFileScanner sourceScanner = new SourceFileScanner(this);
        FileNameMapper sourceToOutMapper = new GlobPatternMapper();
        sourceToOutMapper.setFrom("*");
        sourceToOutMapper.setTo("*.java");
        String[] sourceFilesToProcess = sourceScanner.restrict(allSourceFiles, srcDir, destDir, sourceToOutMapper);

        if (sourceFilesToProcess.length > 0) {
            String files = (sourceFilesToProcess.length == 1 ? " file" : " files");
            log("Converting " + sourceFilesToProcess.length + files, Project.MSG_INFO);
        }

        for (int i = 0; i < sourceFilesToProcess.length; ++i) {
            sourceFilesToProcess[i] = new File(srcDir, sourceFilesToProcess[i]).getAbsolutePath();
        }
        Pass1 p1 = new Pass1();
        p1.initializeDefaults();
        p1.setOutDir(destDir.getAbsolutePath());
        p1.setRecurse(recurse);
        p1.setTitle(title);
        p1.setVerbose(verbose);
        p1.run(sourceFilesToProcess);

        Pass2 p2 = new Pass2();
        p2.initializeDefaults();
        p2.setOutDir(destDir.getAbsolutePath());
        p2.setTitle(title);
        p2.setVerbose(verbose);
        try {
            p2.run(new String[]{});
            printCSSFile();
        } catch (IOException ioe) {
            throw new BuildException(ioe);
        }
    }

    public boolean getRecurse() {
        return recurse;
    }

    public void setRecurse(boolean recurse) {
        this.recurse = recurse;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public boolean getVerbose() {
        return verbose;
    }

    public void setVerbose(boolean verbose) {
        this.verbose = verbose;
    }

    private void printCSSFile() throws IOException {
        FileOutputStream css = new FileOutputStream(new File(destDir, "styles.css"));
        PrintWriter pw = new PrintWriter(css);
        pw.println("body { font-family: lucida, verdana, arial, sans-serif; font-size:10pt } ");
        pw.println("pre { font-size:10pt } ");
        pw.println("");
        pw.println(".comment   { color:#007d00; font-style:italic } ");
        pw.println(".linenum   { color:#888 font-weight:normal; } ");
        pw.println(".textDiv   { font-weight:bold } ");
        pw.println("");
        pw.println(".packageListItem { margin:0; padding:0; border:0 } ");
        pw.println(".packageName {	font-weight:bold } ");
        pw.println("");
        pw.println(".classDef  { color:#875b37;font-weight:bold } ");
        pw.println(".classRef  { color:#875b37;font-weight:normal; } ");
        pw.println(".classListItem  {  margin:0; padding:0; border:0 } ");
        pw.println(".classReflist         { border-bottom:solid } ");
        pw.println(".classReflistHeader   { font-weight:bold; border:0; margin:0; padding:0 } ");
        pw.println(".classRefItem         { margin:0; padding:0; border:0 } ");
        pw.println("p.classRefItem a        { color:#875b37 } ");
        pw.println("p.classReflistHeader a  { color:#875b37 } ");
        pw.println("");
        pw.println("");
        pw.println(".methodDef { color:#377587;font-weight:bold } ");
        pw.println(".methodRef { color:#377587;font-weight:normal } ");
        pw.println(".methodReflist         { } ");
        pw.println(".methodReflistHeader   { font-weight:bold; border:0; margin:0; padding:0} ");
        pw.println(".methodRefItem         { margin:0; padding:0; border:0; color:#009 } ");
        pw.println("p.methodRefItem a        { color:#377587 } ");
        pw.println("p.methodReflistHeader a  { color:#377587 } ");
        pw.println("");
        pw.println("");
        pw.println(".varDef    { color:#232187;font-weight:bold } ");
        pw.println(".varRef    { color:#232187;font-weight:normal } ");
        pw.println(".variableReflist         { } ");
        pw.println(".variableReflistHeader   { color:#000000;font-weight:bold;  border:0; margin:0; padding:0} ");
        pw.println(".variableRefItem         { margin:0; padding:0; border:0; color:#660 } ");
        pw.println("p.variableRefItem a        { color:#232187; } ");
        pw.println("p.variableRefListheader a  { color:#232187; } ");
        pw.println("");
        pw.close();
    }
}



--0-1411424175-1072589866=:65368
Content-Type: text/plain; charset=us-ascii

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--0-1411424175-1072589866=:65368--