2009/05/20 - Apache Shale has been retired.
For more information, please explore the Attic.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shale.tiger.managed.rules;
19
20 import org.apache.commons.digester.Rule;
21 import org.apache.shale.tiger.managed.config.MapEntriesConfig;
22 import org.apache.shale.tiger.managed.config.MapEntryConfig;
23 import org.xml.sax.Attributes;
24
25 /***
26 * <p>Digester rule for processing a <code><map-entry></code>
27 * element.</p>
28 */
29 public class MapEntryRule extends Rule {
30
31 /*** Creates a new instance of MapEntryRule. */
32 public MapEntryRule() {
33 }
34
35 /*** <p>Fully qualified class name of our configuration element bean.</p> */
36 private static final String CLASS_NAME =
37 "org.apache.shale.tiger.managed.config.MapEntryConfig";
38
39 /***
40 * <p>Create a new {@link MapEntryConfig} and push it on to the
41 * Digester stack.</p>
42 *
43 * @param namespace Namespace URI of the matching element
44 * @param name Local name of the matching element
45 * @param attributes Attribute list of the matching element
46 *
47 * @exception Exception if a parsing error occurs
48 */
49 public void begin(String namespace, String name,
50 Attributes attributes) throws Exception {
51
52 Class clazz = digester.getClassLoader().loadClass(CLASS_NAME);
53 digester.push(clazz.newInstance());
54
55 }
56
57
58 /***
59 * <p>No body processing for this element.</p>
60 *
61 * @param namespace Namespace URI of the matching element
62 * @param name Local name of the matching element
63 *
64 * @throws Exception if a parsing error occurs
65 */
66 public void body(String namespace, String name) throws Exception {
67 }
68
69
70 /***
71 * <p>Pop the {@link MapEntriesConfig} instance from the stack,
72 * and either add it or merge it with parent information.</p>
73 *
74 * @param namespace Namespace URI of the matching element
75 * @param name Local name of the matching element
76 *
77 * @exception IllegalStateException if the popped object is not
78 * of the correct type
79 * @exception Exception if a different error occurs
80 */
81 public void end(String namespace, String name) throws Exception {
82
83 MapEntryConfig config = (MapEntryConfig) digester.pop();
84 MapEntriesConfig parent = (MapEntriesConfig) digester.peek();
85 MapEntryConfig previous = parent.getEntry(config.getKey());
86 if (previous == null) {
87 parent.addEntry(config);
88 } else {
89 merge(config, previous);
90 }
91
92 }
93
94
95 /***
96 * <p>Merge properties from <code>config</code> into
97 * <code>previous</code>.</p>
98 *
99 * @param config Newly constructed bean
100 * @param previous Previous bean to merge into
101 */
102 static void merge(MapEntryConfig config, MapEntryConfig previous) {
103
104 previous.setValue(config.getValue());
105
106 }
107
108
109 }