KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > chain > config > ConfigDefineRule


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.chain.config;
17
18
19 import org.apache.commons.digester.Rule;
20 import org.xml.sax.Attributes JavaDoc;
21
22
23 /**
24  * <p>Digester rule that will dynamically register a new set of rules
25  * for a specified element name and default implementation class. This
26  * allows "alias" elements to be created for {@link Chain} and {@link Command}
27  * implementation classes that are commonly used. Besides factoring out
28  * the class names to make changes easier, this also makes configuration
29  * files <strong>much</strong> easier to read and write.</p>
30  *
31  * @version $Revision: 1.2 $ $Date: 2004/11/30 05:52:23 $
32  */

33
34 class ConfigDefineRule extends Rule {
35
36
37     // ----------------------------------------------------------- Constructors
38

39
40     /**
41      * <p>Construct a new instance of this rule that will in turn
42      * dynamically register appropriate rules for a new alias element.</p>
43      *
44      * @param nameAttribute Name of the attribute containing the name
45      * of the new element for which rules should generated
46      * @param classAttribute Name of the attribute containing the
47      * implementation class for the new chain or command
48      */

49     public ConfigDefineRule(String JavaDoc nameAttribute, String JavaDoc classAttribute) {
50         super();
51         this.nameAttribute = nameAttribute;
52         this.classAttribute = classAttribute;
53     }
54
55
56     // ----------------------------------------------------- Instance Variables
57

58
59     /**
60      * <p>The name of the attribute under which we can retrieve the
61      * fully qualified class name of the implementation class for this
62      * new element.</p>
63      */

64     private String JavaDoc classAttribute = null;
65
66
67     /**
68      * <p>The name of the attribute under which we can retrieve the name
69      * this element for which rules should be created.</p>
70      */

71     private String JavaDoc nameAttribute = null;
72
73
74     // --------------------------------------------------------- Public Methods
75

76
77     /**
78      * <p>Register new rules for the specified name and class.</p>
79      *
80      * @param namespace the namespace URI of the matching element, or an
81      * empty string if the parser is not namespace aware or the element has
82      * no namespace
83      * @param name the local name if the parser is namespace aware, or just
84      * the element name otherwise
85      * @param attributes The attribute list of this element
86      */

87     public void begin(String JavaDoc namespace, String JavaDoc name, Attributes JavaDoc attributes)
88         throws Exception JavaDoc {
89
90         // Extract the actual name and implementation class to use
91
String JavaDoc nameValue = attributes.getValue(nameAttribute);
92         String JavaDoc classValue = attributes.getValue(classAttribute);
93
94         // Add rules for this new element
95
digester.addObjectCreate("*/" + nameValue, classValue);
96         digester.addSetProperties("*/" + nameValue);
97         digester.addRule("*/" + nameValue,
98                          new ConfigRegisterRule(nameAttribute));
99
100     }
101
102
103 }
104
Popular Tags