001 /* $Id: PathCallParamRule.java 992060 2010-09-02 19:09:47Z simonetripodi $
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019
020 package org.apache.commons.digester;
021
022
023 import org.xml.sax.Attributes;
024
025 /**
026 * <p>Rule implementation that saves a parameter containing the
027 * <code>Digester</code> matching path for use by a surrounding
028 * <code>CallMethodRule</code>. This Rule is most useful when making
029 * extensive use of wildcards in rule patterns.</p>
030 *
031 * @since 1.6
032 */
033
034 public class PathCallParamRule extends Rule {
035
036 // ----------------------------------------------------------- Constructors
037
038 /**
039 * Construct a "call parameter" rule that will save the body text of this
040 * element as the parameter value.
041 *
042 * @param paramIndex The zero-relative parameter number
043 */
044 public PathCallParamRule(int paramIndex) {
045
046 this.paramIndex = paramIndex;
047
048 }
049
050 // ----------------------------------------------------- Instance Variables
051
052 /**
053 * The zero-relative index of the parameter we are saving.
054 */
055 protected int paramIndex = 0;
056
057 // --------------------------------------------------------- Public Methods
058
059
060 /**
061 * Process the start of this element.
062 *
063 * @param namespace the namespace URI of the matching element, or an
064 * empty string if the parser is not namespace aware or the element has
065 * no namespace
066 * @param name the local name if the parser is namespace aware, or just
067 * the element name otherwise
068 * @param attributes The attribute list for this element
069
070 */
071 @Override
072 public void begin(String namespace, String name, Attributes attributes) throws Exception {
073
074 String param = getDigester().getMatch();
075
076 if(param != null) {
077 Object parameters[] = (Object[]) digester.peekParams();
078 parameters[paramIndex] = param;
079 }
080
081 }
082
083 /**
084 * Render a printable version of this Rule.
085 */
086 @Override
087 public String toString() {
088
089 StringBuffer sb = new StringBuffer("PathCallParamRule[");
090 sb.append("paramIndex=");
091 sb.append(paramIndex);
092 sb.append("]");
093 return (sb.toString());
094
095 }
096 }