##### Coverage Report - org.jaxen.Context

Classes in this File | Line Coverage | Branch Coverage | Complexity
Context |
93% |
100% |
| 1.0714285714285714;1.071

1 |  |
     package org.jaxen;
2 |  |
3 |  |
     /*
4 |  |
      $Id: Context.java,v 1.14 2005/06/01 11:19:23 elharo Exp $
5 |  |
6 |  |
      Copyright 2003 (C) The Werken Company. All Rights Reserved.
7 |  |
8 |  |
      Redistribution and use of this software and associated documentation
9 |  |
      ("Software"), with or without modification, are permitted provided
10 |  |
      that the following conditions are met:
11 |  |
12 |  |
      1. Redistributions of source code must retain copyright
13 |  |
         statements and notices.  Redistributions must also contain a
14 |  |
         copy of this document.
15 |  |
16 |  |
      2. Redistributions in binary form must reproduce the
17 |  |
         above copyright notice, this list of conditions and the
18 |  |
         following disclaimer in the documentation and/or other
19 |  |
         materials provided with the distribution.
20 |  |
21 |  |
      3. The name "jaxen" must not be used to endorse or promote
22 |  |
         products derived from this Software without prior written
23 |  |
         permission of The Werken Company.  For written permission,
24 |  |
         please contact bob@werken.com.
25 |  |
26 |  |
      4. Products derived from this Software may not be called "jaxen"
27 |  |
         nor may "jaxen" appear in their names without prior written
28 |  |
         permission of The Werken Company. "jaxen" is a registered
29 |  |
         trademark of The Werken Company.
30 |  |
31 |  |
      5. Due credit should be given to The Werken Company.
32 |  |
         (http://jaxen.werken.com/).
33 |  |
34 |  |
      THIS SOFTWARE IS PROVIDED BY THE WERKEN COMPANY AND CONTRIBUTORS
35 |  |
      ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
36 |  |
      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
37 |  |
      FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
38 |  |
      THE WERKEN COMPANY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
39 |  |
      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
40 |  |
      (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
41 |  |
      SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
42 |  |
      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
43 |  |
      STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
44 |  |
      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
45 |  |
      OF THE POSSIBILITY OF SUCH DAMAGE.
46 |  |
47 |  |
      */
48 |  |
49 |  |
     import java.io.Serializable;
50 |  |
     import java.util.ArrayList;
51 |  |
     import java.util.Collections;
52 |  |
     import java.util.List;
53 |  |
54 |  |
     /** Wrapper around implementation-specific objects used
55 |  |
      *  as the context of an expression evaluation.
56 |  |
      *
57 |  |
      *  <p>
58 |  |
      *  <strong>NOTE:</strong> This class is not typically used directly,
59 |  |
      *  but is exposed for writers of implementation-specific
60 |  |
      *  XPath packages.
61 |  |
      *  </p>
62 |  |
      *
63 |  |
      *  <p>
64 |  |
      *  The <code>Context</code> bundles utilities together
65 |  |
      *  for evaluation of the expression.  It wraps the provided
66 |  |
      *  objects for ease-of-passage through the expression AST.
67 |  |
      *  </p>
68 |  |
      *
69 |  |
      *  @see ContextSupport
70 |  |
      *  @see BaseXPath
71 |  |
      *  @see org.jaxen.dom4j.Dom4jXPath XPath for dom4j
72 |  |
      *  @see org.jaxen.jdom.JDOMXPath  XPath for JDOM
73 |  |
      *  @see org.jaxen.dom.DOMXPath   XPath for W3C DOM
74 |  |
      *
75 |  |
      *  @author <a href="mailto:bob@werken.com">bob mcwhirter</a>
76 |  |
      */
77 |  |
     public class Context
78 |  |
         implements Serializable
79 |  |
     {
80 |  |
         // ----------------------------------------------------------------------
81 |  |
         //     Instance members
82 |  |
         // ----------------------------------------------------------------------
83 |  |
84 |  |
         /** Context-support */
85 |  |
         private ContextSupport contextSupport;
86 |  |
87 |  |
         /** Context node-set */
88 |  |
         private List nodeSet;
89 |  |
90 |  |
         /** Current context size */
91 |  |
         private int size;
92 |  |
93 |  |
         /** Current context position */
94 |  |
         private int position;
95 |  |
96 |  |
         // ----------------------------------------------------------------------
97 |  |
         //     Constructors
98 |  |
         // ----------------------------------------------------------------------
99 |  |
100 |  |
         /** Create a new context.
101 |  |
          *
102 |  |
          *  @param contextSupport the context-support
103 |  |
          */
104 |  |
         public Context(ContextSupport contextSupport)
105 | 55086 |
         {
106 | 55086 |
             this.contextSupport = contextSupport;
107 | 55086 |
             this.nodeSet        = Collections.EMPTY_LIST;
108 | 55086 |
         }
109 |  |
110 |  |
         // ----------------------------------------------------------------------
111 |  |
         //     Instance methods
112 |  |
         // ----------------------------------------------------------------------
113 |  |
114 |  |
         /** Set the context node-set.
115 |  |
          *
116 |  |
          *  @param nodeSet the context node-set
117 |  |
          */
118 |  |
         public void setNodeSet(List nodeSet)
119 |  |
         {
120 | 85656 |
             this.nodeSet = nodeSet;
121 | 85656 |
         }
122 |  |
123 |  |
         /** Retrieve the context node-set.
124 |  |
          *
125 |  |
          *  @return the context node-set
126 |  |
          */
127 |  |
         public List getNodeSet()
128 |  |
         {
129 | 64692 |
             return this.nodeSet;
130 |  |
         }
131 |  |
132 |  |
         /** Set the <code>ContextSupport</code>.
133 |  |
          *
134 |  |
          *  @param contextSupport the context-support
135 |  |
          */
136 |  |
         public void setContextSupport(ContextSupport contextSupport)
137 |  |
         {
138 | 0 |
             this.contextSupport = contextSupport;
139 | 0 |
         }
140 |  |
141 |  |
         /** Retrieve the <code>ContextSupport</code>.
142 |  |
          *
143 |  |
          *  @return the context-support
144 |  |
          */
145 |  |
         public ContextSupport getContextSupport()
146 |  |
         {
147 | 135336 |
             return this.contextSupport;
148 |  |
         }
149 |  |
150 |  |
         /** Retrieve the current <code>Navigator</code>.
151 |  |
          *
152 |  |
          *  @return the navigator
153 |  |
          */
154 |  |
         public Navigator getNavigator()
155 |  |
         {
156 | 52614 |
             return getContextSupport().getNavigator();
157 |  |
         }
158 |  |
159 |  |
         /** Translate a namespace prefix to its URI.
160 |  |
          *
161 |  |
          *  @param prefix the prefix
162 |  |
          *
163 |  |
          *  @return the namespace URI mapped to the prefix
164 |  |
          */
165 |  |
         public String translateNamespacePrefixToUri(String prefix)
166 |  |
         {
167 | 12678 |
             return getContextSupport().translateNamespacePrefixToUri( prefix );
168 |  |
         }
169 |  |
170 |  |
         /** Retrieve a variable value.
171 |  |
          *
172 |  |
          *  @param namespaceURI the function namespace URI
173 |  |
          *  @param prefix the function prefix
174 |  |
          *  @param localName the function name
175 |  |
          *
176 |  |
          *  @return the variable value
177 |  |
          *
178 |  |
          *  @throws UnresolvableException if unable to locate a bound variable
179 |  |
          */
180 |  |
         public Object getVariableValue(String namespaceURI,
181 |  |
                                        String prefix,
182 |  |
                                        String localName)
183 |  |
             throws UnresolvableException
184 |  |
         {
185 | 84 |
             return getContextSupport().getVariableValue( namespaceURI,
186 |  |
                                                          prefix,
187 |  |
                                                          localName );
188 |  |
         }
189 |  |
190 |  |
         /** Retrieve a <code>Function</code>.
191 |  |
          *
192 |  |
          *  @param namespaceURI the function namespace URI
193 |  |
          *  @param prefix the function prefix
194 |  |
          *  @param localName the function name
195 |  |
          *
196 |  |
          *  @return the function object
197 |  |
          *
198 |  |
          *  @throws UnresolvableException if unable to locate a bound function
199 |  |
          */
200 |  |
         public Function getFunction(String namespaceURI,
201 |  |
                                     String prefix,
202 |  |
                                     String localName)
203 |  |
             throws UnresolvableException
204 |  |
         {
205 | 12594 |
             return getContextSupport().getFunction( namespaceURI,
206 |  |
                                                     prefix,
207 |  |
                                                     localName );
208 |  |
         }
209 |  |
210 |  |
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
211 |  |
         //     Properties
212 |  |
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
213 |  |
214 |  |
         /** Set the current size in the context node-set.
215 |  |
          *
216 |  |
          *  @param size the size
217 |  |
          */
218 |  |
         public void setSize(int size)
219 |  |
         {
220 | 23556 |
             this.size = size;
221 | 23556 |
         }
222 |  |
223 |  |
         /** Retrieve the size of the context node-set.
224 |  |
          *
225 |  |
          *  @return the size
226 |  |
          */
227 |  |
         public int getSize()
228 |  |
         {
229 | 30 |
             return this.size;
230 |  |
         }
231 |  |
232 |  |
         /** Set the current position in the context node-set.
233 |  |
          *
234 |  |
          *  @param position the position
235 |  |
          */
236 |  |
         public void setPosition(int position)
237 |  |
         {
238 | 23556 |
             this.position = position;
239 | 23556 |
         }
240 |  |
241 |  |
         /** Retrieve current position in the context node-set.
242 |  |
          *
243 |  |
          *  @return the current position
244 |  |
          */
245 |  |
         public int getPosition()
246 |  |
         {
247 | 732 |
             return this.position;
248 |  |
         }
249 |  |
250 |  |
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
251 |  |
         //     Helpers
252 |  |
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
253 |  |
254 |  |
         /** Create a type-safe shallow copy.
255 |  |
          *
256 |  |
          *  @return the duplicate
257 |  |
          */
258 |  |
         public Context duplicate()
259 |  |
         {
260 | 174 |
             Context dupe = new Context( getContextSupport() );
261 |  |
262 | 174 |
             List thisNodeSet = getNodeSet();
263 |  |
264 | 174 |
             if ( thisNodeSet != null )
265 |  |
             {
266 | 174 |
                 List dupeNodeSet = new ArrayList( thisNodeSet.size() );
267 | 174 |
                 dupeNodeSet.addAll( thisNodeSet );
268 | 174 |
                 dupe.setNodeSet( dupeNodeSet );
269 |  |
             }
270 |  |
271 | 174 |
             return dupe;
272 |  |
         }
273 |  |
     }