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.MapEntriesHolder;
23 import org.xml.sax.Attributes;
24
25 /***
26 * <p>Digester rule for processing a <code><map-entries></code>
27 * element.</p>
28 */
29 public class MapEntriesRule extends Rule {
30
31 /*** Creates a new instance of MapEntriesRule. */
32 public MapEntriesRule() {
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.MapEntriesConfig";
38
39 /***
40 * <p>Create a new {@link MapEntriesConfig} 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 MapEntriesConfig config = (MapEntriesConfig) digester.pop();
84 MapEntriesHolder parent = (MapEntriesHolder) digester.peek();
85 MapEntriesConfig previous = (MapEntriesConfig) parent.getMapEntries();
86 if (previous == null) {
87 parent.setMapEntries(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(MapEntriesConfig config, MapEntriesConfig previous) {
103
104 if (config.getKeyType() != null) {
105 previous.setKeyType(config.getKeyType());
106 }
107 if (config.getValueType() != null) {
108 previous.setValueType(config.getValueType());
109 }
110 previous.getEntries().addAll(config.getEntries());
111
112 }
113
114
115 }