javax.servlet.jsp.tagext.TagInfo Maven / Gradle / Ivy
The newest version!
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.servlet.jsp.tagext;
/**
* Tag information for a tag in a Tag Library;
* This class is instantiated from the Tag Library Descriptor file (TLD)
* and is available only at translation time.
*
*
*/
public class TagInfo {
/**
* Static constant for getBodyContent() when it is JSP.
*/
public static final String BODY_CONTENT_JSP = "JSP";
/**
* Static constant for getBodyContent() when it is Tag dependent.
*/
public static final String BODY_CONTENT_TAG_DEPENDENT = "tagdependent";
/**
* Static constant for getBodyContent() when it is empty.
*/
public static final String BODY_CONTENT_EMPTY = "empty";
/**
* Static constant for getBodyContent() when it is scriptless.
*
* @since JSP 2.0
*/
public static final String BODY_CONTENT_SCRIPTLESS = "scriptless";
/**
* Constructor for TagInfo from data in the JSP 1.1 format for TLD.
* This class is to be instantiated only from the TagLibrary code
* under request from some JSP code that is parsing a
* TLD (Tag Library Descriptor).
*
* Note that, since TagLibibraryInfo reflects both TLD information
* and taglib directive information, a TagInfo instance is
* dependent on a taglib directive. This is probably a
* design error, which may be fixed in the future.
*
* @param tagName The name of this tag
* @param tagClassName The name of the tag handler class
* @param bodycontent Information on the body content of these tags
* @param infoString The (optional) string information for this tag
* @param taglib The instance of the tag library that contains us.
* @param tagExtraInfo The instance providing extra Tag info. May be null
* @param attributeInfo An array of AttributeInfo data from descriptor.
* May be null;
*
*/
public TagInfo(String tagName,
String tagClassName,
String bodycontent,
String infoString,
TagLibraryInfo taglib,
TagExtraInfo tagExtraInfo,
TagAttributeInfo[] attributeInfo) {
this.tagName = tagName;
this.tagClassName = tagClassName;
this.bodyContent = bodycontent;
this.infoString = infoString;
this.tagLibrary = taglib;
this.tagExtraInfo = tagExtraInfo;
this.attributeInfo = attributeInfo;
if (tagExtraInfo != null)
tagExtraInfo.setTagInfo(this);
}
/**
* Constructor for TagInfo from data in the JSP 1.2 format for TLD.
* This class is to be instantiated only from the TagLibrary code
* under request from some JSP code that is parsing a
* TLD (Tag Library Descriptor).
*
* Note that, since TagLibibraryInfo reflects both TLD information
* and taglib directive information, a TagInfo instance is
* dependent on a taglib directive. This is probably a
* design error, which may be fixed in the future.
*
* @param tagName The name of this tag
* @param tagClassName The name of the tag handler class
* @param bodycontent Information on the body content of these tags
* @param infoString The (optional) string information for this tag
* @param taglib The instance of the tag library that contains us.
* @param tagExtraInfo The instance providing extra Tag info. May be null
* @param attributeInfo An array of AttributeInfo data from descriptor.
* May be null;
* @param displayName A short name to be displayed by tools
* @param smallIcon Path to a small icon to be displayed by tools
* @param largeIcon Path to a large icon to be displayed by tools
* @param tvi An array of a TagVariableInfo (or null)
*/
public TagInfo(String tagName,
String tagClassName,
String bodycontent,
String infoString,
TagLibraryInfo taglib,
TagExtraInfo tagExtraInfo,
TagAttributeInfo[] attributeInfo,
String displayName,
String smallIcon,
String largeIcon,
TagVariableInfo[] tvi) {
this.tagName = tagName;
this.tagClassName = tagClassName;
this.bodyContent = bodycontent;
this.infoString = infoString;
this.tagLibrary = taglib;
this.tagExtraInfo = tagExtraInfo;
this.attributeInfo = attributeInfo;
this.displayName = displayName;
this.smallIcon = smallIcon;
this.largeIcon = largeIcon;
this.tagVariableInfo = tvi;
if (tagExtraInfo != null)
tagExtraInfo.setTagInfo(this);
}
/**
* Constructor for TagInfo from data in the JSP 2.0 format for TLD.
* This class is to be instantiated only from the TagLibrary code
* under request from some JSP code that is parsing a
* TLD (Tag Library Descriptor).
*
* Note that, since TagLibibraryInfo reflects both TLD information
* and taglib directive information, a TagInfo instance is
* dependent on a taglib directive. This is probably a
* design error, which may be fixed in the future.
*
* @param tagName The name of this tag
* @param tagClassName The name of the tag handler class
* @param bodycontent Information on the body content of these tags
* @param infoString The (optional) string information for this tag
* @param taglib The instance of the tag library that contains us.
* @param tagExtraInfo The instance providing extra Tag info. May be null
* @param attributeInfo An array of AttributeInfo data from descriptor.
* May be null;
* @param displayName A short name to be displayed by tools
* @param smallIcon Path to a small icon to be displayed by tools
* @param largeIcon Path to a large icon to be displayed by tools
* @param tvi An array of a TagVariableInfo (or null)
* @param dynamicAttributes True if supports dynamic attributes
*
* @since JSP 2.0
*/
public TagInfo(String tagName,
String tagClassName,
String bodycontent,
String infoString,
TagLibraryInfo taglib,
TagExtraInfo tagExtraInfo,
TagAttributeInfo[] attributeInfo,
String displayName,
String smallIcon,
String largeIcon,
TagVariableInfo[] tvi,
boolean dynamicAttributes) {
this.tagName = tagName;
this.tagClassName = tagClassName;
this.bodyContent = bodycontent;
this.infoString = infoString;
this.tagLibrary = taglib;
this.tagExtraInfo = tagExtraInfo;
this.attributeInfo = attributeInfo;
this.displayName = displayName;
this.smallIcon = smallIcon;
this.largeIcon = largeIcon;
this.tagVariableInfo = tvi;
this.dynamicAttributes = dynamicAttributes;
if (tagExtraInfo != null)
tagExtraInfo.setTagInfo(this);
}
/**
* The name of the Tag.
*
* @return The (short) name of the tag.
*/
public String getTagName() {
return tagName;
}
/**
* Attribute information (in the TLD) on this tag.
* The return is an array describing the attributes of this tag, as
* indicated in the TLD.
*
* @return The array of TagAttributeInfo for this tag, or a
* zero-length array if the tag has no attributes.
*/
public TagAttributeInfo[] getAttributes() {
return attributeInfo;
}
/**
* Information on the scripting objects created by this tag at runtime.
* This is a convenience method on the associated TagExtraInfo class.
*
* @param data TagData describing this action.
* @return if a TagExtraInfo object is associated with this TagInfo, the
* result of getTagExtraInfo().getVariableInfo( data ), otherwise
* null.
*/
public VariableInfo[] getVariableInfo(TagData data) {
VariableInfo[] result = null;
TagExtraInfo tei = getTagExtraInfo();
if (tei != null) {
result = tei.getVariableInfo( data );
}
return result;
}
/**
* Translation-time validation of the attributes.
* This is a convenience method on the associated TagExtraInfo class.
*
* @param data The translation-time TagData instance.
* @return Whether the data is valid.
*/
public boolean isValid(TagData data) {
TagExtraInfo tei = getTagExtraInfo();
if (tei == null) {
return true;
}
return tei.isValid(data);
}
/**
* Translation-time validation of the attributes.
* This is a convenience method on the associated TagExtraInfo class.
*
* @param data The translation-time TagData instance.
* @return A null object, or zero length array if no errors, an
* array of ValidationMessages otherwise.
* @since JSP 2.0
*/
public ValidationMessage[] validate( TagData data ) {
TagExtraInfo tei = getTagExtraInfo();
if( tei == null ) {
return null;
}
return tei.validate( data );
}
/**
* Set the instance for extra tag information.
*
* @param tei the TagExtraInfo instance
*/
public void setTagExtraInfo(TagExtraInfo tei) {
tagExtraInfo = tei;
}
/**
* The instance (if any) for extra tag information.
*
* @return The TagExtraInfo instance, if any.
*/
public TagExtraInfo getTagExtraInfo() {
return tagExtraInfo;
}
/**
* Name of the class that provides the handler for this tag.
*
* @return The name of the tag handler class.
*/
public String getTagClassName() {
return tagClassName;
}
/**
* The bodycontent information for this tag.
* If the bodycontent is not defined for this
* tag, the default of JSP will be returned.
*
* @return the body content string.
*/
public String getBodyContent() {
return bodyContent;
}
/**
* The information string for the tag.
*
* @return the info string, or null if
* not defined
*/
public String getInfoString() {
return infoString;
}
/**
* Set the TagLibraryInfo property.
*
* Note that a TagLibraryInfo element is dependent
* not just on the TLD information but also on the
* specific taglib instance used. This means that
* a fair amount of work needs to be done to construct
* and initialize TagLib objects.
*
* If used carefully, this setter can be used to avoid having to
* create new TagInfo elements for each taglib directive.
*
* @param tl the TagLibraryInfo to assign
*/
public void setTagLibrary(TagLibraryInfo tl) {
tagLibrary = tl;
}
/**
* The instance of TabLibraryInfo we belong to.
*
* @return the tag library instance we belong to
*/
public TagLibraryInfo getTagLibrary() {
return tagLibrary;
}
// ============== JSP 2.0 TLD Information ========
/**
* Get the displayName.
*
* @return A short name to be displayed by tools,
* or null if not defined
*/
public String getDisplayName() {
return displayName;
}
/**
* Get the path to the small icon.
*
* @return Path to a small icon to be displayed by tools,
* or null if not defined
*/
public String getSmallIcon() {
return smallIcon;
}
/**
* Get the path to the large icon.
*
* @return Path to a large icon to be displayed by tools,
* or null if not defined
*/
public String getLargeIcon() {
return largeIcon;
}
/**
* Get TagVariableInfo objects associated with this TagInfo.
*
* @return Array of TagVariableInfo objects corresponding to
* variables declared by this tag, or a zero length
* array if no variables have been declared
*/
public TagVariableInfo[] getTagVariableInfos() {
return tagVariableInfo;
}
// ============== JSP 2.0 TLD Information ========
/**
* Get dynamicAttributes associated with this TagInfo.
*
* @return True if tag handler supports dynamic attributes
* @since JSP 2.0
*/
public boolean hasDynamicAttributes() {
return dynamicAttributes;
}
/*
* private fields for 1.1 info
*/
private String tagName; // the name of the tag
private String tagClassName;
private String bodyContent;
private String infoString;
private TagLibraryInfo tagLibrary;
private TagExtraInfo tagExtraInfo; // instance of TagExtraInfo
private TagAttributeInfo[] attributeInfo;
/*
* private fields for 1.2 info
*/
private String displayName;
private String smallIcon;
private String largeIcon;
private TagVariableInfo[] tagVariableInfo;
/*
* Additional private fields for 2.0 info
*/
private boolean dynamicAttributes;
}