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.*;
029: import com.sun.tools.doclets.internal.toolkit.util.*;
030: import com.sun.javadoc.*;
031:
032: import java.io.*;
033:
034: /**
035: * Writes nested class documentation in HTML format.
036: *
037: * @author Robert Field
038: * @author Atul M Dambalkar
039: * @author Jamie Ho (rewrite)
040: */
041: public class NestedClassWriterImpl extends AbstractMemberWriter
042: implements MemberSummaryWriter {
043:
044: private boolean printedSummaryHeader = false;
045:
046: public NestedClassWriterImpl(SubWriterHolderWriter writer,
047: ClassDoc classdoc) {
048: super (writer, classdoc);
049: }
050:
051: public NestedClassWriterImpl(SubWriterHolderWriter writer) {
052: super (writer);
053: }
054:
055: /**
056: * Write the classes summary header for the given class.
057: *
058: * @param classDoc the class the summary belongs to.
059: */
060: public void writeMemberSummaryHeader(ClassDoc classDoc) {
061: printedSummaryHeader = true;
062: writer
063: .println("<!-- ======== NESTED CLASS SUMMARY ======== -->");
064: writer.println();
065: writer.printSummaryHeader(this , classDoc);
066: }
067:
068: /**
069: * Write the classes summary footer for the given class.
070: *
071: * @param classDoc the class the summary belongs to.
072: */
073: public void writeMemberSummaryFooter(ClassDoc classDoc) {
074: writer.printSummaryFooter(this , classDoc);
075: }
076:
077: /**
078: * Write the inherited classes summary header for the given class.
079: *
080: * @param classDoc the class the summary belongs to.
081: */
082: public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
083: if (!printedSummaryHeader) {
084: //We don't want inherited summary to not be under heading.
085: writeMemberSummaryHeader(classDoc);
086: writeMemberSummaryFooter(classDoc);
087: printedSummaryHeader = true;
088: }
089: writer.printInheritedSummaryHeader(this , classDoc);
090: }
091:
092: /**
093: * {@inheritDoc}
094: */
095: public void writeInheritedMemberSummary(ClassDoc classDoc,
096: ProgramElementDoc nestedClass, boolean isFirst,
097: boolean isLast) {
098: writer.printInheritedSummaryMember(this , classDoc, nestedClass,
099: isFirst);
100: }
101:
102: /**
103: * Write the inherited classes summary footer for the given class.
104: *
105: * @param classDoc the class the summary belongs to.
106: */
107: public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
108: writer.printInheritedSummaryFooter(this , classDoc);
109: writer.println();
110: }
111:
112: /**
113: * Write the header for the nested class documentation.
114: *
115: * @param classDoc the class that the classes belong to.
116: */
117: public void writeHeader(ClassDoc classDoc, String header) {
118: writer.anchor("nested class_detail");
119: writer.printTableHeadingBackground(header);
120: }
121:
122: /**
123: * Write the nested class header for the given nested class.
124: *
125: * @param nestedClass the nested class being documented.
126: * @param isFirst the flag to indicate whether or not the nested class is the
127: * first to be documented.
128: */
129: public void writeClassHeader(ClassDoc nestedClass, boolean isFirst) {
130: if (!isFirst) {
131: writer.printMemberHeader();
132: writer.println("");
133: }
134: writer.anchor(nestedClass.name());
135: writer.dl();
136: writer.h3();
137: writer.print(nestedClass.name());
138: writer.h3End();
139: }
140:
141: /**
142: * Close the writer.
143: */
144: public void close() throws IOException {
145: writer.close();
146: }
147:
148: public int getMemberKind() {
149: return VisibleMemberMap.INNERCLASSES;
150: }
151:
152: public void printSummaryLabel(ClassDoc cd) {
153: writer.boldText("doclet.Nested_Class_Summary");
154: }
155:
156: public void printSummaryAnchor(ClassDoc cd) {
157: writer.anchor("nested_class_summary");
158: }
159:
160: public void printInheritedSummaryAnchor(ClassDoc cd) {
161: writer.anchor("nested_classes_inherited_from_class_"
162: + cd.qualifiedName());
163: }
164:
165: public void printInheritedSummaryLabel(ClassDoc cd) {
166: String clslink = writer.getPreQualifiedClassLink(
167: LinkInfoImpl.CONTEXT_MEMBER, cd, false);
168: writer.bold();
169: writer
170: .printText(
171: cd.isInterface() ? "doclet.Nested_Classes_Interface_Inherited_From_Interface"
172: : "doclet.Nested_Classes_Interfaces_Inherited_From_Class",
173: clslink);
174: writer.boldEnd();
175: }
176:
177: protected void writeSummaryLink(int context, ClassDoc cd,
178: ProgramElementDoc member) {
179: writer.bold();
180: writer.printLink(new LinkInfoImpl(context, (ClassDoc) member,
181: false));
182: writer.boldEnd();
183: }
184:
185: protected void writeInheritedSummaryLink(ClassDoc cd,
186: ProgramElementDoc member) {
187: writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
188: (ClassDoc) member, false));
189: }
190:
191: protected void printSummaryType(ProgramElementDoc member) {
192: ClassDoc cd = (ClassDoc) member;
193: printModifierAndType(cd, null);
194: }
195:
196: protected void printHeader(ClassDoc cd) {
197: // N.A.
198: }
199:
200: protected void printBodyHtmlEnd(ClassDoc cd) {
201: // N.A.
202: }
203:
204: protected void printMember(ProgramElementDoc member) {
205: // N.A.
206: }
207:
208: protected void writeDeprecatedLink(ProgramElementDoc member) {
209: writer.printQualifiedClassLink(LinkInfoImpl.CONTEXT_MEMBER,
210: (ClassDoc) member);
211: }
212:
213: protected void printNavSummaryLink(ClassDoc cd, boolean link) {
214: if (link) {
215: writer.printHyperLink("",
216: (cd == null) ? "nested_class_summary"
217: : "nested_classes_inherited_from_class_"
218: + cd.qualifiedName(),
219: ConfigurationImpl.getInstance().getText(
220: "doclet.navNested"));
221: } else {
222: writer.printText("doclet.navNested");
223: }
224: }
225:
226: protected void printNavDetailLink(boolean link) {
227: }
228:
229: protected void printMemberLink(ProgramElementDoc member) {
230: }
231:
232: protected void printMembersSummaryLink(ClassDoc cd, ClassDoc icd,
233: boolean link) {
234: if (link) {
235: writer.printHyperLink(cd.name() + ".html",
236: (cd == icd) ? "nested_class_summary"
237: : "nested_classes_inherited_from_class_"
238: + icd.qualifiedName(),
239: ConfigurationImpl.getInstance().getText(
240: "doclet.Nested_Class_Summary"));
241: } else {
242: writer.printText("doclet.Nested_Class_Summary");
243: }
244: }
245: }
|