001: package org.apache.velocity.tools.view;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import org.apache.commons.digester.Digester;
023: import org.apache.commons.digester.Rule;
024: import org.apache.commons.digester.RuleSetBase;
025: import org.xml.sax.Attributes;
026:
027: /**
028: * <p>The set of Digester rules required to parse a toolbox
029: * configuration file (<code>toolbox.xml</code>) for the
030: * XMLToolboxManager class.</p>
031: *
032: * @author Nathan Bubna
033: * @author <a href="mailto:henning@schmiedehausen.org">Henning P. Schmiedehausen</a>
034: * @since VelocityTools 1.1
035: * @version $Id: ToolboxRuleSet.java 479724 2006-11-27 18:49:37Z nbubna $
036: */
037: public class ToolboxRuleSet extends RuleSetBase {
038:
039: /**
040: * <p>Add the set of Rule instances defined in this RuleSet to the
041: * specified <code>Digester</code> instance, associating them with
042: * our namespace URI (if any). This method should only be called
043: * by a Digester instance. These rules assume that an instance of
044: * <code>org.apache.velocity.tools.view.ToolboxManager</code> is pushed
045: * onto the evaluation stack before parsing begins.</p>
046: *
047: * @param digester Digester instance to which the new Rule instances
048: * should be added.
049: */
050: public void addRuleInstances(Digester digester) {
051: addToolRules(digester);
052: addDataRules(digester);
053: }
054:
055: /**
056: * Add rules for digesting tool elements.
057: */
058: protected void addToolRules(Digester digester) {
059: digester.addObjectCreate("toolbox/tool", getToolInfoClass());
060: digester.addBeanPropertySetter("toolbox/tool/key", "key");
061: digester.addBeanPropertySetter("toolbox/tool/class",
062: "classname");
063: digester.addRule("toolbox/tool/parameter", new ParameterRule());
064: digester.addSetNext("toolbox/tool", "addTool");
065: }
066:
067: /**
068: * Add rules for digesting data elements.
069: */
070: protected void addDataRules(Digester digester) {
071: digester.addObjectCreate("toolbox/data", getDataInfoClass());
072: digester.addSetProperties("toolbox/data");
073: digester.addBeanPropertySetter("toolbox/data/key", "key");
074: digester.addBeanPropertySetter("toolbox/data/value", "value");
075: digester.addSetNext("toolbox/data", "addData");
076: }
077:
078: /**
079: * Return the bean class to be created for tool elements.
080: */
081: protected Class getToolInfoClass() {
082: return ViewToolInfo.class;
083: }
084:
085: /**
086: * Return the bean class to be created for data elements.
087: */
088: protected Class getDataInfoClass() {
089: return DataInfo.class;
090: }
091:
092: /****************************** Custom Rules *****************************/
093:
094: /**
095: *
096: */
097: protected class ParameterRule extends Rule {
098: public void begin(String ns, String ln, Attributes attributes)
099: throws Exception {
100: ViewToolInfo toolinfo = (ViewToolInfo) digester.peek();
101: String name = attributes.getValue("name");
102: String value = attributes.getValue("value");
103: toolinfo.setParameter(name, value);
104: }
105: }
106:
107: }
|