1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 package org.jaxen.expr;
50
51
52 import org.jaxen.Context;
53 import org.jaxen.JaxenException;
54
55
56 class DefaultPathExpr extends DefaultExpr implements PathExpr {
57
58 private static final long serialVersionUID = -6593934674727004281L;
59 private Expr filterExpr;
60 private LocationPath locationPath;
61
62 DefaultPathExpr(Expr filterExpr,
63 LocationPath locationPath) {
64 this.filterExpr = filterExpr;
65 this.locationPath = locationPath;
66 }
67
68 public Expr getFilterExpr() {
69 return this.filterExpr;
70 }
71
72
73 public void setFilterExpr(Expr filterExpr) {
74 this.filterExpr = filterExpr;
75 }
76
77
78 public LocationPath getLocationPath() {
79 return this.locationPath;
80 }
81
82
83 public String toString() {
84 if (getLocationPath() != null) {
85 return "[(DefaultPathExpr): " + getFilterExpr() + ", " + getLocationPath() + "]";
86 }
87
88 return "[(DefaultPathExpr): " + getFilterExpr() + "]";
89 }
90
91
92 public String getText() {
93 StringBuffer buf = new StringBuffer();
94
95 if (getFilterExpr() != null) {
96 buf.append(getFilterExpr().getText());
97 }
98
99 if (getLocationPath() != null) {
100 if (!getLocationPath().getSteps().isEmpty()) buf.append("/");
101 buf.append(getLocationPath().getText());
102 }
103
104 return buf.toString();
105 }
106
107
108 public Expr simplify() {
109 if (getFilterExpr() != null) {
110 setFilterExpr(getFilterExpr().simplify());
111 }
112
113 if (getLocationPath() != null) {
114 getLocationPath().simplify();
115 }
116
117 if (getFilterExpr() == null && getLocationPath() == null) {
118 return null;
119 }
120
121
122 if (getLocationPath() == null) {
123 return getFilterExpr();
124 }
125
126 if (getFilterExpr() == null) {
127 return getLocationPath();
128 }
129
130 return this;
131 }
132
133 public Object evaluate(Context context) throws JaxenException {
134 Object results = null;
135 Context pathContext = null;
136 if (getFilterExpr() != null) {
137 results = getFilterExpr().evaluate(context);
138 pathContext = new Context(context.getContextSupport());
139 pathContext.setNodeSet(convertToList(results));
140 }
141 if (getLocationPath() != null) {
142 return getLocationPath().evaluate(pathContext);
143 }
144 return results;
145 }
146
147 }
148