home *** CD-ROM | disk | FTP | other *** search
Java Source | 1999-09-19 | 10.2 KB | 326 lines |
- /*
- * @(#)ClassUseWriter.java 1.5 98/08/05
- *
- * Copyright 1997, 1998 by Sun Microsystems, Inc.,
- * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
- * All rights reserved.
- *
- * This software is the confidential and proprietary information
- * of Sun Microsystems, Inc. ("Confidential Information"). You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Sun.
- */
-
-
- package com.sun.tools.doclets.standard;
-
- import com.sun.tools.doclets.*;
- import com.sun.javadoc.*;
- import java.io.*;
- import java.lang.*;
- import java.util.*;
-
- /**
- * Generate class usage information.
- *
- * @author Robert G. Field
- */
- public class ClassUseWriter extends SubWriterHolderWriter {
-
- final ClassDoc classdoc;
- final Map pkgToSubclass;
- final Map pkgToSubinterface;
- final Map pkgToImplementingClass;
- final Map pkgToField;
- final Map pkgToMethodReturn;
- final Map pkgToMethodArgs;
- final Map pkgToMethodThrows;
- final Map pkgToConstructorArgs;
- final Map pkgToConstructorThrows;
- final SortedSet pkgSet;
- final MethodSubWriter methodSubWriter;
- final ConstructorSubWriter constrSubWriter;
- final FieldSubWriter fieldSubWriter;
- final ClassSubWriter classSubWriter;
-
-
- /**
- * Constructor.
- *
- * @param filename the file to be generated.
- */
- public ClassUseWriter(ClassUseMapper mapper, String path,
- String filename, String relpath,
- ClassDoc classdoc)
- throws IOException, DocletAbortException {
- super(path, filename, relpath);
- this.classdoc = classdoc;
- HtmlStandardWriter.currentcd = classdoc;
- this.pkgSet = new TreeSet();
- this.pkgToSubclass = pkgDivide(mapper.classToSubclass);
- this.pkgToSubinterface = pkgDivide(mapper.classToSubinterface);
- this.pkgToImplementingClass = pkgDivide(mapper.classToImplementingClass);
- this.pkgToField = pkgDivide(mapper.classToField);
- this.pkgToMethodReturn = pkgDivide(mapper.classToMethodReturn);
- this.pkgToMethodArgs = pkgDivide(mapper.classToMethodArgs);
- this.pkgToMethodThrows = pkgDivide(mapper.classToMethodThrows);
- this.pkgToConstructorArgs = pkgDivide(mapper.classToConstructorArgs);
- this.pkgToConstructorThrows = pkgDivide(mapper.classToConstructorThrows);
- //tmp test
- if (!pkgSet.equals(mapper.classToPackage.get(classdoc))) {
- System.err.println("Internal error: package sets don't match: " + pkgSet + " with: " +
- mapper.classToPackage.get(classdoc));
- }
- methodSubWriter = new MethodSubWriter(this);
- constrSubWriter = new ConstructorSubWriter(this);
- fieldSubWriter = new FieldSubWriter(this);
- classSubWriter = new ClassSubWriter(this);
- }
-
- private Map pkgDivide(Map classMap) {
- Map map = new HashMap();
- List list= (List)classMap.get(classdoc);
- if (list != null) {
- Iterator it = list.iterator();
- while (it.hasNext()) {
- ProgramElementDoc doc = (ProgramElementDoc)it.next();
- PackageDoc pkg = doc.containingPackage();
- pkgSet.add(pkg);
- List inPkg = (List)map.get(pkg);
- if (inPkg == null) {
- inPkg = new ArrayList();
- map.put(pkg, inPkg);
- }
- inPkg.add(doc);
- }
- }
- return map;
- }
-
- /**
- * Generate a class page.
- *
- * @param prev the previous class to generated, or null if no previous.
- * @param classdoc the class to generate.
- * @param next the next class to be generated, or null if no next.
- */
- public static void generate(ClassUseMapper mapper,
- ClassDoc classdoc)
- throws DocletAbortException {
- ClassUseWriter clsgen;
- String path = DirectoryManager.getDirectoryPath(classdoc.
- containingPackage());
- if (path.length() > 0) {
- path += File.separator;
- }
- path += "class-use";
- String filename = classdoc.name() + ".html";
- String pkgname = classdoc.containingPackage().name();
- pkgname += (pkgname.length() > 0)? ".class-use": "class-use";
- String relpath = DirectoryManager.getRelativePath(pkgname);
- try {
- clsgen = new ClassUseWriter(mapper, path, filename,
- relpath, classdoc);
- clsgen.generateClassUseFile();
- clsgen.close();
- } catch (IOException exc) {
- Standard.configuration().standardmessage.
- error("doclet.exception_encountered",
- exc.toString(), filename);
- throw new DocletAbortException();
- }
- }
-
- /**
- * Print the class use list.
- */
- protected void generateClassUseFile() throws IOException {
-
- printClassUseHeader();
-
- if (pkgSet.size() > 0) {
- generateClassUse();
- } else {
- printText("doclet.ClassUse_No.usage.of.0",
- classdoc.qualifiedName());
- p();
- }
-
- printClassUseFooter();
- }
-
- protected void generateClassUse() throws IOException {
- if (Standard.configuration().packages.length > 1) {
- generatePackageList();
- }
- generateClassList();
- }
-
- protected void generatePackageList() throws IOException {
- tableIndexSummary();
- tableHeaderStart("#CCCCFF");
- printText("doclet.ClassUse_Packages.that.use.0",
- getClassLink(classdoc));
- tableHeaderEnd();
-
- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
- PackageDoc pkg = (PackageDoc)it.next();
- generatePackageUse(pkg);
- }
- tableEnd();
- space();
- p();
- }
-
- protected void generateClassList() throws IOException {
- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
- PackageDoc pkg = (PackageDoc)it.next();
- anchor(pkg.name());
- tableIndexSummary();
- tableHeaderStart("#CCCCFF");
- printText("doclet.ClassUse_Uses.of.0.in.1",
- getClassLink(classdoc),
- getPackageLink(pkg));
- tableHeaderEnd();
- tableEnd();
- space();
- p();
- generateClassUse(pkg);
- }
- }
-
- /**
- * Print the package use list.
- */
- protected void generatePackageUse(PackageDoc pkg) throws IOException {
- trBgcolorStyle("white", "TableRowColor");
- summaryRow(0);
- printHyperLink("", pkg.name(), pkg.name(), true);
- summaryRowEnd();
- summaryRow(0);
- printSummaryComment(pkg);
- space();
- summaryRowEnd();
- trEnd();
- }
-
- /**
- * Print the class use list.
- */
- protected void generateClassUse(PackageDoc pkg) throws IOException {
- String classLink = getClassLink(classdoc);
- String pkgLink = getPackageLink(pkg);
- classSubWriter.printUseInfo(pkgToSubclass.get(pkg),
- getText("doclet.ClassUse_Subclass",
- classLink,
- pkgLink));
- classSubWriter.printUseInfo(pkgToSubinterface.get(pkg),
- getText("doclet.ClassUse_Subinterface",
- classLink,
- pkgLink));
- classSubWriter.printUseInfo(pkgToImplementingClass.get(pkg),
- getText("doclet.ClassUse_ImplementingClass",
- classLink,
- pkgLink));
- fieldSubWriter.printUseInfo(pkgToField.get(pkg),
- getText("doclet.ClassUse_Field",
- classLink,
- pkgLink));
- methodSubWriter.printUseInfo(pkgToMethodReturn.get(pkg),
- getText("doclet.ClassUse_MethodReturn",
- classLink,
- pkgLink));
- methodSubWriter.printUseInfo(pkgToMethodArgs.get(pkg),
- getText("doclet.ClassUse_MethodArgs",
- classLink,
- pkgLink));
- methodSubWriter.printUseInfo(pkgToMethodThrows.get(pkg),
- getText("doclet.ClassUse_MethodThrows",
- classLink,
- pkgLink));
- constrSubWriter.printUseInfo(pkgToConstructorArgs.get(pkg),
- getText("doclet.ClassUse_ConstructorArgs",
- classLink,
- pkgLink));
- constrSubWriter.printUseInfo(pkgToConstructorThrows.get(pkg),
- getText("doclet.ClassUse_ConstructorThrows",
- classLink,
- pkgLink));
- }
-
- /**
- * Print the header for the class use Listing.
- */
- protected void printClassUseHeader() {
- String cltype = getText(classdoc.isInterface()?
- "doclet.Interface":
- "doclet.Class");
- String clname = classdoc.qualifiedName();
- printHeader(getText("doclet.Window_ClassUse_Header",
- Standard.configuration().windowtitle,
- cltype, clname));
- navLinks(true);
- hr();
- center();
- h2();
- boldText("doclet.ClassUse_Title", cltype, clname);
- h2End();
- centerEnd();
- }
-
- /**
- * Print the footer for the class use Listing.
- */
- protected void printClassUseFooter() {
- hr();
- navLinks(false);
- printBottom();
- printBodyHtmlEnd();
- }
-
-
- /**
- * Print this package link
- */
- protected void navLinkPackage() {
- navCellStart();
- printHyperLink("../package-summary.html", "",
- getText("doclet.Package"), true, "NavBarFont1");
- navCellEnd();
- }
-
- /**
- * Print class page indicator
- */
- protected void navLinkClass() {
- navCellStart();
- printClassLink(classdoc, "", getText("doclet.Class"), true, "NavBarFont1");
- navCellEnd();
- }
-
- /**
- * Print class use link
- */
- protected void navLinkClassUse() {
- navCellRevStart();
- fontStyle("NavBarFont1Rev");
- boldText("doclet.navClassUse");
- fontEnd();
- navCellEnd();
- }
-
- protected void navLinkTree() {
- navCellStart();
- if (classdoc.containingPackage().isIncluded()) {
- printHyperLink("../package-tree.html", "", getText("doclet.Tree"),
- true, "NavBarFont1");
- } else {
- printHyperLink(relativepath + "overview-tree.html", "",
- getText("doclet.Tree"), true, "NavBarFont1");
- }
- navCellEnd();
- }
-
- }
-