blob: 35c9904e512e9afd7386a82fb0a61121023b0fc3 [file] [log] [blame]
/*
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//digester/src/java/org/apache/commons/digester/CallParamRule.java,v 1.7 2002/03/23 17:45:57 rdonkin Exp $
* $Revision: 1.7 $
* $Date: 2002/03/23 17:45:57 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.digester;
import java.lang.reflect.Method;
import org.xml.sax.Attributes;
/**
* Rule implementation that saves a parameter from either an attribute of
* this element, or from the element body, to be used in a call generated
* by a surrounding CallMethodRule rule.
*
* @author Craig McClanahan
* @version $Revision: 1.7 $ $Date: 2002/03/23 17:45:57 $
*/
public class CallParamRule extends Rule {
// ----------------------------------------------------------- Constructors
/**
* Construct a "call parameter" rule that will save the body text of this
* element as the parameter value.
*
* @param digester The associated Digester
* @param paramIndex The zero-relative parameter number
*
* @deprecated The digester instance is now set in the {@link Digester#addRule} method.
* Use {@link #CallParamRule(int paramIndex)} instead.
*/
public CallParamRule(Digester digester, int paramIndex) {
this(paramIndex);
}
/**
* Construct a "call parameter" rule that will save the value of the
* specified attribute as the parameter value.
*
* @param digester The associated Digester
* @param paramIndex The zero-relative parameter number
* @param attributeName The name of the attribute to save
*
* @deprecated The digester instance is now set in the {@link Digester#addRule} method.
* Use {@link #CallParamRule(int paramIndex, String attributeName)} instead.
*/
public CallParamRule(Digester digester, int paramIndex,
String attributeName) {
this(paramIndex, attributeName);
}
/**
* Construct a "call parameter" rule that will save the body text of this
* element as the parameter value.
*
* @param paramIndex The zero-relative parameter number
*/
public CallParamRule(int paramIndex) {
this(paramIndex, null);
}
/**
* Construct a "call parameter" rule that will save the value of the
* specified attribute as the parameter value.
*
* @param paramIndex The zero-relative parameter number
* @param attributeName The name of the attribute to save
*/
public CallParamRule(int paramIndex,
String attributeName) {
this.paramIndex = paramIndex;
this.attributeName = attributeName;
}
// ----------------------------------------------------- Instance Variables
/**
* The attribute from which to save the parameter value
*/
protected String attributeName = null;
/**
* The body text collected from this element.
*/
protected String bodyText = null;
/**
* The zero-relative index of the parameter we are saving.
*/
protected int paramIndex = 0;
// --------------------------------------------------------- Public Methods
/**
* Process the start of this element.
*
* @param attributes The attribute list for this element
*/
public void begin(Attributes attributes) throws Exception {
if (attributeName != null) {
bodyText = attributes.getValue(attributeName);
}
}
/**
* Process the body text of this element.
*
* @param bodyText The body text of this element
*/
public void body(String bodyText) throws Exception {
if (attributeName == null) {
this.bodyText = bodyText.trim();
}
}
/**
* Process the end of this element.
*/
public void end() throws Exception {
String parameters[] = (String[]) digester.peekParams();
parameters[paramIndex] = bodyText;
}
/**
* Clean up after parsing is complete.
*/
public void finish() throws Exception {
bodyText = null;
}
/**
* Render a printable version of this Rule.
*/
public String toString() {
StringBuffer sb = new StringBuffer("CallParamRule[");
sb.append("paramIndex=");
sb.append(paramIndex);
sb.append(", attributeName=");
sb.append(attributeName);
sb.append("]");
return (sb.toString());
}
}