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