NestedClassWriterImpl.java revision 3233:b5d08bc0d224
1179645Smarcel/*
2179645Smarcel * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
3179645Smarcel * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4179645Smarcel *
5179645Smarcel * This code is free software; you can redistribute it and/or modify it
6179645Smarcel * under the terms of the GNU General Public License version 2 only, as
7179645Smarcel * published by the Free Software Foundation.  Oracle designates this
8179645Smarcel * particular file as subject to the "Classpath" exception as provided
9179645Smarcel * by Oracle in the LICENSE file that accompanied this code.
10179645Smarcel *
11179645Smarcel * This code is distributed in the hope that it will be useful, but WITHOUT
12179645Smarcel * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13179645Smarcel * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14179645Smarcel * version 2 for more details (a copy is included in the LICENSE file that
15179645Smarcel * accompanied this code).
16179645Smarcel *
17179645Smarcel * You should have received a copy of the GNU General Public License version
18179645Smarcel * 2 along with this work; if not, write to the Free Software Foundation,
19179645Smarcel * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20179645Smarcel *
21179645Smarcel * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22179645Smarcel * or visit www.oracle.com if you need additional information or have any
23179645Smarcel * questions.
24179645Smarcel */
25179645Smarcel
26179645Smarcelpackage jdk.javadoc.internal.doclets.formats.html;
27179645Smarcel
28179645Smarcelimport java.io.*;
29179645Smarcel
30179645Smarcelimport java.util.Arrays;
31179645Smarcelimport java.util.List;
32179645Smarcel
33179645Smarcelimport javax.lang.model.element.Element;
34179645Smarcelimport javax.lang.model.element.TypeElement;
35179645Smarcel
36179645Smarcelimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
37179645Smarcelimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
38179645Smarcelimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
39179645Smarcelimport jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
40179645Smarcelimport jdk.javadoc.internal.doclets.toolkit.Content;
41179645Smarcelimport jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter;
42179645Smarcel
43179645Smarcel/**
44179645Smarcel * Writes nested class documentation in HTML format.
45179645Smarcel *
46179645Smarcel *  <p><b>This is NOT part of any supported API.
47179645Smarcel *  If you write code that depends on this, you do so at your own risk.
48179645Smarcel *  This code and its internal interfaces are subject to change or
49179645Smarcel *  deletion without notice.</b>
50179645Smarcel *
51179645Smarcel * @author Robert Field
52179645Smarcel * @author Atul M Dambalkar
53179645Smarcel * @author Jamie Ho (rewrite)
54179645Smarcel * @author Bhavesh Patel (Modified)
55179645Smarcel */
56179645Smarcelpublic class NestedClassWriterImpl extends AbstractMemberWriter
57179645Smarcel    implements MemberSummaryWriter {
58179645Smarcel
59179645Smarcel    public NestedClassWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) {
60179645Smarcel        super(writer, typeElement);
61179645Smarcel    }
62179645Smarcel
63179645Smarcel    public NestedClassWriterImpl(SubWriterHolderWriter writer) {
64179645Smarcel        super(writer);
65179645Smarcel    }
66179645Smarcel
67179645Smarcel    /**
68179645Smarcel     * {@inheritDoc}
69179645Smarcel     */
70179645Smarcel    @Override
71179645Smarcel    public Content getMemberSummaryHeader(TypeElement typeElement,
72179645Smarcel            Content memberSummaryTree) {
73179645Smarcel        memberSummaryTree.addContent(HtmlConstants.START_OF_NESTED_CLASS_SUMMARY);
74179645Smarcel        Content memberTree = writer.getMemberTreeHeader();
75179645Smarcel        writer.addSummaryHeader(this, typeElement, memberTree);
76179645Smarcel        return memberTree;
77179645Smarcel    }
78179645Smarcel
79179645Smarcel    /**
80179645Smarcel     * {@inheritDoc}
81179645Smarcel     */
82179645Smarcel    public void addMemberTree(Content memberSummaryTree, Content memberTree) {
83179645Smarcel        writer.addMemberTree(memberSummaryTree, memberTree);
84179645Smarcel    }
85179645Smarcel
86179645Smarcel    /**
87179645Smarcel     * Close the writer.
88179645Smarcel     */
89179645Smarcel    @Override
90179645Smarcel    public void close() throws IOException {
91179645Smarcel        writer.close();
92179645Smarcel    }
93179645Smarcel
94179645Smarcel    /**
95179645Smarcel     * {@inheritDoc}
96179645Smarcel     */
97179645Smarcel    @Override
98179645Smarcel    public void addSummaryLabel(Content memberTree) {
99179645Smarcel        Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
100179645Smarcel                writer.getResource("doclet.Nested_Class_Summary"));
101179645Smarcel        memberTree.addContent(label);
102179645Smarcel    }
103179645Smarcel
104179645Smarcel    /**
105179645Smarcel     * {@inheritDoc}
106179645Smarcel     */
107179645Smarcel    @Override
108179645Smarcel    public String getTableSummary() {
109179645Smarcel        return configuration.getText("doclet.Member_Table_Summary",
110179645Smarcel                configuration.getText("doclet.Nested_Class_Summary"),
111179645Smarcel                configuration.getText("doclet.nested_classes"));
112179645Smarcel    }
113179645Smarcel
114    /**
115     * {@inheritDoc}
116     */
117    @Override
118    public Content getCaption() {
119        return configuration.getResource("doclet.Nested_Classes");
120    }
121
122    /**
123     * {@inheritDoc}
124     */
125    @Override
126    public List<String> getSummaryTableHeader(Element member) {
127        if (utils.isInterface(member)) {
128            return Arrays.asList(writer.getModifierTypeHeader(),
129                configuration.getText("doclet.0_and_1",
130                    configuration.getText("doclet.Interface"),
131                    configuration.getText("doclet.Description")));
132
133        } else {
134            return Arrays.asList(writer.getModifierTypeHeader(),
135                configuration.getText("doclet.0_and_1",
136                    configuration.getText("doclet.Class"),
137                    configuration.getText("doclet.Description")));
138        }
139    }
140
141    /**
142     * {@inheritDoc}
143     */
144    @Override
145    public void addSummaryAnchor(TypeElement typeElement, Content memberTree) {
146        memberTree.addContent(writer.getMarkerAnchor(
147                SectionName.NESTED_CLASS_SUMMARY));
148    }
149
150    /**
151     * {@inheritDoc}
152     */
153    @Override
154    public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) {
155        inheritedTree.addContent(writer.getMarkerAnchor(
156                SectionName.NESTED_CLASSES_INHERITANCE,
157                utils.getFullyQualifiedName(typeElement)));
158    }
159
160    /**
161     * {@inheritDoc}
162     */
163    @Override
164    public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) {
165        Content classLink = writer.getPreQualifiedClassLink(
166                LinkInfoImpl.Kind.MEMBER, typeElement, false);
167        Content label = new StringContent(utils.isInterface(typeElement)
168                ? configuration.getText("doclet.Nested_Classes_Interface_Inherited_From_Interface")
169                : configuration.getText("doclet.Nested_Classes_Interfaces_Inherited_From_Class"));
170        Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
171                label);
172        labelHeading.addContent(writer.getSpace());
173        labelHeading.addContent(classLink);
174        inheritedTree.addContent(labelHeading);
175    }
176
177    /**
178     * {@inheritDoc}
179     */
180    @Override
181    protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member,
182            Content tdSummary) {
183        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
184                writer.getLink(new LinkInfoImpl(configuration, context, (TypeElement)member)));
185        Content code = HtmlTree.CODE(memberLink);
186        tdSummary.addContent(code);
187    }
188
189    /**
190     * {@inheritDoc}
191     */
192    @Override
193    protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) {
194        linksTree.addContent(
195                writer.getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.MEMBER,
196                        (TypeElement)member)));
197    }
198
199    /**
200     * {@inheritDoc}
201     */
202    @Override
203    protected void addSummaryType(Element member, Content tdSummaryType) {
204        addModifierAndType(member, null, tdSummaryType);
205    }
206
207    /**
208     * {@inheritDoc}
209     */
210    @Override
211    protected Content getDeprecatedLink(Element member) {
212        return writer.getQualifiedClassLink(LinkInfoImpl.Kind.MEMBER, member);
213    }
214
215    /**
216     * {@inheritDoc}
217     */
218    @Override
219    protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
220        if (link) {
221            if (typeElement == null) {
222                return writer.getHyperLink(
223                        SectionName.NESTED_CLASS_SUMMARY,
224                        writer.getResource("doclet.navNested"));
225            } else {
226                return writer.getHyperLink(
227                        SectionName.NESTED_CLASSES_INHERITANCE,
228                        utils.getFullyQualifiedName(typeElement), writer.getResource("doclet.navNested"));
229            }
230        } else {
231            return writer.getResource("doclet.navNested");
232        }
233    }
234
235    /**
236     * {@inheritDoc}
237     */
238    @Override
239    protected void addNavDetailLink(boolean link, Content liNav) {
240    }
241}
242