/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. * * $Header:$ */ package org.apache.beehive.netui.tags.html; import org.apache.beehive.netui.tags.internal.PageFlowTagUtils; import org.apache.beehive.netui.tags.rendering.AbstractHtmlState; import org.apache.beehive.netui.tags.rendering.ImageTag; import org.apache.beehive.netui.tags.rendering.TagRenderingBase; import org.apache.beehive.netui.tags.rendering.WriteRenderAppender; import org.apache.beehive.netui.util.Bundle; import org.apache.beehive.netui.util.ParamHelper; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; /** * Generates an image with the specified attributes. Image ignores its * body content. * @jsptagref.tagdescription Renders an HTML <img> tag with specified attributes. * @example In this sample, an Image shows "friends.jpg" at 150 x 175 pixels, with the id "Friends". *
<netui:image src="friends.jpg" tagId="Friends" height="150" width="175" />* @netui:tag name="image" description="Places an image file type on your page." */ public class Image extends HtmlBaseTag implements IUrlParams { private ImageTag.State _state = new ImageTag.State(); private String _location = null; // The location hash to append to the url. private Map _params; /** * Return the name of the Tag. */ public String getTagName() { return "Image"; } /** * This method will return the state associated with the tag. This is used by this * base class to access the individual state objects created by the tags. * @return a subclass of the
AbstractHtmlState
class.
*/
protected AbstractHtmlState getState()
{
return _state;
}
/**
* Base support for the attribute tag. This is overridden to prevent setting the src
* attribute.
* @param name The name of the attribute. This value may not be null or the empty string.
* @param value The value of the attribute. This may contain an expression.
* @param facet The name of a facet to which the attribute will be applied. This is optional.
* @throws JspException A JspException may be thrown if there is an error setting the attribute.
*/
public void setAttribute(String name, String value, String facet)
throws JspException
{
if (name != null && name.equals(SRC)) {
String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object[]{name});
registerTagError(s, null);
}
super.setAttribute(name, value, facet);
}
/**
* Sets the property to specify where to align the image.
* @param align the image alignment.
* @jsptagref.attributedescription The alignment of the image.
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue string_align
* @netui:attribute required="false" rtexprvalue="true"
* description="The alignment of the image."
*/
public void setAlign(String align)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALIGN, align);
}
/**
* Sets the property to specify the alt text of the image.
* @param alt the image alignment.
* @jsptagref.attributedescription The alternative text of the image
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue string_alt
* @netui:attribute required="false" rtexprvalue="true"
* description="The alternative text of the image."
*/
public void setAlt(String alt)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ALT, alt, true);
}
/**
* Sets the property to specify a link to the the long description to supplement
* the short description in the alt
attribute.
* @param longdesc the longdesc.
* @jsptagref.attributedescription Specifies a link to the the long description.
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue string_longdesc
* @netui:attribute required="false" rtexprvalue="true"
* description="Specifies a link to the the long description."
*/
public void setLongdesc(String longdesc)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, LONGDESC, longdesc);
}
/**
* Sets the border size around the image.
* @param border the border size.
* @jsptagref.attributedescription The border size around the image
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue integer_pixelBorder
* @netui:attribute required="false" rtexprvalue="true"
* description="The border size around the image."
*/
public void setBorder(String border)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, BORDER, border);
}
/**
* Sets the image height.
* @param height the height.
* @jsptagref.attributedescription The image height
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue integer_height
* @netui:attribute required="false" rtexprvalue="true"
* description="The image height."
*/
public void setHeight(String height)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HEIGHT, height);
}
/**
* Sets the the horizontal spacing around the image.
* @param hspace the horizontal spacing.
* @jsptagref.attributedescription The horizontal spacing around the image.
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue integer_hspace
* @netui:attribute required="false" rtexprvalue="true"
* description="The horizontal spacing around the image."
*/
public void setHspace(String hspace)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HSPACE, hspace);
}
/**
* Sets the server-side image map declaration.
* @param ismap the image map declaration.
* @jsptagref.attributedescription The server-side map declaration.
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue string_isMap
* @netui:attribute required="false" rtexprvalue="true"
* description="The server-side map declaration."
*/
public void setIsmap(String ismap)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, ISMAP, ismap);
}
/**
* Sets the location hash to append to the url.
* @param location the location hash.
* @jsptagref.attributedescription The location hash to append to the URL.
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue string_location
* @netui:attribute required="false" rtexprvalue="true"
* description="The location hash to append to the URL."
*/
public void setLocation(String location)
{
_location = location;
}
/**
* Sets the image source URI.
* @param src the source URI.
* @jsptagref.attributedescription The image source URI
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue string_src
* @netui:attribute required="false" rtexprvalue="true"
* description="The image source URI"
*/
public void setSrc(String src)
throws JspException
{
_state.src = src;
}
/**
* Sets the client-side image map declaration.
* @param usemap the map declaration.
* @jsptagref.attributedescription The client-side image map declaration
* @jsptagref.databindable false
* @jsptagref.attributesyntaxvalue string_useMap
* @netui:attribute required="false" rtexprvalue="true"
* description="The client-side image map declaration"
*/
public void setUsemap(String usemap)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, USEMAP, usemap);
}
/**
* Sets the vertical spacing around the image.
* @param vspace the vertical spacing.
* @jsptagref.attributedescription The vertical spacing around the image.
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue string_vspace
* @netui:attribute required="false" rtexprvalue="true"
* description="The vertical spacing around the image."
*/
public void setVspace(String vspace)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, VSPACE, vspace);
}
/**
* Sets the image width.
* @param width the image width.
* @jsptagref.attributedescription The image width.
* @jsptagref.databindable Read Only
* @jsptagref.attributesyntaxvalue integer_pixelWidth
* @netui:attribute required="false" rtexprvalue="true"
* description="The image width."
*/
public void setWidth(String width)
{
_state.registerAttribute(AbstractHtmlState.ATTR_GENERAL, WIDTH, width);
}
/**
* Adds a URL parameter to the generated hyperlink.
* @param name the name of the parameter to be added.
* @param value the value of the parameter to be added (a String or String[]).
* @param facet
*/
public void addParameter(String name, Object value, String facet) throws JspException
{
assert(name != null) : "Parameter 'name' must not be null";
if (_params == null) {
_params = new HashMap();
}
ParamHelper.addParam(_params, name, value);
}
/**
* Render the beginning of the IMG tag.
* @throws JspException if a JSP exception has occurred
*/
public int doStartTag() throws JspException
{
// Evaluate the body of this tag
return EVAL_BODY_BUFFERED;
}
/**
* Render the end of the IMG tag.
* @throws JspException if a JSP exception has occurred
*/
public int doEndTag() throws JspException
{
ServletRequest req = pageContext.getRequest();
String scriptId = null;
// report errors that may have occurred
if (hasErrors())
return reportAndExit(EVAL_PAGE);
// Generate the name definition or image element
String uri = null;
if (_state.src != null) {
try {
uri = PageFlowTagUtils.rewriteResourceURL(pageContext, _state.src, _params, _location);
}
catch (URISyntaxException e) {
// report the error...
String s = Bundle.getString("Tags_Image_URLException",
new Object[]{_state.src, e.getMessage()});
registerTagError(s, e);
}
}
if (uri != null) {
_state.src = ((HttpServletResponse) pageContext.getResponse()).encodeURL(uri);
}
// we assume that tagId will over have override id if both
// are defined.
if (_state.id != null) {
scriptId = renderNameAndId((HttpServletRequest) req, _state, null);
}
WriteRenderAppender writer = new WriteRenderAppender(pageContext);
TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, req);
br.doStartTag(writer, _state);
br.doEndTag(writer);
if (scriptId != null)
write(scriptId);
// Evaluate the remainder of this page
localRelease();
return EVAL_PAGE;
}
/**
* Release any acquired resources.
*/
protected void localRelease()
{
super.localRelease();
_state.clear();
_location = null;
_params = null;
}
}