1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jxpath.ri.model.jdom;
18
19 import java.util.List;
20
21 import org.apache.commons.jxpath.AbstractFactory;
22 import org.apache.commons.jxpath.JXPathContext;
23 import org.apache.commons.jxpath.Pointer;
24 import org.jdom.Element;
25
26
27
28
29
30
31
32 public class TestJDOMFactory extends AbstractFactory {
33
34
35
36
37
38 public boolean createObject(
39 JXPathContext context,
40 Pointer pointer,
41 Object parent,
42 String name,
43 int index)
44 {
45 if (name.equals("location")
46 || name.equals("address")
47 || name.equals("street")) {
48 addJDOMElement((Element) parent, index, name, null);
49 return true;
50 }
51 if (name.startsWith("price:")) {
52 String namespaceURI = context.getNamespaceURI("price");
53 addJDOMElement((Element) parent, index, name, namespaceURI);
54 return true;
55 }
56
57 return false;
58 }
59
60 private void addJDOMElement(Element parent, int index, String tag, String namespaceURI) {
61 List children = parent.getContent();
62 int count = 0;
63 for (int i = 0; i < children.size(); i++) {
64 Object child = children.get(i);
65 if (child instanceof Element
66 && ((Element) child).getQualifiedName().equals(tag)) {
67 count++;
68 }
69 }
70
71
72 while (count <= index) {
73
74
75 Element newElement;
76 if (namespaceURI != null) {
77 String prefix = tag.substring(0, tag.indexOf(':'));
78 tag = tag.substring(tag.indexOf(':') + 1);
79 newElement = new Element(tag, prefix, namespaceURI);
80 }
81 else {
82 newElement = new Element(tag);
83 }
84 parent.addContent(newElement);
85 count++;
86 }
87 }
88
89 public boolean declareVariable(JXPathContext context, String name) {
90 return false;
91 }
92 }