1 package org.jaxen;
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 import java.io.Serializable;
38
39 /*** Supporting context information for resolving
40 * namespace prefixes, functions, and variables.
41 *
42 * <p>
43 * <strong>NOTE:</strong> This class is not typically used directly,
44 * but is exposed for writers of implementation-specific
45 * XPath packages.
46 * </p>
47 *
48 * @see org.jaxen.dom4j.Dom4jXPath XPath for dom4j
49 * @see org.jaxen.jdom.JDOMXPath XPath for JDOM
50 * @see org.jaxen.dom.DOMXPath XPath for W3C DOM
51 *
52 * @author <a href="mailto:bob@eng.werken.com">bob mcwhirter</a>
53 *
54 * @version $Id: ContextSupport.java,v 1.13 2006/06/03 20:06:06 elharo Exp $
55 */
56 public class ContextSupport implements Serializable {
57
58 /***
59 *
60 */
61 private static final long serialVersionUID = 4494082174713652559L;
62
63 /*** Function context. */
64 private transient FunctionContext functionContext;
65
66 /*** Namespace context. */
67 private NamespaceContext namespaceContext;
68
69 /*** Variable context. */
70 private VariableContext variableContext;
71
72 /*** Model navigator. */
73 private Navigator navigator;
74
75
76
77
78
79 /*** Construct an empty <code>ContextSupport</code>.
80 */
81 public ContextSupport()
82 {
83
84 }
85
86 /*** Create a new ContextSupport object.
87 *
88 * @param namespaceContext the NamespaceContext
89 * @param functionContext the FunctionContext
90 * @param variableContext the VariableContext
91 * @param navigator the model navigator
92 */
93 public ContextSupport(NamespaceContext namespaceContext,
94 FunctionContext functionContext,
95 VariableContext variableContext,
96 Navigator navigator)
97 {
98 setNamespaceContext( namespaceContext );
99 setFunctionContext( functionContext );
100 setVariableContext( variableContext );
101
102 this.navigator = navigator;
103 }
104
105
106
107
108
109 /*** Set the <code>NamespaceContext</code>.
110 *
111 * @param namespaceContext the namespace context
112 */
113 public void setNamespaceContext(NamespaceContext namespaceContext)
114 {
115 this.namespaceContext = namespaceContext;
116 }
117
118 /*** Retrieve the <code>NamespaceContext</code>.
119 *
120 * @return the namespace context
121 */
122 public NamespaceContext getNamespaceContext()
123 {
124 return this.namespaceContext;
125 }
126
127 /*** Set the <code>FunctionContext</code>.
128 *
129 * @param functionContext the function context
130 */
131 public void setFunctionContext(FunctionContext functionContext)
132 {
133 this.functionContext = functionContext;
134 }
135
136 /*** Retrieve the <code>FunctionContext</code>.
137 *
138 * @return the function context
139 */
140 public FunctionContext getFunctionContext()
141 {
142 return this.functionContext;
143 }
144
145 /*** Set the <code>VariableContext</code>.
146 *
147 * @param variableContext the variable context
148 */
149 public void setVariableContext(VariableContext variableContext)
150 {
151 this.variableContext = variableContext;
152 }
153
154 /*** Retrieve the <code>VariableContext</code>.
155 *
156 * @return the variable context
157 */
158 public VariableContext getVariableContext()
159 {
160 return this.variableContext;
161 }
162
163 /*** Retrieve the <code>Navigator</code>.
164 *
165 * @return the navigator
166 */
167 public Navigator getNavigator()
168 {
169 return this.navigator;
170 }
171
172
173
174 /*** Translate a namespace prefix to its URI.
175 *
176 * @param prefix The prefix
177 *
178 * @return the namespace URI mapped to the prefix
179 */
180 public String translateNamespacePrefixToUri(String prefix)
181 {
182
183 if ("xml".equals(prefix)) {
184 return "http://www.w3.org/XML/1998/namespace";
185 }
186 NamespaceContext context = getNamespaceContext();
187
188 if ( context != null )
189 {
190 return context.translateNamespacePrefixToUri( prefix );
191 }
192
193 return null;
194 }
195
196 /*** Retrieve a variable value.
197 *
198 * @param namespaceURI the function namespace URI
199 * @param prefix the function prefix
200 * @param localName the function name
201 *
202 * @return the variable value.
203 *
204 * @throws UnresolvableException if unable to locate a bound variable.
205 */
206 public Object getVariableValue( String namespaceURI,
207 String prefix,
208 String localName )
209 throws UnresolvableException
210 {
211 VariableContext context = getVariableContext();
212
213 if ( context != null )
214 {
215 return context.getVariableValue( namespaceURI, prefix, localName );
216 }
217 else
218 {
219 throw new UnresolvableException( "No variable context installed" );
220 }
221 }
222
223 /*** Retrieve a <code>Function</code>.
224 *
225 * @param namespaceURI the function namespace URI
226 * @param prefix the function prefix
227 * @param localName the function name
228 *
229 * @return the function object
230 *
231 * @throws UnresolvableException if unable to locate a bound function
232 */
233 public Function getFunction( String namespaceURI,
234 String prefix,
235 String localName )
236 throws UnresolvableException
237 {
238 FunctionContext context = getFunctionContext();
239
240 if ( context != null )
241 {
242 return context.getFunction( namespaceURI, prefix, localName );
243 }
244 else
245 {
246 throw new UnresolvableException( "No function context installed" );
247 }
248 }
249
250 }