Coverage Report - org.jaxen.Context

Classes in this File Line Coverage Branch Coverage Complexity
Context
93% 
100% 
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  
 }