001    /*
002     * Copyright 1998-2008 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.taglets.*;
030    import com.sun.javadoc.*;
031    
032    /**
033     * Generate serialized form for Serializable/Externalizable methods.
034     * Documentation denoted by the <code>serialData</code> tag is processed.
035     *
036     * @author Joe Fialli
037     */
038    public class HtmlSerialMethodWriter extends MethodWriterImpl implements
039            SerializedFormWriter.SerialMethodWriter{
040    
041        private boolean printedFirstMember = false;
042    
043        public HtmlSerialMethodWriter(SubWriterHolderWriter writer,
044                ClassDoc classdoc) {
045            super(writer, classdoc);
046        }
047    
048        public void writeHeader(String heading) {
049            writer.anchor("serialized_methods");
050            writer.printTableHeadingBackground(heading);
051            writer.p();
052        }
053    
054        public void writeNoCustomizationMsg(String msg) {
055            writer.print(msg);
056            writer.p();
057        }
058    
059        public void writeMemberHeader(MethodDoc member) {
060            if (printedFirstMember) {
061                writer.printMemberHeader();
062            }
063            printedFirstMember = true;
064            writer.anchor(member);
065            printHead(member);
066            writeSignature(member);
067        }
068    
069        public void writeMemberFooter(MethodDoc member) {
070            writer.dlEnd();
071        }
072    
073        public void writeDeprecatedMemberInfo(MethodDoc member) {
074            print(((TagletOutputImpl)
075                (new DeprecatedTaglet()).getTagletOutput(member,
076                writer.getTagletWriterInstance(false))).toString());
077        }
078    
079        public void writeMemberDescription(MethodDoc member) {
080            printComment(member);
081        }
082    
083        public void writeMemberTags(MethodDoc member) {
084            writer.dd();
085            writer.dl();
086            TagletOutputImpl output = new TagletOutputImpl("");
087            TagletManager tagletManager =
088                ConfigurationImpl.getInstance().tagletManager;
089            TagletWriter.genTagOuput(tagletManager, member,
090                tagletManager.getSerializedFormTags(),
091                writer.getTagletWriterInstance(false), output);
092            print(output.toString());
093            MethodDoc method = member;
094            if (method.name().compareTo("writeExternal") == 0
095                    && method.tags("serialData").length == 0) {
096                serialWarning(member.position(), "doclet.MissingSerialDataTag",
097                    method.containingClass().qualifiedName(), method.name());
098            }
099            writer.ddEnd();
100            writer.dlEnd();
101        }
102    
103        protected void printTypeLinkNoDimension(Type type) {
104            ClassDoc cd = type.asClassDoc();
105            if (type.isPrimitive() || cd.isPackagePrivate()) {
106                print(type.typeName());
107            } else {
108                writer.printLink(new LinkInfoImpl(
109                    LinkInfoImpl.CONTEXT_SERIAL_MEMBER,type));
110            }
111        }
112    }