FileDocCategorySizeDatePackage
Class2HTML.javaAPI DocJava SE 6 API10268Tue Jun 10 00:22:24 BST 2008com.sun.org.apache.bcel.internal.util

Class2HTML

public class Class2HTML extends Object implements com.sun.org.apache.bcel.internal.Constants
Read class file(s) and convert them into HTML files. Given a JavaClass object "class" that is in package "package" five files will be created in the specified directory.
  1. "package"."class".html as the main file which defines the frames for the following subfiles.
  2. "package"."class"_attributes.html contains all (known) attributes found in the file
  3. "package"."class"_cp.html contains the constant pool
  4. "package"."class"_code.html contains the byte code
  5. "package"."class"_methods.html contains references to all methods and fields of the class
All subfiles reference each other appropiately, e.g. clicking on a method in the Method's frame will jump to the appropiate method in the Code frame.
version
$Id: Class2HTML.java,v 1.1.2.1 2005/07/31 23:46:59 jeffsuttor Exp $
author
M. Dahm

Fields Summary
private JavaClass
java_class
private String
dir
private static String
class_package
private static String
class_name
private static ConstantPool
constant_pool
Constructors Summary
public Class2HTML(JavaClass java_class, String dir)
Write contents of the given JavaClass into HTML files.

param
java_class The class to write
param
dir The directory to put the files in

    Method[]     methods       = java_class.getMethods();

    this.java_class = java_class;
    this.dir        = dir;
    class_name      = java_class.getClassName();     // Remember full name
    constant_pool   = java_class.getConstantPool();

    // Get package name by tacking off everything after the last `.'
    int index = class_name.lastIndexOf('.");
    if(index > -1)
      class_package = class_name.substring(0, index);
    else
      class_package = ""; // default package
    
    ConstantHTML constant_html = new ConstantHTML(dir, class_name, class_package, methods,
						  constant_pool);
    
    /* Attributes can't be written in one step, so we just open a file
     * which will be written consequently.
     */
    AttributeHTML attribute_html = new AttributeHTML(dir, class_name, constant_pool, constant_html);

    MethodHTML method_html = new MethodHTML(dir, class_name, methods, java_class.getFields(),
					    constant_html, attribute_html);
    // Write main file (with frames, yuk)
    writeMainHTML(attribute_html);
    new CodeHTML(dir, class_name, methods, constant_pool, constant_html);
    attribute_html.close();
  
Methods Summary
public static void_main(java.lang.String[] argv)

 
    String[]    file_name = new String[argv.length];
    int         files=0;
    ClassParser parser=null;
    JavaClass   java_class=null;
    String      zip_file = null;
    char        sep = System.getProperty("file.separator").toCharArray()[0];
    String      dir = "." + sep; // Where to store HTML files
	
    try {
      /* Parse command line arguments.
       */
      for(int i=0; i < argv.length; i++) {
	if(argv[i].charAt(0) == '-") {  // command line switch
	  if(argv[i].equals("-d")) {   // Specify target directory, default '.'
	    dir = argv[++i];

	    if(!dir.endsWith("" + sep))
	      dir = dir + sep;
		      			
	    new File(dir).mkdirs(); // Create target directory if necessary
	  }
	  else if(argv[i].equals("-zip"))
	    zip_file = argv[++i];
	  else
	    System.out.println("Unknown option " + argv[i]);
	}
	else // add file name to list */
	  file_name[files++] = argv[i];
      }
	
      if(files == 0)
	System.err.println("Class2HTML: No input files specified.");
      else { // Loop through files ...
	for(int i=0; i < files; i++) {
	  System.out.print("Processing " + file_name[i] + "...");
	  if(zip_file == null)
	    parser = new ClassParser(file_name[i]); // Create parser object from file
	  else
	    parser = new ClassParser(zip_file, file_name[i]); // Create parser object from zip file

	  java_class = parser.parse();
	  new Class2HTML(java_class, dir);
	  System.out.println("Done.");
	}		
      }	  
    } catch(Exception e) {
      System.out.println(e);
      e.printStackTrace(System.out);
    }
  
static java.lang.StringreferenceClass(int index)
Utility method that converts a class reference in the constant pool, i.e., an index to a string.

    String str = constant_pool.getConstantString(index, CONSTANT_Class);
    str = Utility.compactClassName(str);
    str = Utility.compactClassName(str, class_package + ".", true);
	
    return "<A HREF=\"" + class_name + "_cp.html#cp" + index + 
      "\" TARGET=ConstantPool>" + str + "</A>";
  
static final java.lang.StringreferenceType(java.lang.String type)

    String short_type = Utility.compactClassName(type);
    short_type = Utility.compactClassName(short_type, class_package + ".", true);

    int index = type.indexOf('["); // Type is an array?
    if(index > -1)
      type = type.substring(0, index); // Tack of the `['  		

    // test for basic type
    if(type.equals("int")  || type.equals("short") || type.equals("boolean") || type.equals("void")   ||
       type.equals("char") || type.equals("byte")  || type.equals("long")    || type.equals("double") ||
       type.equals("float"))
      return "<FONT COLOR=\"#00FF00\">" + type + "</FONT>";
    else
      return "<A HREF=\"" + type + ".html\" TARGET=_top>" + short_type + "</A>";
  
static java.lang.StringtoHTML(java.lang.String str)

    StringBuffer buf = new StringBuffer();

    try { // Filter any characters HTML doesn't like such as < and > in particular
      for(int i=0; i < str.length(); i++) {
	char ch;
				
	switch(ch=str.charAt(i)) {
	case '<": buf.append("<"); break;
	case '>": buf.append(">"); break;
	case '\n": buf.append("\\n"); break;
	case '\r": buf.append("\\r"); break;
	default:  buf.append(ch);
	}
      }
    } catch(StringIndexOutOfBoundsException e) {} // Never occurs

    return buf.toString();
  
private voidwriteMainHTML(com.sun.org.apache.bcel.internal.util.AttributeHTML attribute_html)

    PrintWriter file       = new PrintWriter(new FileOutputStream(dir + class_name + ".html"));
    Attribute[] attributes = java_class.getAttributes();
    
    file.println("<HTML>\n" + "<HEAD><TITLE>Documentation for " + class_name + "</TITLE>" +
		 "</HEAD>\n" +
		 "<FRAMESET BORDER=1 cols=\"30%,*\">\n" +
		 "<FRAMESET BORDER=1 rows=\"80%,*\">\n" +
		
		 "<FRAME NAME=\"ConstantPool\" SRC=\"" + class_name + "_cp.html" + "\"\n MARGINWIDTH=\"0\" " +
		 "MARGINHEIGHT=\"0\" FRAMEBORDER=\"1\" SCROLLING=\"AUTO\">\n" +
		 "<FRAME NAME=\"Attributes\" SRC=\"" + class_name + "_attributes.html" +
		 "\"\n MARGINWIDTH=\"0\" " +
		 "MARGINHEIGHT=\"0\" FRAMEBORDER=\"1\" SCROLLING=\"AUTO\">\n" +
		 "</FRAMESET>\n" +
	
		 "<FRAMESET BORDER=1 rows=\"80%,*\">\n" +
		 "<FRAME NAME=\"Code\" SRC=\"" + class_name + "_code.html\"\n MARGINWIDTH=0 " +
		 "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n" +
		 "<FRAME NAME=\"Methods\" SRC=\"" + class_name + "_methods.html\"\n MARGINWIDTH=0 " +
		 "MARGINHEIGHT=0 FRAMEBORDER=1 SCROLLING=\"AUTO\">\n" +
		 "</FRAMESET></FRAMESET></HTML>"
		 );

    file.close();

    for(int i=0; i < attributes.length; i++)
      attribute_html.writeAttribute(attributes[i], "class" + i);