/** * Licensed under the Artistic License; you may not use this file * except in compliance with the License. * You may obtain a copy of the License at * * http://displaytag.sourceforge.net/license.html * * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.displaytag.tags; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import org.displaytag.exception.MissingAttributeException; import org.displaytag.exception.TagStructureException; /** * @author epesh * @author Fabrizio Giustina * @version $Revision: 720 $ ($Author: fgiust $) */ public class SetPropertyTag extends BodyTagSupport { /** * D1597A17A6. */ private static final long serialVersionUID = 899149338534L; /** * property name. */ private String name; /** * property value. */ private String value; /** * is this the first iteration? */ private boolean firstIteration; /** * Sets the name of the property. * @param propertyName String */ public void setName(String propertyName) { this.name = propertyName; } /** * Sets the value of the property. * @param propertyValue String */ public void setValue(String propertyValue) { this.value = propertyValue; } /** * @see javax.servlet.jsp.tagext.Tag#doStartTag() */ public int doStartTag() throws JspException { TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class); if (tableTag == null) { throw new TagStructureException(getClass(), "setProperty", "table"); //$NON-NLS-1$ //$NON-NLS-2$ } // read body only once if (tableTag.isFirstIteration()) { this.firstIteration = true; // using int to avoid deprecation error in compilation using j2ee 1.3 (EVAL_BODY_TAG) return 2; } this.firstIteration = false; return SKIP_BODY; } /** * Passes attribute information up to the parent TableTag. * <p> * When we hit the end of the tag, we simply let our parent (which better be a TableTag) know what the user wants to * change a property value, and we pass the name/value pair that the user gave us, up to the parent * </p> * @return <code>TagSupport.EVAL_PAGE</code> * @throws MissingAttributeException if no value or body content has been set * @see javax.servlet.jsp.tagext.Tag#doEndTag() */ public int doEndTag() throws MissingAttributeException { if (this.firstIteration) { TableTag tableTag = (TableTag) findAncestorWithClass(this, TableTag.class); // tableTag can't be null, it has been checked in doStartTag if (this.value == null) { if (getBodyContent() == null) { throw new MissingAttributeException(getClass(), // new String[]{"value", "body content"}); //$NON-NLS-1$ //$NON-NLS-2$ } this.value = getBodyContent().getString(); } tableTag.setProperty(this.name, this.value); this.name = null; this.value = null; } return EVAL_PAGE; } }