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.dynamic;
19
20 import java.util.Locale;
21
22 import org.apache.commons.jxpath.DynamicPropertyHandler;
23 import org.apache.commons.jxpath.JXPathBeanInfo;
24 import org.apache.commons.jxpath.JXPathIntrospector;
25 import org.apache.commons.jxpath.ri.QName;
26 import org.apache.commons.jxpath.ri.model.NodePointer;
27 import org.apache.commons.jxpath.ri.model.NodePointerFactory;
28 import org.apache.commons.jxpath.ri.model.beans.NullPointer;
29 import org.apache.commons.jxpath.util.ValueUtils;
30
31
32
33
34 public class DynamicPointerFactory implements NodePointerFactory {
35
36
37
38
39 public static final int DYNAMIC_POINTER_FACTORY_ORDER = 800;
40
41
42
43
44 public DynamicPointerFactory() {
45
46 }
47
48 @Override
49 public NodePointer createNodePointer(final NodePointer parent, final QName qName, final Object bean) {
50 if (bean == null) {
51 return new NullPointer(parent, qName);
52 }
53 final JXPathBeanInfo bi = JXPathIntrospector.getBeanInfo(bean.getClass());
54 if (bi.isDynamic()) {
55 final DynamicPropertyHandler handler = ValueUtils.getDynamicPropertyHandler(bi.getDynamicPropertyHandlerClass());
56 return new DynamicPointer(parent, qName, bean, handler);
57 }
58 return null;
59 }
60
61 @Override
62 public NodePointer createNodePointer(final QName qName, final Object bean, final Locale locale) {
63 final JXPathBeanInfo bi = JXPathIntrospector.getBeanInfo(bean.getClass());
64 if (bi.isDynamic()) {
65 final DynamicPropertyHandler handler = ValueUtils.getDynamicPropertyHandler(bi.getDynamicPropertyHandlerClass());
66 return new DynamicPointer(qName, bean, handler, locale);
67 }
68 return null;
69 }
70
71 @Override
72 public int getOrder() {
73 return DYNAMIC_POINTER_FACTORY_ORDER;
74 }
75 }