langtools/src/share/classes/com/sun/tools/doclets/formats/html/ProfilePackageWriterImpl.java
changeset 15723 58a73dac9ee4
child 21008 af0b915df7cc
equal deleted inserted replaced
15167:f627eff81962 15723:58a73dac9ee4
       
     1 /*
       
     2  * Copyright (c) 2013, 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 
       
    26 package com.sun.tools.doclets.formats.html;
       
    27 
       
    28 import java.io.*;
       
    29 import java.util.*;
       
    30 
       
    31 import com.sun.javadoc.*;
       
    32 import com.sun.tools.javac.jvm.Profile;
       
    33 import com.sun.tools.doclets.formats.html.markup.*;
       
    34 import com.sun.tools.doclets.internal.toolkit.*;
       
    35 import com.sun.tools.doclets.internal.toolkit.util.*;
       
    36 
       
    37 /**
       
    38  * Class to generate file for each profile package contents in the right-hand
       
    39  * frame. This will list all the Class Kinds in the package. A click on any
       
    40  * class-kind will update the frame with the clicked class-kind page.
       
    41  *
       
    42  *  <p><b>This is NOT part of any supported API.
       
    43  *  If you write code that depends on this, you do so at your own risk.
       
    44  *  This code and its internal interfaces are subject to change or
       
    45  *  deletion without notice.</b>
       
    46  *
       
    47  * @author Bhavesh Patel
       
    48  */
       
    49 public class ProfilePackageWriterImpl extends HtmlDocletWriter
       
    50     implements ProfilePackageSummaryWriter {
       
    51 
       
    52     /**
       
    53      * The prev package name in the alpha-order list.
       
    54      */
       
    55     protected PackageDoc prev;
       
    56 
       
    57     /**
       
    58      * The next package name in the alpha-order list.
       
    59      */
       
    60     protected PackageDoc next;
       
    61 
       
    62     /**
       
    63      * The profile package being documented.
       
    64      */
       
    65     protected PackageDoc packageDoc;
       
    66 
       
    67     /**
       
    68      * The name of the profile being documented.
       
    69      */
       
    70     protected String profileName;
       
    71 
       
    72     /**
       
    73      * The value of the profile being documented.
       
    74      */
       
    75     protected int profileValue;
       
    76 
       
    77     /**
       
    78      * Constructor to construct ProfilePackageWriter object and to generate
       
    79      * "profilename-package-summary.html" file in the respective package directory.
       
    80      * For example for profile compact1 and package "java.lang" this will generate file
       
    81      * "compact1-package-summary.html" file in the "java/lang" directory. It will also
       
    82      * create "java/lang" directory in the current or the destination directory
       
    83      * if it doesn't exist.
       
    84      *
       
    85      * @param configuration the configuration of the doclet.
       
    86      * @param packageDoc    PackageDoc under consideration.
       
    87      * @param prev          Previous package in the sorted array.
       
    88      * @param next          Next package in the sorted array.
       
    89      * @param profile       The profile being documented.
       
    90      */
       
    91     public ProfilePackageWriterImpl(ConfigurationImpl configuration,
       
    92             PackageDoc packageDoc, PackageDoc prev, PackageDoc next,
       
    93             Profile profile) throws IOException {
       
    94         super(configuration, DocPath.forPackage(packageDoc).resolve(
       
    95                 DocPaths.profilePackageSummary(profile.name)));
       
    96         this.prev = prev;
       
    97         this.next = next;
       
    98         this.packageDoc = packageDoc;
       
    99         this.profileName = profile.name;
       
   100         this.profileValue = profile.value;
       
   101     }
       
   102 
       
   103     /**
       
   104      * {@inheritDoc}
       
   105      */
       
   106     public Content getPackageHeader(String heading) {
       
   107         String pkgName = packageDoc.name();
       
   108         Content bodyTree = getBody(true, getWindowTitle(pkgName));
       
   109         addTop(bodyTree);
       
   110         addNavLinks(true, bodyTree);
       
   111         HtmlTree div = new HtmlTree(HtmlTag.DIV);
       
   112         div.addStyle(HtmlStyle.header);
       
   113         Content profileContent = new StringContent(profileName);
       
   114         Content profileNameDiv = HtmlTree.DIV(HtmlStyle.subTitle, profileContent);
       
   115         div.addContent(profileNameDiv);
       
   116         Content annotationContent = new HtmlTree(HtmlTag.P);
       
   117         addAnnotationInfo(packageDoc, annotationContent);
       
   118         div.addContent(annotationContent);
       
   119         Content tHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
       
   120                 HtmlStyle.title, packageLabel);
       
   121         tHeading.addContent(getSpace());
       
   122         Content packageHead = new RawHtml(heading);
       
   123         tHeading.addContent(packageHead);
       
   124         div.addContent(tHeading);
       
   125         addDeprecationInfo(div);
       
   126         if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
       
   127             HtmlTree docSummaryDiv = new HtmlTree(HtmlTag.DIV);
       
   128             docSummaryDiv.addStyle(HtmlStyle.docSummary);
       
   129             addSummaryComment(packageDoc, docSummaryDiv);
       
   130             div.addContent(docSummaryDiv);
       
   131             Content space = getSpace();
       
   132             Content descLink = getHyperLink(DocLink.fragment("package_description"),
       
   133                     descriptionLabel, "", "");
       
   134             Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
       
   135             div.addContent(descPara);
       
   136         }
       
   137         bodyTree.addContent(div);
       
   138         return bodyTree;
       
   139     }
       
   140 
       
   141     /**
       
   142      * {@inheritDoc}
       
   143      */
       
   144     public Content getContentHeader() {
       
   145         HtmlTree div = new HtmlTree(HtmlTag.DIV);
       
   146         div.addStyle(HtmlStyle.contentContainer);
       
   147         return div;
       
   148     }
       
   149 
       
   150     /**
       
   151      * Add the package deprecation information to the documentation tree.
       
   152      *
       
   153      * @param div the content tree to which the deprecation information will be added
       
   154      */
       
   155     public void addDeprecationInfo(Content div) {
       
   156         Tag[] deprs = packageDoc.tags("deprecated");
       
   157         if (Util.isDeprecated(packageDoc)) {
       
   158             HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV);
       
   159             deprDiv.addStyle(HtmlStyle.deprecatedContent);
       
   160             Content deprPhrase = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
       
   161             deprDiv.addContent(deprPhrase);
       
   162             if (deprs.length > 0) {
       
   163                 Tag[] commentTags = deprs[0].inlineTags();
       
   164                 if (commentTags.length > 0) {
       
   165                     addInlineDeprecatedComment(packageDoc, deprs[0], deprDiv);
       
   166                 }
       
   167             }
       
   168             div.addContent(deprDiv);
       
   169         }
       
   170     }
       
   171 
       
   172     /**
       
   173      * {@inheritDoc}
       
   174      */
       
   175     public void addClassesSummary(ClassDoc[] classes, String label,
       
   176             String tableSummary, String[] tableHeader, Content packageSummaryContentTree) {
       
   177         addClassesSummary(classes, label, tableSummary, tableHeader,
       
   178                 packageSummaryContentTree, profileValue);
       
   179     }
       
   180 
       
   181     /**
       
   182      * {@inheritDoc}
       
   183      */
       
   184     public Content getSummaryHeader() {
       
   185         HtmlTree ul = new HtmlTree(HtmlTag.UL);
       
   186         ul.addStyle(HtmlStyle.blockList);
       
   187         return ul;
       
   188     }
       
   189 
       
   190     /**
       
   191      * {@inheritDoc}
       
   192      */
       
   193     public void addPackageDescription(Content packageContentTree) {
       
   194         if (packageDoc.inlineTags().length > 0) {
       
   195             packageContentTree.addContent(getMarkerAnchor("package_description"));
       
   196             Content h2Content = new StringContent(
       
   197                     configuration.getText("doclet.Package_Description",
       
   198                     packageDoc.name()));
       
   199             packageContentTree.addContent(HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING,
       
   200                     true, h2Content));
       
   201             addInlineComment(packageDoc, packageContentTree);
       
   202         }
       
   203     }
       
   204 
       
   205     /**
       
   206      * {@inheritDoc}
       
   207      */
       
   208     public void addPackageTags(Content packageContentTree) {
       
   209         addTagsInfo(packageDoc, packageContentTree);
       
   210     }
       
   211 
       
   212     /**
       
   213      * {@inheritDoc}
       
   214      */
       
   215     public void addPackageFooter(Content contentTree) {
       
   216         addNavLinks(false, contentTree);
       
   217         addBottom(contentTree);
       
   218     }
       
   219 
       
   220     /**
       
   221      * {@inheritDoc}
       
   222      */
       
   223     public void printDocument(Content contentTree) throws IOException {
       
   224         printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageDoc),
       
   225                 true, contentTree);
       
   226     }
       
   227 
       
   228     /**
       
   229      * Get "Use" link for this package in the navigation bar.
       
   230      *
       
   231      * @return a content tree for the class use link
       
   232      */
       
   233     protected Content getNavLinkClassUse() {
       
   234         Content useLink = getHyperLink(DocPaths.PACKAGE_USE,
       
   235                 useLabel, "", "");
       
   236         Content li = HtmlTree.LI(useLink);
       
   237         return li;
       
   238     }
       
   239 
       
   240     /**
       
   241      * Get "PREV PACKAGE" link in the navigation bar.
       
   242      *
       
   243      * @return a content tree for the previous link
       
   244      */
       
   245     public Content getNavLinkPrevious() {
       
   246         Content li;
       
   247         if (prev == null) {
       
   248             li = HtmlTree.LI(prevpackageLabel);
       
   249         } else {
       
   250             DocPath path = DocPath.relativePath(packageDoc, prev);
       
   251             li = HtmlTree.LI(getHyperLink(path.resolve(DocPaths.profilePackageSummary(profileName)),
       
   252                 prevpackageLabel, "", ""));
       
   253         }
       
   254         return li;
       
   255     }
       
   256 
       
   257     /**
       
   258      * Get "NEXT PACKAGE" link in the navigation bar.
       
   259      *
       
   260      * @return a content tree for the next link
       
   261      */
       
   262     public Content getNavLinkNext() {
       
   263         Content li;
       
   264         if (next == null) {
       
   265             li = HtmlTree.LI(nextpackageLabel);
       
   266         } else {
       
   267             DocPath path = DocPath.relativePath(packageDoc, next);
       
   268             li = HtmlTree.LI(getHyperLink(path.resolve(DocPaths.profilePackageSummary(profileName)),
       
   269                 nextpackageLabel, "", ""));
       
   270         }
       
   271         return li;
       
   272     }
       
   273 
       
   274     /**
       
   275      * Get "Tree" link in the navigation bar. This will be link to the package
       
   276      * tree file.
       
   277      *
       
   278      * @return a content tree for the tree link
       
   279      */
       
   280     protected Content getNavLinkTree() {
       
   281         Content useLink = getHyperLink(DocPaths.PACKAGE_TREE,
       
   282                 treeLabel, "", "");
       
   283         Content li = HtmlTree.LI(useLink);
       
   284         return li;
       
   285     }
       
   286 
       
   287     /**
       
   288      * Highlight "Package" in the navigation bar, as this is the package page.
       
   289      *
       
   290      * @return a content tree for the package link
       
   291      */
       
   292     protected Content getNavLinkPackage() {
       
   293         Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, packageLabel);
       
   294         return li;
       
   295     }
       
   296 }