Coverage Report - org.jaxen.ContextSupport

Classes in this File Line Coverage Branch Coverage Complexity
ContextSupport
91% 
100% 
1.833

 1  
 package org.jaxen;
 2  
 
 3  
 /*
 4  
  $Id: ContextSupport.java,v 1.10 2005/06/01 11:19:59 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  
 
 51  
 /** Supporting context information for resolving
 52  
  *  namespace prefixes, functions, and variables.
 53  
  * 
 54  
  *  <p>
 55  
  *  <b>NOTE:</b> This class is not typically used directly,
 56  
  *  but is exposed for writers of implementation-specific
 57  
  *  XPath packages.
 58  
  *  </p>
 59  
  *
 60  
  *  @see org.jaxen.dom4j.Dom4jXPath XPath for dom4j
 61  
  *  @see org.jaxen.jdom.JDOMXPath  XPath for JDOM
 62  
  *  @see org.jaxen.dom.DOMXPath   XPath for W3C DOM
 63  
  *
 64  
  *  @author <a href="mailto:bob@eng.werken.com">bob mcwhirter</a>
 65  
  *
 66  
  *  @version $Id: ContextSupport.java,v 1.10 2005/06/01 11:19:59 elharo Exp $
 67  
  */
 68  
 public class ContextSupport
 69  
     implements Serializable
 70  
 {
 71  
 
 72  
     /** Function context. */
 73  
     private transient FunctionContext functionContext;
 74  
     
 75  
     /** Namespace context. */
 76  
     private NamespaceContext namespaceContext;
 77  
 
 78  
     /** Variable context. */
 79  
     private VariableContext variableContext;
 80  
     
 81  
     /** Model navigator. */
 82  
     private Navigator navigator;
 83  
 
 84  
     // ----------------------------------------------------------------------
 85  
     //     Constructors
 86  
     // ----------------------------------------------------------------------
 87  
     
 88  
     /** Construct an empty <code>ContextSupport</code>.
 89  
      */
 90  
     public ContextSupport()
 91  12
     {
 92  
         // intentionally left blank
 93  12
     }
 94  
 
 95  
     /** Construct.
 96  
      *
 97  
      *  @param namespaceContext the NamespaceContext
 98  
      *  @param functionContext the FunctionContext
 99  
      *  @param variableContext the VariableContext
 100  
      *  @param navigator the model navigator
 101  
      */
 102  
     public ContextSupport(NamespaceContext namespaceContext,
 103  
                           FunctionContext functionContext,
 104  
                           VariableContext variableContext,
 105  
                           Navigator navigator)
 106  4890
     {
 107  4890
         setNamespaceContext( namespaceContext );
 108  4890
         setFunctionContext( functionContext );
 109  4890
         setVariableContext( variableContext );
 110  
 
 111  4890
         this.navigator = navigator;
 112  4890
     }
 113  
 
 114  
     // ----------------------------------------------------------------------
 115  
     //     Instance methods
 116  
     // ----------------------------------------------------------------------
 117  
 
 118  
     /** Set the <code>NamespaceContext</code>.
 119  
      *
 120  
      *  @param namespaceContext the namespace context
 121  
      */
 122  
     public void setNamespaceContext(NamespaceContext namespaceContext)
 123  
     {
 124  5178
         this.namespaceContext = namespaceContext;
 125  5178
     }
 126  
 
 127  
     /** Retrieve the <code>NamespaceContext</code>.
 128  
      *
 129  
      *  @return the namespace context
 130  
      */
 131  
     public NamespaceContext getNamespaceContext()
 132  
     {
 133  13482
         return this.namespaceContext;
 134  
     }
 135  
 
 136  
     /** Set the <code>FunctionContext</code>.
 137  
      *
 138  
      *  @param functionContext the function context
 139  
      */
 140  
     public void setFunctionContext(FunctionContext functionContext)
 141  
     {
 142  5064
         this.functionContext  = functionContext;
 143  5064
     }
 144  
 
 145  
     /** Retrieve the <code>FunctionContext</code>.
 146  
      *
 147  
      *  @return the function context
 148  
      */
 149  
     public FunctionContext getFunctionContext()
 150  
     {
 151  12774
         return this.functionContext;
 152  
     }
 153  
 
 154  
     /** Set the <code>VariableContext</code>.
 155  
      *
 156  
      *  @param variableContext the variable context
 157  
      */
 158  
     public void setVariableContext(VariableContext variableContext)
 159  
     {
 160  5082
         this.variableContext  = variableContext;
 161  5082
     }
 162  
 
 163  
     /** Retrieve the <code>VariableContext</code>.
 164  
      *
 165  
      *  @return the variable context
 166  
      */
 167  
     public VariableContext getVariableContext()
 168  
     {
 169  258
         return this.variableContext;
 170  
     }
 171  
 
 172  
     /** Retrieve the <code>Navigator</code>.
 173  
      *
 174  
      *  @return the navigator
 175  
      */
 176  
     public Navigator getNavigator()
 177  
     {
 178  2959236
         return this.navigator;
 179  
     }
 180  
 
 181  
     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 182  
 
 183  
     /** Translate a namespace prefix to its URI.
 184  
      *
 185  
      *  @param prefix The prefix
 186  
      *
 187  
      *  @return the namespace URI mapped to the prefix
 188  
      */
 189  
     public String translateNamespacePrefixToUri(String prefix)
 190  
     {
 191  
         
 192  13308
         if ("xml".equals(prefix)) {
 193  18
             return "http://www.w3.org/XML/1998/namespace";
 194  
         }
 195  13290
         NamespaceContext context = getNamespaceContext();
 196  
 
 197  13290
         if ( context != null )
 198  
         {
 199  13290
             return context.translateNamespacePrefixToUri( prefix );
 200  
         }
 201  
 
 202  0
         return null;
 203  
     }
 204  
 
 205  
     /** Retrieve a variable value.
 206  
      *
 207  
      *  @param namespaceURI the function namespace URI
 208  
      *  @param prefix the function prefix
 209  
      *  @param localName the function name
 210  
      *
 211  
      *  @return the variable value.
 212  
      *
 213  
      *  @throws UnresolvableException if unable to locate a bound variable.
 214  
      */
 215  
     public Object getVariableValue( String namespaceURI,
 216  
                                     String prefix,
 217  
                                     String localName )
 218  
         throws UnresolvableException
 219  
     {
 220  84
         VariableContext context = getVariableContext();
 221  
 
 222  84
         if ( context != null )
 223  
         {
 224  84
             return context.getVariableValue( namespaceURI, prefix, localName );
 225  
         }
 226  
         else
 227  
         {
 228  0
             throw new UnresolvableException( "No variable context installed" );
 229  
         }
 230  
     }
 231  
 
 232  
     /** Retrieve a <code>Function</code>.
 233  
      *
 234  
      *  @param namespaceURI the function namespace URI
 235  
      *  @param prefix the function prefix
 236  
      *  @param localName the function name
 237  
      *
 238  
      *  @return the function object
 239  
      *
 240  
      *  @throws UnresolvableException if unable to locate a bound function
 241  
      */
 242  
     public Function getFunction( String namespaceURI,
 243  
                                  String prefix,
 244  
                                  String localName )
 245  
         throws UnresolvableException
 246  
     {
 247  12594
         FunctionContext context = getFunctionContext();
 248  
 
 249  12594
         if ( context != null )
 250  
         {
 251  12594
             return context.getFunction( namespaceURI, prefix, localName );
 252  
         }
 253  
         else
 254  
         {
 255  0
             throw new UnresolvableException( "No function context installed" );
 256  
         }
 257  
     }
 258  
 }