001: /*
002: * Copyright 1997-2004 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.tools.doclets.internal.toolkit.util.*;
029: import java.io.*;
030:
031: /**
032: * Generate the documentation in the Html "frame" format in the browser. The
033: * generated documentation will have two or three frames depending upon the
034: * number of packages on the command line. In general there will be three frames
035: * in the output, a left-hand top frame will have a list of all packages with
036: * links to target left-hand bottom frame. The left-hand bottom frame will have
037: * the particular package contents or the all-classes list, where as the single
038: * right-hand frame will have overview or package summary or class file. Also
039: * take care of browsers which do not support Html frames.
040: *
041: * @author Atul M Dambalkar
042: */
043: public class FrameOutputWriter extends HtmlDocletWriter {
044:
045: /**
046: * Number of packages specified on the command line.
047: */
048: int noOfPackages;
049:
050: /**
051: * Constructor to construct FrameOutputWriter object.
052: *
053: * @param filename File to be generated.
054: */
055: public FrameOutputWriter(ConfigurationImpl configuration,
056: String filename) throws IOException {
057: super (configuration, filename);
058: noOfPackages = configuration.packages.length;
059: }
060:
061: /**
062: * Construct FrameOutputWriter object and then use it to generate the Html
063: * file which will have the description of all the frames in the
064: * documentation. The name of the generated file is "index.html" which is
065: * the default first file for Html documents.
066: * @throws DocletAbortException
067: */
068: public static void generate(ConfigurationImpl configuration) {
069: FrameOutputWriter framegen;
070: String filename = "";
071: try {
072: filename = "index.html";
073: framegen = new FrameOutputWriter(configuration, filename);
074: framegen.generateFrameFile();
075: framegen.close();
076: } catch (IOException exc) {
077: configuration.standardmessage.error(
078: "doclet.exception_encountered", exc.toString(),
079: filename);
080: throw new DocletAbortException();
081: }
082: }
083:
084: /**
085: * Generate the contants in the "index.html" file. Print the frame details
086: * as well as warning if browser is not supporting the Html frames.
087: */
088: protected void generateFrameFile() {
089: if (configuration.windowtitle.length() > 0) {
090: printFramesetHeader(configuration.windowtitle,
091: configuration.notimestamp);
092: } else {
093: printFramesetHeader(configuration
094: .getText("doclet.Generated_Docs_Untitled"),
095: configuration.notimestamp);
096: }
097: printFrameDetails();
098: printFrameFooter();
099: }
100:
101: /**
102: * Generate the code for issueing the warning for a non-frame capable web
103: * client. Also provide links to the non-frame version documentation.
104: */
105: protected void printFrameWarning() {
106: noFrames();
107: h2();
108: printText("doclet.Frame_Alert");
109: h2End();
110: p();
111: printText("doclet.Frame_Warning_Message");
112: br();
113: printText("doclet.Link_To");
114: printHyperLink(configuration.topFile, configuration
115: .getText("doclet.Non_Frame_Version"));
116: println("");
117: noFramesEnd();
118: }
119:
120: /**
121: * Print the frame sizes and their contents.
122: */
123: protected void printFrameDetails() {
124: // title attribute intentionally made empty so
125: // 508 tests will not flag it as missing
126: frameSet("cols=\"20%,80%\" title=\"\" onLoad=\"top.loadFrames()\"");
127: if (noOfPackages <= 1) {
128: printAllClassesFrameTag();
129: } else if (noOfPackages > 1) {
130: frameSet("rows=\"30%,70%\" title=\"\" onLoad=\"top.loadFrames()\"");
131: printAllPackagesFrameTag();
132: printAllClassesFrameTag();
133: frameSetEnd();
134: }
135: printClassFrameTag();
136: printFrameWarning();
137: frameSetEnd();
138: }
139:
140: /**
141: * Print the FRAME tag for the frame that lists all packages
142: */
143: private void printAllPackagesFrameTag() {
144: frame("src=\"overview-frame.html\" name=\"packageListFrame\""
145: + " title=\""
146: + configuration.getText("doclet.All_Packages") + "\"");
147: }
148:
149: /**
150: * Print the FRAME tag for the frame that lists all classes
151: */
152: private void printAllClassesFrameTag() {
153: frame("src=\""
154: + "allclasses-frame.html"
155: + "\""
156: + " name=\"packageFrame\""
157: + " title=\""
158: + configuration
159: .getText("doclet.All_classes_and_interfaces")
160: + "\"");
161: }
162:
163: /**
164: * Print the FRAME tag for the frame that describes the class in detail
165: */
166: private void printClassFrameTag() {
167: frame("src=\""
168: + configuration.topFile
169: + "\""
170: + " name=\"classFrame\""
171: + " title=\""
172: + configuration
173: .getText("doclet.Package_class_and_interface_descriptions")
174: + "\" scrolling=\"yes\"");
175: }
176:
177: }
|