001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.tags.html;
020:
021: import org.apache.beehive.netui.tags.ByRef;
022: import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
023: import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
024: import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
025:
026: import javax.servlet.http.HttpServletRequest;
027: import javax.servlet.jsp.JspException;
028:
029: /**
030: * @jsptagref.tagdescription
031: * Generates a URL-encoded area to a specified URI.
032: * @example In this sample, an area tag is written with the shape, coords, href, and alt attributes,
033: * for an image map associated with the "someDefaultPic.jpg" image.
034: * <p>The following <netui> tags...</p>
035: * <pre> <netui:image src="someDefaultPic.jpg" alt="a default picture" usemap="#defaultMap"/>
036: * <map id="defaultMap" name="defaultMap">
037: * <netui:area shape="rect" coords="0,0,80,80" href="bigPicture.jsp" alt="big picture of the image"/>
038: * </map></pre>
039: *
040: * <p>...output the following HTML:</p>
041: * <pre> <img src="someDefaultPic.jpg" usemap="#defaultMap" alt="a default picture">
042: * <map id="defaultMap" name="defaultMap">
043: * <area href="bigPicture.jsp" shape="rect" alt="big picture of the image" coords="0,0,80,80">
044: * </map></pre>
045: * @netui:tag name="area" description="Generates a URL-encoded area to a specified URI."
046: * @see Attribute
047: * @see java.lang.String
048: */
049: public class Area extends AnchorBase {
050: protected static final String REQUIRED_ATTR = "tagId, href, action";
051:
052: /**
053: * Returns the name of the Tag.
054: */
055: public String getTagName() {
056: return "Area";
057: }
058:
059: /**
060: * This method will return the state associated with the tag. This is used by this
061: * base class to access the individual state objects created by the tags.
062: * @return a subclass of the <code>AbstractHtmlState</code> class.
063: */
064: public AbstractHtmlState getState() {
065: return _state;
066: }
067:
068: /**
069: * Sets the property to specify the alt text of the image.
070: * @param alt the image alignment.
071: * @jsptagref.attributedescription Specifies alternate text for the area.
072: * @jsptagref.databindable false
073: * @jsptagref.attributesyntaxvalue <i>string_alt</i>
074: * @netui:attribute required="false" rtexprvalue="true"
075: * description="Specifies alternate text for the area."
076: */
077: public void setAlt(String alt) {
078: _state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT,
079: alt, true);
080: }
081:
082: /**
083: * Prepare the hyperlink for rendering
084: * @throws javax.servlet.jsp.JspException if a JSP exception has occurred
085: */
086: public int doStartTag() throws JspException {
087: if (hasErrors())
088: return SKIP_BODY;
089: return EVAL_BODY_BUFFERED;
090: }
091:
092: /**
093: * Render the hyperlink.
094: * @throws JspException if a JSP exception has occurred
095: */
096: public int doEndTag() throws JspException {
097: // report errors that may have occurred when the required attributes are being set
098: if (hasErrors())
099: return reportAndExit(EVAL_PAGE);
100:
101: // build the anchor into the results
102: ByRef script = new ByRef();
103:
104: WriteRenderAppender writer = new WriteRenderAppender(
105: pageContext);
106: HttpServletRequest request = (HttpServletRequest) pageContext
107: .getRequest();
108: TagRenderingBase trb = TagRenderingBase.Factory.getRendering(
109: TagRenderingBase.AREA_TAG, request);
110:
111: if (!createAnchorBeginTag(request, script, trb, writer,
112: REQUIRED_ATTR)) {
113: if (!script.isNull())
114: write(script.getRef().toString());
115: return reportAndExit(EVAL_PAGE);
116: }
117:
118: assert (trb != null) : "trb is null";
119: trb.doEndTag(writer);
120:
121: if (!script.isNull())
122: write(script.getRef().toString());
123:
124: // Render the remainder to the output stream
125: localRelease();
126: return EVAL_PAGE;
127: }
128: }
|