Coverage Report - org.jaxen.ContextSupport
 
Classes in this File Line Coverage Branch Coverage Complexity
ContextSupport
91%
29/32
100%
4/4
1.833
 
 1  
 package org.jaxen;
 2  
 
 3  
 /*
 4  
  $Id: ContextSupport.java,v 1.13 2006/06/03 20:06:06 elharo Exp $
 5  
 
 6  
  Copyright 2003 The Werken Company. All Rights Reserved.
 7  
  
 8  
 Redistribution and use in source and binary forms, with or without
 9  
 modification, are permitted provided that the following conditions are
 10  
 met:
 11  
 
 12  
   * Redistributions of source code must retain the above copyright
 13  
     notice, this list of conditions and the following disclaimer.
 14  
 
 15  
   * Redistributions in binary form must reproduce the above copyright
 16  
     notice, this list of conditions and the following disclaimer in the
 17  
     documentation and/or other materials provided with the distribution.
 18  
 
 19  
   * Neither the name of the Jaxen Project nor the names of its
 20  
     contributors may be used to endorse or promote products derived 
 21  
     from this software without specific prior written permission.
 22  
 
 23  
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 24  
 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 25  
 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 26  
 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 27  
 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 28  
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 29  
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 30  
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 31  
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 32  
 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 33  
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 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  
     //     Constructors
 77  
     // ----------------------------------------------------------------------
 78  
     
 79  
     /** Construct an empty <code>ContextSupport</code>.
 80  
      */
 81  
     public ContextSupport()
 82  10
     {
 83  
         // intentionally left blank
 84  10
     }
 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  1702
     {
 98  1702
         setNamespaceContext( namespaceContext );
 99  1702
         setFunctionContext( functionContext );
 100  1702
         setVariableContext( variableContext );
 101  
 
 102  1702
         this.navigator = navigator;
 103  1702
     }
 104  
 
 105  
     // ----------------------------------------------------------------------
 106  
     //     Instance methods
 107  
     // ----------------------------------------------------------------------
 108  
 
 109  
     /** Set the <code>NamespaceContext</code>.
 110  
      *
 111  
      *  @param namespaceContext the namespace context
 112  
      */
 113  
     public void setNamespaceContext(NamespaceContext namespaceContext)
 114  
     {
 115  1800
         this.namespaceContext = namespaceContext;
 116  1800
     }
 117  
 
 118  
     /** Retrieve the <code>NamespaceContext</code>.
 119  
      *
 120  
      *  @return the namespace context
 121  
      */
 122  
     public NamespaceContext getNamespaceContext()
 123  
     {
 124  4544
         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  1760
         this.functionContext  = functionContext;
 134  1760
     }
 135  
 
 136  
     /** Retrieve the <code>FunctionContext</code>.
 137  
      *
 138  
      *  @return the function context
 139  
      */
 140  
     public FunctionContext getFunctionContext()
 141  
     {
 142  4300
         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  1766
         this.variableContext  = variableContext;
 152  1766
     }
 153  
 
 154  
     /** Retrieve the <code>VariableContext</code>.
 155  
      *
 156  
      *  @return the variable context
 157  
      */
 158  
     public VariableContext getVariableContext()
 159  
     {
 160  86
         return this.variableContext;
 161  
     }
 162  
 
 163  
     /** Retrieve the <code>Navigator</code>.
 164  
      *
 165  
      *  @return the navigator
 166  
      */
 167  
     public Navigator getNavigator()
 168  
     {
 169  987168
         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  4484
         if ("xml".equals(prefix)) {
 184  6
             return "http://www.w3.org/XML/1998/namespace";
 185  
         }
 186  4478
         NamespaceContext context = getNamespaceContext();
 187  
 
 188  4478
         if ( context != null )
 189  
         {
 190  4478
             return context.translateNamespacePrefixToUri( prefix );
 191  
         }
 192  
 
 193  0
         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  28
         VariableContext context = getVariableContext();
 212  
 
 213  28
         if ( context != null )
 214  
         {
 215  28
             return context.getVariableValue( namespaceURI, prefix, localName );
 216  
         }
 217  
         else
 218  
         {
 219  0
             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  4240
         FunctionContext context = getFunctionContext();
 239  
 
 240  4240
         if ( context != null )
 241  
         {
 242  4240
             return context.getFunction( namespaceURI, prefix, localName );
 243  
         }
 244  
         else
 245  
         {
 246  0
             throw new UnresolvableException( "No function context installed" );
 247  
         }
 248  
     }
 249  
     
 250  
 }