1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.tiles.compat.definition.digester;
23
24 import org.apache.commons.digester.Digester;
25 import org.apache.commons.digester.Rule;
26 import org.apache.tiles.Attribute;
27 import org.apache.tiles.beans.SimpleMenuItem;
28 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
29 import org.xml.sax.Attributes;
30
31
32
33
34
35
36
37 public class CompatibilityDigesterDefinitionsReader extends
38 DigesterDefinitionsReader {
39
40
41
42
43 private static final String ADD_WILDCARD = "*/item";
44
45
46
47
48 private static final String BEAN_TAG = "*/bean";
49
50
51
52
53
54
55
56
57 protected String[] registrations;
58
59
60 @Override
61 protected void initSyntax(Digester digester) {
62 super.initSyntax(digester);
63 initDigesterForComponentsDefinitionsSyntax(digester);
64 initDigesterForInstancesSyntax(digester);
65 initDigesterForTilesDefinitionsSyntax(digester);
66 initDigesterForBeans(digester);
67 }
68
69
70
71
72
73
74
75 private void initDigesterForComponentsDefinitionsSyntax(Digester digester) {
76
77 String definitionTag = "component-definitions/definition";
78
79 String putTag = definitionTag + "/put";
80
81 String listTag = definitionTag + "/putList";
82
83 String addListElementTag = listTag + "/add";
84
85
86 digester.addObjectCreate(definitionTag, DEFINITION_HANDLER_CLASS);
87 digester.addRule(definitionTag, new FillDefinitionRule());
88 digester.addSetNext(definitionTag, "addDefinition",
89 DEFINITION_HANDLER_CLASS);
90
91 digester.addObjectCreate(putTag, PUT_ATTRIBUTE_HANDLER_CLASS);
92 digester.addRule(putTag, new FillAttributeRule());
93 digester.addRule(putTag, new PutAttributeRule());
94
95 digester.addObjectCreate(listTag, LIST_HANDLER_CLASS);
96 digester.addSetProperties(listTag);
97 digester.addRule(listTag, new PutAttributeRule());
98
99
100
101 digester.addObjectCreate(addListElementTag, PUT_ATTRIBUTE_HANDLER_CLASS);
102 digester.addRule(addListElementTag, new FillAttributeRule());
103 digester.addSetNext(addListElementTag, "add",
104 PUT_ATTRIBUTE_HANDLER_CLASS);
105 }
106
107
108
109
110
111
112
113 private void initDigesterForTilesDefinitionsSyntax(Digester digester) {
114
115 String definitionTag = "tiles-definitions/definition";
116
117 String putTag = definitionTag + "/put";
118
119
120
121 String listTag = "putList";
122 String definitionListTag = definitionTag + "/" + listTag;
123
124 String addListElementTag = "*/" + listTag + "/add";
125
126
127
128
129
130
131
132 digester.addObjectCreate(putTag, PUT_ATTRIBUTE_HANDLER_CLASS);
133 digester.addRule(putTag, new FillAttributeRule());
134 digester.addRule(putTag, new PutAttributeRule());
135
136
137 digester.addObjectCreate(definitionListTag, LIST_HANDLER_CLASS);
138 digester.addSetProperties(definitionListTag);
139 digester.addRule(definitionListTag, new PutAttributeRule());
140
141
142
143 digester.addObjectCreate(addListElementTag, PUT_ATTRIBUTE_HANDLER_CLASS);
144 digester.addRule(addListElementTag, new FillAttributeRule());
145 digester.addSetNext(addListElementTag, "add",
146 PUT_ATTRIBUTE_HANDLER_CLASS);
147
148
149
150 String nestedList = "*/" + listTag + "/" + listTag;
151 digester.addObjectCreate(nestedList, LIST_HANDLER_CLASS);
152 digester.addSetProperties(nestedList);
153 digester.addSetNext(nestedList, "add", PUT_ATTRIBUTE_HANDLER_CLASS);
154 }
155
156
157
158
159
160
161
162
163 private void initDigesterForInstancesSyntax(Digester digester) {
164
165 String instanceTag = "component-instances/instance";
166
167 String putTag = instanceTag + "/put";
168 String putAttributeTag = instanceTag + "/putAttribute";
169
170 String listTag = instanceTag + "/putList";
171
172 String addListElementTag = listTag + "/add";
173
174
175 digester.addObjectCreate(instanceTag, DEFINITION_HANDLER_CLASS);
176 digester.addRule(instanceTag, new FillDefinitionRule());
177 digester
178 .addSetNext(instanceTag, "addDefinition", DEFINITION_HANDLER_CLASS);
179
180 digester.addObjectCreate(putAttributeTag, PUT_ATTRIBUTE_HANDLER_CLASS);
181 digester.addRule(putTag, new FillAttributeRule());
182 digester.addRule(putTag, new PutAttributeRule());
183
184 digester.addObjectCreate(putTag, PUT_ATTRIBUTE_HANDLER_CLASS);
185 digester.addSetProperties(putTag);
186 digester.addRule(putTag, new PutAttributeRule());
187
188 digester.addObjectCreate(listTag, PUT_ATTRIBUTE_HANDLER_CLASS);
189 digester.addSetProperties(listTag);
190 digester.addRule(listTag, new PutAttributeRule());
191
192
193
194 digester.addObjectCreate(addListElementTag, PUT_ATTRIBUTE_HANDLER_CLASS);
195 digester.addRule(addListElementTag, new FillAttributeRule());
196 digester.addSetNext(addListElementTag, "add", PUT_ATTRIBUTE_HANDLER_CLASS);
197 }
198
199
200
201
202
203
204 private void initDigesterForBeans(Digester digester) {
205
206
207
208
209
210
211 String menuItemDefaultClass = SimpleMenuItem.class.getName();
212 digester.addObjectCreate(ADD_WILDCARD, menuItemDefaultClass, "classtype");
213 digester.addSetProperties(ADD_WILDCARD);
214 digester.addRule(ADD_WILDCARD, new SetValueToAttributeRule());
215 digester.addSetNext(ADD_WILDCARD, "add", PUT_ATTRIBUTE_HANDLER_CLASS);
216
217
218 String beanDefaultClass = SimpleMenuItem.class.getName();
219 digester.addObjectCreate(BEAN_TAG, beanDefaultClass, "classtype");
220 digester.addSetProperties(BEAN_TAG);
221 digester.addRule(BEAN_TAG, new SetValueToAttributeRule());
222 digester.addSetNext(BEAN_TAG, "add", PUT_ATTRIBUTE_HANDLER_CLASS);
223
224
225 digester.addSetProperty(BEAN_TAG + "/set-property", "property", "value");
226 }
227
228
229 @Override
230 protected String[] getRegistrations() {
231 if (registrations == null) {
232 registrations = new String[] {
233 "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN",
234 "/org/apache/tiles/resources/tiles-config_3_0.dtd",
235 "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN",
236 "/org/apache/tiles/compat/resources/tiles-config_2_0.dtd",
237 "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN",
238 "/org/apache/tiles/compat/resources/tiles-config_2_1.dtd",
239 "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN",
240 "/org/apache/tiles/compat/resources/tiles-config_1_1.dtd",
241 "-//Apache Software Foundation//DTD Tiles Configuration 1.3//EN",
242 "/org/apache/tiles/compat/resources/tiles-config_1_3.dtd",
243 "-//Apache Software Foundation//DTD Tiles Configuration 1.4//EN",
244 "/org/apache/tiles/compat/resources/tiles-config_1_4.dtd"};
245 }
246 return registrations;
247 }
248
249
250
251
252
253
254 public static class SetValueToAttributeRule extends Rule {
255
256
257 @Override
258 public void begin(String namespace, String name, Attributes attributes) {
259 Object obj = digester.pop();
260 Attribute attribute = new Attribute(obj);
261 digester.push(attribute);
262 }
263 }
264 }