AbstractPackageIndexWriter.java revision 2571:10fc81ac75b4
1/* 2 * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.tools.doclets.formats.html; 27 28import java.io.*; 29import java.util.*; 30 31import com.sun.javadoc.*; 32import com.sun.tools.doclets.formats.html.markup.*; 33import com.sun.tools.doclets.internal.toolkit.*; 34import com.sun.tools.doclets.internal.toolkit.util.DocPath; 35 36/** 37 * Abstract class to generate the overview files in 38 * Frame and Non-Frame format. This will be sub-classed by to 39 * generate overview-frame.html as well as overview-summary.html. 40 * 41 * <p><b>This is NOT part of any supported API. 42 * If you write code that depends on this, you do so at your own risk. 43 * This code and its internal interfaces are subject to change or 44 * deletion without notice.</b> 45 * 46 * @author Atul M Dambalkar 47 * @author Bhavesh Patel (Modified) 48 */ 49public abstract class AbstractPackageIndexWriter extends HtmlDocletWriter { 50 51 /** 52 * A Set of Packages to be documented. 53 */ 54 protected SortedSet<PackageDoc> packages; 55 56 /** 57 * Constructor. Also initializes the packages variable. 58 * 59 * @param configuration The current configuration 60 * @param filename Name of the package index file to be generated. 61 */ 62 public AbstractPackageIndexWriter(ConfigurationImpl configuration, 63 DocPath filename) throws IOException { 64 super(configuration, filename); 65 packages = configuration.packages; 66 } 67 68 /** 69 * Adds the navigation bar header to the documentation tree. 70 * 71 * @param body the document tree to which the navigation bar header will be added 72 */ 73 protected abstract void addNavigationBarHeader(Content body); 74 75 /** 76 * Adds the navigation bar footer to the documentation tree. 77 * 78 * @param body the document tree to which the navigation bar footer will be added 79 */ 80 protected abstract void addNavigationBarFooter(Content body); 81 82 /** 83 * Adds the overview header to the documentation tree. 84 * 85 * @param body the document tree to which the overview header will be added 86 */ 87 protected abstract void addOverviewHeader(Content body); 88 89 /** 90 * Adds the packages list to the documentation tree. 91 * 92 * @param packages a collection of packagedoc objects 93 * @param text caption for the table 94 * @param tableSummary summary for the table 95 * @param body the document tree to which the packages list will be added 96 */ 97 protected abstract void addPackagesList(Collection<PackageDoc> packages, String text, 98 String tableSummary, Content body); 99 100 /** 101 * Generate and prints the contents in the package index file. Call appropriate 102 * methods from the sub-class in order to generate Frame or Non 103 * Frame format. 104 * 105 * @param title the title of the window. 106 * @param includeScript boolean set true if windowtitle script is to be included 107 */ 108 protected void buildPackageIndexFile(String title, boolean includeScript) throws IOException { 109 String windowOverview = configuration.getText(title); 110 Content body = getBody(includeScript, getWindowTitle(windowOverview)); 111 addNavigationBarHeader(body); 112 addOverviewHeader(body); 113 addIndex(body); 114 addOverview(body); 115 addNavigationBarFooter(body); 116 printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title, 117 configuration.doctitle), includeScript, body); 118 } 119 120 /** 121 * Default to no overview, override to add overview. 122 * 123 * @param body the document tree to which the overview will be added 124 */ 125 protected void addOverview(Content body) throws IOException { 126 } 127 128 /** 129 * Adds the frame or non-frame package index to the documentation tree. 130 * 131 * @param body the document tree to which the index will be added 132 */ 133 protected void addIndex(Content body) { 134 addIndexContents(packages, "doclet.Package_Summary", 135 configuration.getText("doclet.Member_Table_Summary", 136 configuration.getText("doclet.Package_Summary"), 137 configuration.getText("doclet.packages")), body); 138 } 139 140 /** 141 * Adds package index contents. Call appropriate methods from 142 * the sub-classes. Adds it to the body HtmlTree 143 * 144 * @param packages a collection of packages to be documented 145 * @param text string which will be used as the heading 146 * @param tableSummary summary for the table 147 * @param body the document tree to which the index contents will be added 148 */ 149 protected void addIndexContents(Collection<PackageDoc> packages, String text, 150 String tableSummary, Content body) { 151 if (!packages.isEmpty()) { 152 HtmlTree div = new HtmlTree(HtmlTag.DIV); 153 div.addStyle(HtmlStyle.indexHeader); 154 addAllClassesLink(div); 155 if (configuration.showProfiles) { 156 addAllProfilesLink(div); 157 } 158 body.addContent(div); 159 if (configuration.showProfiles && configuration.profilePackages.size() > 0) { 160 Content profileSummary = configuration.getResource("doclet.Profiles"); 161 addProfilesList(profileSummary, body); 162 } 163 addPackagesList(packages, text, tableSummary, body); 164 } 165 } 166 167 /** 168 * Adds the doctitle to the documentation tree, if it is specified on the command line. 169 * 170 * @param body the document tree to which the title will be added 171 */ 172 protected void addConfigurationTitle(Content body) { 173 if (configuration.doctitle.length() > 0) { 174 Content title = new RawHtml(configuration.doctitle); 175 Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, 176 HtmlStyle.title, title); 177 Content div = HtmlTree.DIV(HtmlStyle.header, heading); 178 body.addContent(div); 179 } 180 } 181 182 /** 183 * Returns highlighted "Overview", in the navigation bar as this is the 184 * overview page. 185 * 186 * @return a Content object to be added to the documentation tree 187 */ 188 protected Content getNavLinkContents() { 189 Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, overviewLabel); 190 return li; 191 } 192 193 /** 194 * Do nothing. This will be overridden. 195 * 196 * @param div the document tree to which the all classes link will be added 197 */ 198 protected void addAllClassesLink(Content div) { 199 } 200 201 /** 202 * Do nothing. This will be overridden. 203 * 204 * @param div the document tree to which the all profiles link will be added 205 */ 206 protected void addAllProfilesLink(Content div) { 207 } 208 209 /** 210 * Do nothing. This will be overridden. 211 * 212 * @param profileSummary the profile summary heading 213 * @param body the content tree to which the profiles list will be added 214 */ 215 protected void addProfilesList(Content profileSummary, Content body) { 216 } 217} 218