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.struts2.views.xslt;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.Map;
27
28 import org.w3c.dom.Node;
29
30 /***
31 * MapAdapter adapters a java.util.Map type to an XML DOM with the following
32 * structure:
33 * <pre>
34 * <myMap>
35 * <entry>
36 * <key>...</key>
37 * <value>...</value>
38 * </entry>
39 * ...
40 * </myMap>
41 * </pre>
42 */
43 public class MapAdapter extends AbstractAdapterElement {
44
45 public MapAdapter() { }
46
47 public MapAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Map value) {
48 setContext( adapterFactory, parent, propertyName, value );
49 }
50
51 public Map map() {
52 return (Map)getPropertyValue();
53 }
54
55 protected List<Node> buildChildAdapters() {
56 List<Node> children = new ArrayList<Node>(map().entrySet().size());
57
58 for (Object o : map().entrySet()) {
59 Map.Entry entry = (Map.Entry) o;
60 Object key = entry.getKey();
61 Object value = entry.getValue();
62 EntryElement child = new EntryElement(
63 getAdapterFactory(), this, "entry", key, value);
64 children.add(child);
65 }
66
67 return children;
68 }
69
70 static class EntryElement extends AbstractAdapterElement {
71 Object key, value;
72
73 public EntryElement( AdapterFactory adapterFactory,
74 AdapterNode parent, String propertyName, Object key, Object value ) {
75 setContext( adapterFactory, parent, propertyName, null
76 this.key = key;
77 this.value = value;
78 }
79
80 protected List<Node> buildChildAdapters() {
81 List<Node> children = new ArrayList<Node>();
82 children.add( getAdapterFactory().adaptNode( this, "key", key ) );
83 children.add( getAdapterFactory().adaptNode( this, "value", value ) );
84 return children;
85 }
86 }
87 }