duke@1: /* duke@1: * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. duke@1: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@1: * duke@1: * This code is free software; you can redistribute it and/or modify it duke@1: * under the terms of the GNU General Public License version 2 only, as duke@1: * published by the Free Software Foundation. Sun designates this duke@1: * particular file as subject to the "Classpath" exception as provided duke@1: * by Sun in the LICENSE file that accompanied this code. duke@1: * duke@1: * This code is distributed in the hope that it will be useful, but WITHOUT duke@1: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@1: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@1: * version 2 for more details (a copy is included in the LICENSE file that duke@1: * accompanied this code). duke@1: * duke@1: * You should have received a copy of the GNU General Public License version duke@1: * 2 along with this work; if not, write to the Free Software Foundation, duke@1: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@1: * duke@1: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, duke@1: * CA 95054 USA or visit www.sun.com if you need additional information or duke@1: * have any questions. duke@1: */ duke@1: duke@1: package com.sun.tools.doclets.internal.toolkit.builders; duke@1: duke@1: import com.sun.tools.doclets.internal.toolkit.util.*; duke@1: import com.sun.tools.doclets.internal.toolkit.*; duke@1: import com.sun.javadoc.*; duke@1: import java.io.*; duke@1: import java.util.*; duke@1: import java.lang.reflect.*; duke@1: duke@1: /** duke@1: * Builds the summary for a given package. duke@1: * duke@1: * This code is not part of an API. duke@1: * It is implementation that is subject to change. duke@1: * Do not use it as an API duke@1: * duke@1: * @author Jamie Ho bpatel@243: * @author Bhavesh Patel (Modified) duke@1: * @since 1.5 duke@1: */ duke@1: public class PackageSummaryBuilder extends AbstractBuilder { duke@1: duke@1: /** duke@1: * The root element of the package summary XML is {@value}. duke@1: */ duke@1: public static final String ROOT = "PackageDoc"; duke@1: duke@1: /** duke@1: * The package being documented. duke@1: */ duke@1: private PackageDoc packageDoc; duke@1: duke@1: /** duke@1: * The doclet specific writer that will output the result. duke@1: */ duke@1: private PackageSummaryWriter packageWriter; duke@1: duke@1: private PackageSummaryBuilder(Configuration configuration) { duke@1: super(configuration); duke@1: } duke@1: duke@1: /** duke@1: * Construct a new PackageSummaryBuilder. duke@1: * @param configuration the current configuration of the doclet. duke@1: * @param pkg the package being documented. duke@1: * @param packageWriter the doclet specific writer that will output the duke@1: * result. duke@1: * duke@1: * @return an instance of a PackageSummaryBuilder. duke@1: */ duke@1: public static PackageSummaryBuilder getInstance( duke@1: Configuration configuration, duke@1: PackageDoc pkg, duke@1: PackageSummaryWriter packageWriter) { duke@1: PackageSummaryBuilder builder = duke@1: new PackageSummaryBuilder(configuration); duke@1: builder.packageDoc = pkg; duke@1: builder.packageWriter = packageWriter; duke@1: return builder; duke@1: } duke@1: duke@1: /** duke@1: * {@inheritDoc} duke@1: */ duke@1: public void invokeMethod( duke@1: String methodName, mcimadamore@184: Class[] paramClasses, duke@1: Object[] params) duke@1: throws Exception { duke@1: if (DEBUG) { duke@1: configuration.root.printError( duke@1: "DEBUG: " + this.getClass().getName() + "." + methodName); duke@1: } duke@1: Method method = this.getClass().getMethod(methodName, paramClasses); duke@1: method.invoke(this, params); duke@1: } duke@1: duke@1: /** duke@1: * Build the package summary. duke@1: */ duke@1: public void build() throws IOException { duke@1: if (packageWriter == null) { duke@1: //Doclet does not support this output. duke@1: return; duke@1: } duke@1: build(LayoutParser.getInstance(configuration).parseXML(ROOT)); duke@1: } duke@1: duke@1: /** duke@1: * {@inheritDoc} duke@1: */ duke@1: public String getName() { duke@1: return ROOT; duke@1: } duke@1: duke@1: /** duke@1: * Build the package documentation. duke@1: */ mcimadamore@184: public void buildPackageDoc(List elements) throws Exception { duke@1: build(elements); duke@1: packageWriter.close(); duke@1: Util.copyDocFiles( duke@1: configuration, duke@1: Util.getPackageSourcePath(configuration, packageDoc), duke@1: DirectoryManager.getDirectoryPath(packageDoc) duke@1: + File.separator duke@1: + DocletConstants.DOC_FILES_DIR_NAME, duke@1: true); duke@1: } duke@1: duke@1: /** duke@1: * Build the header of the summary. duke@1: */ duke@1: public void buildPackageHeader() { duke@1: packageWriter.writePackageHeader(Util.getPackageName(packageDoc)); duke@1: } duke@1: duke@1: /** duke@1: * Build the description of the summary. duke@1: */ duke@1: public void buildPackageDescription() { duke@1: if (configuration.nocomment) { duke@1: return; duke@1: } duke@1: packageWriter.writePackageDescription(); duke@1: } duke@1: duke@1: /** duke@1: * Build the tags of the summary. duke@1: */ duke@1: public void buildPackageTags() { duke@1: if (configuration.nocomment) { duke@1: return; duke@1: } duke@1: packageWriter.writePackageTags(); duke@1: } duke@1: duke@1: /** duke@1: * Build the package summary. duke@1: */ mcimadamore@184: public void buildSummary(List elements) { duke@1: build(elements); duke@1: } duke@1: duke@1: /** duke@1: * Build the overall header. duke@1: */ duke@1: public void buildSummaryHeader() { duke@1: packageWriter.writeSummaryHeader(); duke@1: } duke@1: duke@1: /** duke@1: * Build the overall footer. duke@1: */ duke@1: public void buildSummaryFooter() { duke@1: packageWriter.writeSummaryFooter(); duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the classes in this package. duke@1: */ duke@1: public void buildClassSummary() { bpatel@243: String classTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Class_Summary"), bpatel@243: configuration.getText("doclet.classes")); bpatel@243: String[] classTableHeader = new String[] { bpatel@243: configuration.getText("doclet.Class"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] classes = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.ordinaryClasses() duke@1: : configuration.classDocCatalog.ordinaryClasses( duke@1: Util.getPackageName(packageDoc)); duke@1: if (classes.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: classes, bpatel@243: configuration.getText("doclet.Class_Summary"), bpatel@243: classTableSummary, classTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the interfaces in this package. duke@1: */ duke@1: public void buildInterfaceSummary() { bpatel@243: String interfaceTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Interface_Summary"), bpatel@243: configuration.getText("doclet.interfaces")); bpatel@243: String[] interfaceTableHeader = new String[] { bpatel@243: configuration.getText("doclet.Interface"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] interfaces = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.interfaces() duke@1: : configuration.classDocCatalog.interfaces( duke@1: Util.getPackageName(packageDoc)); duke@1: if (interfaces.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: interfaces, bpatel@243: configuration.getText("doclet.Interface_Summary"), bpatel@243: interfaceTableSummary, interfaceTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the enums in this package. duke@1: */ duke@1: public void buildAnnotationTypeSummary() { bpatel@243: String annotationtypeTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Annotation_Types_Summary"), bpatel@243: configuration.getText("doclet.annotationtypes")); bpatel@243: String[] annotationtypeTableHeader = new String[] { bpatel@243: configuration.getText("doclet.AnnotationType"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] annotationTypes = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.annotationTypes() duke@1: : configuration.classDocCatalog.annotationTypes( duke@1: Util.getPackageName(packageDoc)); duke@1: if (annotationTypes.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: annotationTypes, bpatel@243: configuration.getText("doclet.Annotation_Types_Summary"), bpatel@243: annotationtypeTableSummary, annotationtypeTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the enums in this package. duke@1: */ duke@1: public void buildEnumSummary() { bpatel@243: String enumTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Enum_Summary"), bpatel@243: configuration.getText("doclet.enums")); bpatel@243: String[] enumTableHeader = new String[] { bpatel@243: configuration.getText("doclet.Enum"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] enums = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.enums() duke@1: : configuration.classDocCatalog.enums( duke@1: Util.getPackageName(packageDoc)); duke@1: if (enums.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: enums, bpatel@243: configuration.getText("doclet.Enum_Summary"), bpatel@243: enumTableSummary, enumTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the exceptions in this package. duke@1: */ duke@1: public void buildExceptionSummary() { bpatel@243: String exceptionTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Exception_Summary"), bpatel@243: configuration.getText("doclet.exceptions")); bpatel@243: String[] exceptionTableHeader = new String[] { bpatel@243: configuration.getText("doclet.Exception"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] exceptions = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.exceptions() duke@1: : configuration.classDocCatalog.exceptions( duke@1: Util.getPackageName(packageDoc)); duke@1: if (exceptions.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: exceptions, bpatel@243: configuration.getText("doclet.Exception_Summary"), bpatel@243: exceptionTableSummary, exceptionTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the summary for the errors in this package. duke@1: */ duke@1: public void buildErrorSummary() { bpatel@243: String errorTableSummary = bpatel@243: configuration.getText("doclet.Member_Table_Summary", bpatel@243: configuration.getText("doclet.Error_Summary"), bpatel@243: configuration.getText("doclet.errors")); bpatel@243: String[] errorTableHeader = new String[] { bpatel@243: configuration.getText("doclet.Error"), bpatel@243: configuration.getText("doclet.Description") bpatel@243: }; bpatel@243: ClassDoc[] errors = duke@1: packageDoc.isIncluded() duke@1: ? packageDoc.errors() duke@1: : configuration.classDocCatalog.errors( duke@1: Util.getPackageName(packageDoc)); duke@1: if (errors.length > 0) { duke@1: packageWriter.writeClassesSummary( duke@1: errors, bpatel@243: configuration.getText("doclet.Error_Summary"), bpatel@243: errorTableSummary, errorTableHeader); duke@1: } duke@1: } duke@1: duke@1: /** duke@1: * Build the footer of the summary. duke@1: */ duke@1: public void buildPackageFooter() { duke@1: packageWriter.writePackageFooter(); duke@1: } duke@1: }