Clover coverage report - dom4j - 1.6.1 Coverage timestamp: ma mei 16 2005 14:23:01 GMT+01:00 FRAMES NO FRAMES |
file stats: | LOC: | 165 |  | Methods: | 12
| NCLOC: | 87 |  | Classes: | 1
Source file | Conditionals | Statements | Methods | TOTAL
XPathPattern.java | 25% | 53,1% | 66,7% | 54,2% |

1 |  | /*
2 |  | * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
3 |  | *
4 |  | * This software is open source.
5 |  | * See the bottom of this file for the licence.
6 |  | */
7 |  |
8 |  | package org.dom4j.xpath;
9 |  |
10 |  | import java.util.ArrayList;
11 |  |
12 |  | import org.dom4j.InvalidXPathException;
13 |  | import org.dom4j.Node;
14 |  | import org.dom4j.XPathException;
15 |  |
16 |  | import org.jaxen.Context;
17 |  | import org.jaxen.ContextSupport;
18 |  | import org.jaxen.JaxenException;
19 |  | import org.jaxen.SimpleNamespaceContext;
20 |  | import org.jaxen.SimpleVariableContext;
21 |  | import org.jaxen.VariableContext;
22 |  | import org.jaxen.XPathFunctionContext;
23 |  | import org.jaxen.dom4j.DocumentNavigator;
24 |  | import org.jaxen.pattern.Pattern;
25 |  | import org.jaxen.pattern.PatternParser;
26 |  | import org.jaxen.saxpath.SAXPathException;
27 |  |
28 |  | /**
29 |  | * <p>
30 |  | * <code>XPathPattern</code> is an implementation of Pattern which uses an
31 |  | * XPath xpath.
32 |  | * </p>
33 |  | *
34 |  | * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
35 |  | * @version $Revision: 1.18.2.1 $
36 |  | */
37 |  | public class XPathPattern implements org.dom4j.rule.Pattern {
38 |  | private String text;
39 |  |
40 |  | private Pattern pattern;
41 |  |
42 |  | private Context context;
43 |  |
44 | 0 | public XPathPattern(Pattern pattern) {
45 | 0 | this.pattern = pattern;
46 | 0 | this.text = pattern.getText();
47 | 0 | this.context = new Context(getContextSupport());
48 |  | }
49 |  |
50 | 37 | public XPathPattern(String text) {
51 | 37 | this.text = text;
52 | 37 | this.context = new Context(getContextSupport());
53 |  |
54 | 37 | try {
55 | 37 | this.pattern = PatternParser.parse(text);
56 |  | } catch (SAXPathException e) {
57 | 0 | throw new InvalidXPathException(text, e.getMessage());
58 |  | } catch (Throwable t) {
59 | 0 | throw new InvalidXPathException(text, t);
60 |  | }
61 |  | }
62 |  |
63 | 47 | public boolean matches(Node node) {
64 | 47 | try {
65 | 47 | ArrayList list = new ArrayList(1);
66 | 47 | list.add(node);
67 | 47 | context.setNodeSet(list);
68 |  |
69 | 47 | return pattern.matches(node, context);
70 |  | } catch (JaxenException e) {
71 | 0 | handleJaxenException(e);
72 |  |
73 | 0 | return false;
74 |  | }
75 |  | }
76 |  |
77 | 0 | public String getText() {
78 | 0 | return text;
79 |  | }
80 |  |
81 | 22 | public double getPriority() {
82 | 22 | return pattern.getPriority();
83 |  | }
84 |  |
85 | 14 | public org.dom4j.rule.Pattern[] getUnionPatterns() {
86 | 14 | Pattern[] patterns = pattern.getUnionPatterns();
87 |  |
88 | 14 | if (patterns != null) {
89 | 0 | int size = patterns.length;
90 | 0 | XPathPattern[] answer = new XPathPattern[size];
91 |  |
92 | 0 | for (int i = 0; i < size; i++) {
93 | 0 | answer[i] = new XPathPattern(patterns[i]);
94 |  | }
95 |  |
96 | 0 | return answer;
97 |  | }
98 |  |
99 | 14 | return null;
100 |  | }
101 |  |
102 | 14 | public short getMatchType() {
103 | 14 | return pattern.getMatchType();
104 |  | }
105 |  |
106 | 14 | public String getMatchesNodeName() {
107 | 14 | return pattern.getMatchesNodeName();
108 |  | }
109 |  |
110 | 0 | public void setVariableContext(VariableContext variableContext) {
111 | 0 | context.getContextSupport().setVariableContext(variableContext);
112 |  | }
113 |  |
114 | 19 | public String toString() {
115 | 19 | return "[XPathPattern: text: " + text + " Pattern: " + pattern + "]";
116 |  | }
117 |  |
118 | 37 | protected ContextSupport getContextSupport() {
119 | 37 | return new ContextSupport(new SimpleNamespaceContext(),
120 |  | XPathFunctionContext.getInstance(),
121 |  | new SimpleVariableContext(), DocumentNavigator.getInstance());
122 |  | }
123 |  |
124 | 0 | protected void handleJaxenException(JaxenException exception)
125 |  | throws XPathException {
126 | 0 | throw new XPathException(text, exception);
127 |  | }
128 |  | }
129 |  |
130 |  | /*
131 |  | * Redistribution and use of this software and associated documentation
132 |  | * ("Software"), with or without modification, are permitted provided that the
133 |  | * following conditions are met:
134 |  | *
135 |  | * 1. Redistributions of source code must retain copyright statements and
136 |  | * notices. Redistributions must also contain a copy of this document.
137 |  | *
138 |  | * 2. Redistributions in binary form must reproduce the above copyright notice,
139 |  | * this list of conditions and the following disclaimer in the documentation
140 |  | * and/or other materials provided with the distribution.
141 |  | *
142 |  | * 3. The name "DOM4J" must not be used to endorse or promote products derived
143 |  | * from this Software without prior written permission of MetaStuff, Ltd. For
144 |  | * written permission, please contact dom4j-info@metastuff.com.
145 |  | *
146 |  | * 4. Products derived from this Software may not be called "DOM4J" nor may
147 |  | * "DOM4J" appear in their names without prior written permission of MetaStuff,
148 |  | * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
149 |  | *
150 |  | * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
151 |  | *
152 |  | * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
153 |  | * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
154 |  | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
155 |  | * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
156 |  | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
157 |  | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
158 |  | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
159 |  | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
160 |  | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
161 |  | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
162 |  | * POSSIBILITY OF SUCH DAMAGE.
163 |  | *
164 |  | * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
165 |  | */