01: /* $Id: PathCallParamRule.java 471661 2006-11-06 08:09:25Z skitching $
02: *
03: * Licensed to the Apache Software Foundation (ASF) under one or more
04: * contributor license agreements. See the NOTICE file distributed with
05: * this work for additional information regarding copyright ownership.
06: * The ASF licenses this file to You under the Apache License, Version 2.0
07: * (the "License"); you may not use this file except in compliance with
08: * the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: */
18:
19: package org.apache.commons.digester;
20:
21: import org.xml.sax.Attributes;
22:
23: /**
24: * <p>Rule implementation that saves a parameter containing the
25: * <code>Digester</code> matching path for use by a surrounding
26: * <code>CallMethodRule</code>. This Rule is most useful when making
27: * extensive use of wildcards in rule patterns.</p>
28: *
29: * @since 1.6
30: */
31:
32: public class PathCallParamRule extends Rule {
33:
34: // ----------------------------------------------------------- Constructors
35:
36: /**
37: * Construct a "call parameter" rule that will save the body text of this
38: * element as the parameter value.
39: *
40: * @param paramIndex The zero-relative parameter number
41: */
42: public PathCallParamRule(int paramIndex) {
43:
44: this .paramIndex = paramIndex;
45:
46: }
47:
48: // ----------------------------------------------------- Instance Variables
49:
50: /**
51: * The zero-relative index of the parameter we are saving.
52: */
53: protected int paramIndex = 0;
54:
55: // --------------------------------------------------------- Public Methods
56:
57: /**
58: * Process the start of this element.
59: *
60: * @param namespace the namespace URI of the matching element, or an
61: * empty string if the parser is not namespace aware or the element has
62: * no namespace
63: * @param name the local name if the parser is namespace aware, or just
64: * the element name otherwise
65: * @param attributes The attribute list for this element
66:
67: */
68: public void begin(String namespace, String name,
69: Attributes attributes) throws Exception {
70:
71: String param = getDigester().getMatch();
72:
73: if (param != null) {
74: Object parameters[] = (Object[]) digester.peekParams();
75: parameters[paramIndex] = param;
76: }
77:
78: }
79:
80: /**
81: * Render a printable version of this Rule.
82: */
83: public String toString() {
84:
85: StringBuffer sb = new StringBuffer("PathCallParamRule[");
86: sb.append("paramIndex=");
87: sb.append(paramIndex);
88: sb.append("]");
89: return (sb.toString());
90:
91: }
92: }
|