001    /*
002     * Copyright 1998-2005 Sun Microsystems, Inc.  All Rights Reserved.
003     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004     *
005     * This code is free software; you can redistribute it and/or modify it
006     * under the terms of the GNU General Public License version 2 only, as
007     * published by the Free Software Foundation.  Sun designates this
008     * particular file as subject to the "Classpath" exception as provided
009     * by Sun in the LICENSE file that accompanied this code.
010     *
011     * This code is distributed in the hope that it will be useful, but WITHOUT
012     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014     * version 2 for more details (a copy is included in the LICENSE file that
015     * accompanied this code).
016     *
017     * You should have received a copy of the GNU General Public License version
018     * 2 along with this work; if not, write to the Free Software Foundation,
019     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020     *
021     * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022     * CA 95054 USA or visit www.sun.com if you need additional information or
023     * have any questions.
024     */
025    
026    package com.sun.tools.doclets.formats.html;
027    
028    import com.sun.javadoc.*;
029    import java.io.*;
030    import java.util.*;
031    
032    /**
033     * Abstract class to generate the overview files in
034     * Frame and Non-Frame format. This will be sub-classed by to
035     * generate overview-frame.html as well as overview-summary.html.
036     *
037     * @author Atul M Dambalkar
038     */
039    public abstract class AbstractPackageIndexWriter extends HtmlDocletWriter {
040    
041        /**
042         * Array of Packages to be documented.
043         */
044        protected PackageDoc[] packages;
045    
046        /**
047         * Constructor. Also initialises the packages variable.
048         *
049         * @param filename Name of the package index file to be generated.
050         */
051        public AbstractPackageIndexWriter(ConfigurationImpl configuration,
052                                          String filename) throws IOException {
053            super(configuration, filename);
054            this.relativepathNoSlash = ".";
055            packages = configuration.packages;
056        }
057    
058        protected abstract void printNavigationBarHeader();
059    
060        protected abstract void printNavigationBarFooter();
061    
062        protected abstract void printOverviewHeader();
063    
064        protected abstract void printIndexHeader(String text);
065    
066        protected abstract void printIndexRow(PackageDoc pkg);
067    
068        protected abstract void printIndexFooter();
069    
070        /**
071         * Generate the contants in the package index file. Call appropriate
072         * methods from the sub-class in order to generate Frame or Non
073         * Frame format.
074         * @param title the title of the window.
075         * @param includeScript boolean set true if windowtitle script is to be included
076         */
077        protected void generatePackageIndexFile(String title, boolean includeScript) throws IOException {
078            String windowOverview = configuration.getText(title);
079            printHtmlHeader(windowOverview,
080                configuration.metakeywords.getOverviewMetaKeywords(title,
081                    configuration.doctitle),
082                includeScript);
083            printNavigationBarHeader();
084            printOverviewHeader();
085    
086            generateIndex();
087    
088            printOverview();
089    
090            printNavigationBarFooter();
091            printBodyHtmlEnd();
092        }
093    
094        /**
095         * Default to no overview, overwrite to add overview.
096         */
097        protected void printOverview() throws IOException {
098        }
099    
100        /**
101         * Generate the frame or non-frame package index.
102         */
103        protected void generateIndex() {
104            printIndexContents(packages, "doclet.Package_Summary");
105        }
106    
107        /**
108         * Generate code for package index contents. Call appropriate methods from
109         * the sub-classes.
110         *
111         * @param packages Array of packages to be documented.
112         * @param text     String which will be used as the heading.
113         */
114        protected void printIndexContents(PackageDoc[] packages, String text) {
115            if (packages.length > 0) {
116                Arrays.sort(packages);
117                printIndexHeader(text);
118                printAllClassesPackagesLink();
119                for(int i = 0; i < packages.length; i++) {
120                    if (packages[i] != null) {
121                        printIndexRow(packages[i]);
122                    }
123                }
124                printIndexFooter();
125            }
126        }
127    
128        /**
129         * Print the doctitle, if it is specified on the command line.
130         */
131        protected void printConfigurationTitle() {
132            if (configuration.doctitle.length() > 0) {
133                center();
134                h1(configuration.doctitle);
135                centerEnd();
136            }
137        }
138    
139        /**
140         * Highlight "Overview" in the strong format, in the navigation bar as this
141         * is the overview page.
142         */
143        protected void navLinkContents() {
144            navCellRevStart();
145            fontStyle("NavBarFont1Rev");
146            strongText("doclet.Overview");
147            fontEnd();
148            navCellEnd();
149        }
150    
151        /**
152         * Do nothing. This will be overridden in PackageIndexFrameWriter.
153         */
154        protected void printAllClassesPackagesLink() {
155        }
156    }