001: /*
002: * Copyright 2003-2005 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.internal.toolkit.util.links;
027:
028: import com.sun.javadoc.*;
029: import com.sun.tools.doclets.internal.toolkit.Configuration;
030:
031: /**
032: * Encapsulates information about a link.
033: *
034: * @author Jamie Ho
035: * @since 1.5
036: */
037: public abstract class LinkInfo {
038:
039: /**
040: * The ClassDoc we want to link to. Null if we are not linking
041: * to a ClassDoc.
042: */
043: public ClassDoc classDoc;
044:
045: /**
046: * The executable member doc we want to link to. Null if we are not linking
047: * to an executable member.
048: */
049: public ExecutableMemberDoc executableMemberDoc;
050:
051: /**
052: * The Type we want to link to. Null if we are not linking to a type.
053: */
054: public Type type;
055:
056: /**
057: * True if this is a link to a VarArg.
058: */
059: public boolean isVarArg = false;
060:
061: /**
062: * Set this to true to indicate that you are linking to a type parameter.
063: */
064: public boolean isTypeBound = false;
065:
066: /**
067: * The label for the link.
068: */
069: public String label;
070:
071: /**
072: * True if the link should be bolded.
073: */
074: public boolean isBold = false;
075:
076: /**
077: * True if we should include the type in the link label. False otherwise.
078: */
079: public boolean includeTypeInClassLinkLabel = true;
080:
081: /**
082: * True if we should include the type as seperate link. False otherwise.
083: */
084: public boolean includeTypeAsSepLink = false;
085:
086: /**
087: * True if we should exclude the type bounds for the type parameter.
088: */
089: public boolean excludeTypeBounds = false;
090:
091: /**
092: * True if we should print the type parameters, but not link them.
093: */
094: public boolean excludeTypeParameterLinks = false;
095:
096: /**
097: * True if we should print the type bounds, but not link them.
098: */
099: public boolean excludeTypeBoundsLinks = false;
100:
101: /**
102: * By default, the link can be to the page it's already on. However,
103: * there are cases where we don't want this (e.g. heading of class page).
104: */
105: public boolean linkToSelf = true;
106:
107: /**
108: * The display length for the link.
109: */
110: public int displayLength = 0;
111:
112: /**
113: * Return the id indicating where the link appears in the documentation.
114: * This is used for special processing of different types of links.
115: *
116: * @return the id indicating where the link appears in the documentation.
117: */
118: public abstract int getContext();
119:
120: /**
121: * Set the context.
122: *
123: * @param c the context id to set.
124: */
125: public abstract void setContext(int c);
126:
127: /**
128: * Return true if this link is linkable and false if we can't link to the
129: * desired place.
130: *
131: * @return true if this link is linkable and false if we can't link to the
132: * desired place.
133: */
134: public abstract boolean isLinkable();
135:
136: /**
137: * Return the label for this class link.
138: *
139: * @param configuration the current configuration of the doclet.
140: * @return the label for this class link.
141: */
142: public String getClassLinkLabel(Configuration configuration) {
143: if (label != null && label.length() > 0) {
144: return label;
145: } else if (isLinkable()) {
146: return classDoc.name();
147: } else {
148: return configuration.getClassName(classDoc);
149: }
150: }
151: }
|