annotate NGSrich_0.5.5/src/org/jdom/xpath/XPath.java @ 0:89ad0a9cca52 default tip

Uploaded
author pfrommolt
date Mon, 21 Nov 2011 08:12:19 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
1 /*--
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
2
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
3 $Id: XPath.java,v 1.17 2007/11/10 05:29:02 jhunter Exp $
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
4
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
5 Copyright (C) 2000-2007 Jason Hunter & Brett McLaughlin.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
6 All rights reserved.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
7
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
8 Redistribution and use in source and binary forms, with or without
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
9 modification, are permitted provided that the following conditions
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
10 are met:
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
11
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
12 1. Redistributions of source code must retain the above copyright
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
13 notice, this list of conditions, and the following disclaimer.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
14
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
15 2. Redistributions in binary form must reproduce the above copyright
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
16 notice, this list of conditions, and the disclaimer that follows
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
17 these conditions in the documentation and/or other materials
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
18 provided with the distribution.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
19
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
20 3. The name "JDOM" must not be used to endorse or promote products
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
21 derived from this software without prior written permission. For
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
22 written permission, please contact <request_AT_jdom_DOT_org>.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
23
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
24 4. Products derived from this software may not be called "JDOM", nor
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
25 may "JDOM" appear in their name, without prior written permission
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
26 from the JDOM Project Management <request_AT_jdom_DOT_org>.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
27
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
28 In addition, we request (but do not require) that you include in the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
29 end-user documentation provided with the redistribution and/or in the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
30 software itself an acknowledgement equivalent to the following:
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
31 "This product includes software developed by the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
32 JDOM Project (http://www.jdom.org/)."
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
33 Alternatively, the acknowledgment may be graphical using the logos
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
34 available at http://www.jdom.org/images/logos.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
35
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
36 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
37 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
38 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
39 DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
40 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
41 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
42 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
43 USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
44 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
45 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
46 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
47 SUCH DAMAGE.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
48
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
49 This software consists of voluntary contributions made by many
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
50 individuals on behalf of the JDOM Project and was originally
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
51 created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
52 Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
53 on the JDOM Project, please see <http://www.jdom.org/>.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
54
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
55 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
56
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
57 package org.jdom.xpath;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
58
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
59
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
60 import java.io.*;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
61 import java.lang.reflect.*;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
62 import java.util.*;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
63
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
64 import org.jdom.*;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
65
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
66
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
67 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
68 * A utility class for performing XPath calls on JDOM nodes, with a factory
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
69 * interface for obtaining a first XPath instance. Users operate against this
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
70 * class while XPath vendors can plug-in implementations underneath. Users
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
71 * can choose an implementation using either {@link #setXPathClass} or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
72 * the system property "org.jdom.xpath.class".
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
73 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
74 * @version $Revision: 1.17 $, $Date: 2007/11/10 05:29:02 $
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
75 * @author Laurent Bihanic
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
76 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
77 public abstract class XPath implements Serializable {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
78
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
79 private static final String CVS_ID =
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
80 "@(#) $RCSfile: XPath.java,v $ $Revision: 1.17 $ $Date: 2007/11/10 05:29:02 $ $Name: jdom_1_1_1 $";
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
81
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
82 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
83 * The name of the system property from which to retrieve the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
84 * name of the implementation class to use.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
85 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
86 * The property name is:
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
87 * "<code>org.jdom.xpath.class</code>".</p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
88 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
89 private final static String XPATH_CLASS_PROPERTY = "org.jdom.xpath.class";
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
90
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
91 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
92 * The default implementation class to use if none was configured.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
93 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
94 private final static String DEFAULT_XPATH_CLASS =
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
95 "org.jdom.xpath.JaxenXPath";
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
96
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
97 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
98 * The string passable to the JAXP 1.3 XPathFactory isObjectModelSupported()
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
99 * method to query an XPath engine regarding its support for JDOM. Defined
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
100 * to be the well-known URI "http://jdom.org/jaxp/xpath/jdom".
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
101 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
102 public final static String JDOM_OBJECT_MODEL_URI =
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
103 "http://jdom.org/jaxp/xpath/jdom";
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
104
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
105 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
106 * The constructor to instanciate a new XPath concrete
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
107 * implementation.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
108 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
109 * @see #newInstance
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
110 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
111 private static Constructor constructor = null;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
112
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
113 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
114 * Creates a new XPath wrapper object, compiling the specified
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
115 * XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
116 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
117 * @param path the XPath expression to wrap.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
118 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
119 * @throws JDOMException if the XPath expression is invalid.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
120 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
121 public static XPath newInstance(String path) throws JDOMException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
122 try {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
123 if (constructor == null) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
124 // First call => Determine implementation.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
125 String className;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
126 try {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
127 className = System.getProperty(XPATH_CLASS_PROPERTY,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
128 DEFAULT_XPATH_CLASS);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
129 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
130 catch (SecurityException ex1) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
131 // Access to system property denied. => Use default impl.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
132 className = DEFAULT_XPATH_CLASS;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
133 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
134 setXPathClass(Class.forName(className));
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
135 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
136 // Allocate and return new implementation instance.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
137 return (XPath)constructor.newInstance(new Object[] { path });
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
138 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
139 catch (JDOMException ex1) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
140 throw ex1;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
141 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
142 catch (InvocationTargetException ex2) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
143 // Constructor threw an error on invocation.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
144 Throwable t = ex2.getTargetException();
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
145
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
146 throw (t instanceof JDOMException)? (JDOMException)t:
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
147 new JDOMException(t.toString(), t);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
148 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
149 catch (Exception ex3) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
150 // Any reflection error (probably due to a configuration mistake).
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
151 throw new JDOMException(ex3.toString(), ex3);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
152 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
153 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
154
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
155 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
156 * Sets the concrete XPath subclass to use when allocating XPath
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
157 * instances.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
158 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
159 * @param aClass the concrete subclass of XPath.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
160 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
161 * @throws IllegalArgumentException if <code>aClass</code> is
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
162 * <code>null</code>.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
163 * @throws JDOMException if <code>aClass</code> is
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
164 * not a concrete subclass
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
165 * of XPath.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
166 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
167 public static void setXPathClass(Class aClass) throws JDOMException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
168 if (aClass == null) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
169 throw new IllegalArgumentException("aClass");
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
170 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
171
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
172 try {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
173 if ((XPath.class.isAssignableFrom(aClass)) &&
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
174 (Modifier.isAbstract(aClass.getModifiers()) == false)) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
175 // Concrete subclass of XPath => Get constructor
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
176 constructor = aClass.getConstructor(new Class[] { String.class });
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
177 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
178 else {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
179 throw new JDOMException(aClass.getName() +
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
180 " is not a concrete JDOM XPath implementation");
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
181 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
182 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
183 catch (JDOMException ex1) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
184 throw ex1;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
185 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
186 catch (Exception ex2) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
187 // Any reflection error (probably due to a configuration mistake).
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
188 throw new JDOMException(ex2.toString(), ex2);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
189 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
190 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
191
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
192 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
193 * Evaluates the wrapped XPath expression and returns the list
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
194 * of selected items.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
195 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
196 * @param context the node to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
197 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
198 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
199 * @return the list of selected items, which may be of types: {@link Element},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
200 * {@link Attribute}, {@link Text}, {@link CDATA},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
201 * {@link Comment}, {@link ProcessingInstruction}, Boolean,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
202 * Double, or String.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
203 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
204 * @throws JDOMException if the evaluation of the XPath
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
205 * expression on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
206 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
207 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
208 abstract public List selectNodes(Object context) throws JDOMException;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
209
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
210 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
211 * Evaluates the wrapped XPath expression and returns the first
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
212 * entry in the list of selected nodes (or atomics).
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
213 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
214 * @param context the node to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
215 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
216 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
217 * @return the first selected item, which may be of types: {@link Element},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
218 * {@link Attribute}, {@link Text}, {@link CDATA},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
219 * {@link Comment}, {@link ProcessingInstruction}, Boolean,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
220 * Double, String, or <code>null</code> if no item was selected.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
221 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
222 * @throws JDOMException if the evaluation of the XPath
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
223 * expression on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
224 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
225 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
226 abstract public Object selectSingleNode(Object context) throws JDOMException;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
227
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
228 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
229 * Returns the string value of the first node selected by applying
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
230 * the wrapped XPath expression to the given context.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
231 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
232 * @param context the element to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
233 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
234 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
235 * @return the string value of the first node selected by applying
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
236 * the wrapped XPath expression to the given context.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
237 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
238 * @throws JDOMException if the XPath expression is invalid or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
239 * its evaluation on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
240 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
241 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
242 abstract public String valueOf(Object context) throws JDOMException;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
243
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
244 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
245 * Returns the number value of the first node selected by applying
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
246 * the wrapped XPath expression to the given context.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
247 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
248 * @param context the element to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
249 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
250 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
251 * @return the number value of the first node selected by applying
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
252 * the wrapped XPath expression to the given context,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
253 * <code>null</code> if no node was selected or the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
254 * special value {@link java.lang.Double#NaN}
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
255 * (Not-a-Number) if the selected value can not be
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
256 * converted into a number value.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
257 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
258 * @throws JDOMException if the XPath expression is invalid or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
259 * its evaluation on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
260 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
261 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
262 abstract public Number numberValueOf(Object context) throws JDOMException;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
263
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
264 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
265 * Defines an XPath variable and sets its value.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
266 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
267 * @param name the variable name.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
268 * @param value the variable value.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
269 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
270 * @throws IllegalArgumentException if <code>name</code> is not
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
271 * a valid XPath variable name
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
272 * or if the value type is not
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
273 * supported by the underlying
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
274 * implementation
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
275 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
276 abstract public void setVariable(String name, Object value);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
277
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
278 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
279 * Adds a namespace definition to the list of namespaces known of
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
280 * this XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
281 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
282 * <strong>Note</strong>: In XPath, there is no such thing as a
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
283 * 'default namespace'. The empty prefix <b>always</b> resolves
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
284 * to the empty namespace URI.</p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
285 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
286 * @param namespace the namespace.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
287 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
288 abstract public void addNamespace(Namespace namespace);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
289
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
290 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
291 * Adds a namespace definition (prefix and URI) to the list of
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
292 * namespaces known of this XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
293 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
294 * <strong>Note</strong>: In XPath, there is no such thing as a
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
295 * 'default namespace'. The empty prefix <b>always</b> resolves
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
296 * to the empty namespace URI.</p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
297 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
298 * @param prefix the namespace prefix.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
299 * @param uri the namespace URI.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
300 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
301 * @throws IllegalNameException if the prefix or uri are null or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
302 * empty strings or if they contain
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
303 * illegal characters.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
304 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
305 public void addNamespace(String prefix, String uri) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
306 addNamespace(Namespace.getNamespace(prefix, uri));
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
307 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
308
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
309 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
310 * Returns the wrapped XPath expression as a string.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
311 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
312 * @return the wrapped XPath expression as a string.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
313 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
314 abstract public String getXPath();
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
315
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
316
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
317 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
318 * Evaluates an XPath expression and returns the list of selected
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
319 * items.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
320 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
321 * <strong>Note</strong>: This method should not be used when the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
322 * same XPath expression needs to be applied several times (on the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
323 * same or different contexts) as it requires the expression to be
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
324 * compiled before being evaluated. In such cases,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
325 * {@link #newInstance allocating} an XPath wrapper instance and
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
326 * {@link #selectNodes(java.lang.Object) evaluating} it several
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
327 * times is way more efficient.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
328 * </p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
329 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
330 * @param context the node to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
331 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
332 * @param path the XPath expression to evaluate.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
333 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
334 * @return the list of selected items, which may be of types: {@link Element},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
335 * {@link Attribute}, {@link Text}, {@link CDATA},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
336 * {@link Comment}, {@link ProcessingInstruction}, Boolean,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
337 * Double, or String.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
338 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
339 * @throws JDOMException if the XPath expression is invalid or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
340 * its evaluation on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
341 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
342 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
343 public static List selectNodes(Object context, String path)
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
344 throws JDOMException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
345 return newInstance(path).selectNodes(context);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
346 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
347
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
348 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
349 * Evaluates the wrapped XPath expression and returns the first
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
350 * entry in the list of selected nodes (or atomics).
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
351 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
352 * <strong>Note</strong>: This method should not be used when the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
353 * same XPath expression needs to be applied several times (on the
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
354 * same or different contexts) as it requires the expression to be
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
355 * compiled before being evaluated. In such cases,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
356 * {@link #newInstance allocating} an XPath wrapper instance and
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
357 * {@link #selectSingleNode(java.lang.Object) evaluating} it
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
358 * several times is way more efficient.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
359 * </p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
360 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
361 * @param context the element to use as context for evaluating
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
362 * the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
363 * @param path the XPath expression to evaluate.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
364 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
365 * @return the first selected item, which may be of types: {@link Element},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
366 * {@link Attribute}, {@link Text}, {@link CDATA},
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
367 * {@link Comment}, {@link ProcessingInstruction}, Boolean,
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
368 * Double, String, or <code>null</code> if no item was selected.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
369 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
370 * @throws JDOMException if the XPath expression is invalid or
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
371 * its evaluation on the specified context
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
372 * failed.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
373 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
374 public static Object selectSingleNode(Object context, String path)
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
375 throws JDOMException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
376 return newInstance(path).selectSingleNode(context);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
377 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
378
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
379
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
380 //-------------------------------------------------------------------------
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
381 // Serialization support
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
382 //-------------------------------------------------------------------------
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
383
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
384 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
385 * <i>[Serialization support]</i> Returns the alternative object
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
386 * to write to the stream when serializing this object. This
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
387 * method returns an instance of a dedicated nested class to
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
388 * serialize XPath expressions independently of the concrete
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
389 * implementation being used.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
390 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
391 * <strong>Note</strong>: Subclasses are not allowed to override
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
392 * this method to ensure valid serialization of all
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
393 * implementations.</p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
394 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
395 * @return an XPathString instance configured with the wrapped
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
396 * XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
397 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
398 * @throws ObjectStreamException never.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
399 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
400 protected final Object writeReplace() throws ObjectStreamException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
401 return new XPathString(this.getXPath());
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
402 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
403
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
404 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
405 * The XPathString is dedicated to serialize instances of
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
406 * XPath subclasses in a implementation-independent manner.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
407 * <p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
408 * XPathString ensures that only string data are serialized. Upon
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
409 * deserialization, XPathString relies on XPath factory method to
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
410 * to create instances of the concrete XPath wrapper currently
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
411 * configured.</p>
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
412 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
413 private final static class XPathString implements Serializable {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
414 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
415 * The XPath expression as a string.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
416 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
417 private String xPath = null;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
418
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
419 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
420 * Creates a new XPathString instance from the specified
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
421 * XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
422 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
423 * @param xpath the XPath expression.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
424 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
425 public XPathString(String xpath) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
426 super();
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
427
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
428 this.xPath = xpath;
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
429 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
430
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
431 /**
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
432 * <i>[Serialization support]</i> Resolves the read XPathString
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
433 * objects into XPath implementations.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
434 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
435 * @return an instance of a concrete implementation of
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
436 * XPath.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
437 *
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
438 * @throws ObjectStreamException if no XPath could be built
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
439 * from the read object.
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
440 */
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
441 private Object readResolve() throws ObjectStreamException {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
442 try {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
443 return XPath.newInstance(this.xPath);
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
444 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
445 catch (JDOMException ex1) {
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
446 throw new InvalidObjectException(
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
447 "Can't create XPath object for expression \"" +
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
448 this.xPath + "\": " + ex1.toString());
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
449 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
450 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
451 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
452 }
89ad0a9cca52 Uploaded
pfrommolt
parents:
diff changeset
453