/* * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.doclets.formats.html; import com.sun.tools.doclets.internal.toolkit.util.*; import com.sun.javadoc.*; import java.io.*; /** * Class to generate Tree page for a package. The name of the file generated is * "package-tree.html" and it is generated in the respective package directory. * * @author Atul M Dambalkar */ public class PackageTreeWriter extends AbstractTreeWriter { /** * Package for which tree is to be generated. */ protected PackageDoc packagedoc; /** * The previous package name in the alpha-order list. */ protected PackageDoc prev; /** * The next package name in the alpha-order list. */ protected PackageDoc next; /** * Constructor. * @throws IOException * @throws DocletAbortException */ public PackageTreeWriter(ConfigurationImpl configuration, String path, String filename, PackageDoc packagedoc, PackageDoc prev, PackageDoc next) throws IOException { super(configuration, path, filename, new ClassTree( configuration.classDocCatalog.allClasses(packagedoc), configuration), packagedoc); this.packagedoc = packagedoc; this.prev = prev; this.next = next; } /** * Construct a PackageTreeWriter object and then use it to generate the * package tree page. * * @param pkg Package for which tree file is to be generated. * @param prev Previous package in the alpha-ordered list. * @param next Next package in the alpha-ordered list. * @param noDeprecated If true, do not generate any information for * deprecated classe or interfaces. * @throws DocletAbortException */ public static void generate(ConfigurationImpl configuration, PackageDoc pkg, PackageDoc prev, PackageDoc next, boolean noDeprecated) { PackageTreeWriter packgen; String path = DirectoryManager.getDirectoryPath(pkg); String filename = "package-tree.html"; try { packgen = new PackageTreeWriter(configuration, path, filename, pkg, prev, next); packgen.generatePackageTreeFile(); packgen.close(); } catch (IOException exc) { configuration.standardmessage.error( "doclet.exception_encountered", exc.toString(), filename); throw new DocletAbortException(); } } /** * Generate a separate tree file for each package. */ protected void generatePackageTreeFile() throws IOException { printHtmlHeader(packagedoc.name() + " " + configuration.getText("doclet.Window_Class_Hierarchy"), null, true); printPackageTreeHeader(); if (configuration.packages.length > 1) { printLinkToMainTree(); } generateTree(classtree.baseclasses(), "doclet.Class_Hierarchy"); generateTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy"); generateTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy"); generateTree(classtree.baseEnums(), "doclet.Enum_Hierarchy"); printPackageTreeFooter(); printBottom(); printBodyHtmlEnd(); } /** * Print the navigation bar header for the package tree file. */ protected void printPackageTreeHeader() { printTop(); navLinks(true); hr(); center(); h2(configuration.getText("doclet.Hierarchy_For_Package", Util.getPackageName(packagedoc))); centerEnd(); } /** * Generate a link to the tree for all the packages. */ protected void printLinkToMainTree() { dl(); dt(); boldText("doclet.Package_Hierarchies"); dd(); navLinkMainTree(configuration.getText("doclet.All_Packages")); dlEnd(); hr(); } /** * Print the navigation bar footer for the package tree file. */ protected void printPackageTreeFooter() { hr(); navLinks(false); } /** * Link for the previous package tree file. */ protected void navLinkPrevious() { if (prev == null) { navLinkPrevious(null); } else { String path = DirectoryManager.getRelativePath(packagedoc.name(), prev.name()); navLinkPrevious(path + "package-tree.html"); } } /** * Link for the next package tree file. */ protected void navLinkNext() { if (next == null) { navLinkNext(null); } else { String path = DirectoryManager.getRelativePath(packagedoc.name(), next.name()); navLinkNext(path + "package-tree.html"); } } /** * Link to the package summary page for the package of this tree. */ protected void navLinkPackage() { navCellStart(); printHyperLink("package-summary.html", "", configuration.getText("doclet.Package"), true, "NavBarFont1"); navCellEnd(); } }