View Javadoc

    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      {
    92          // intentionally left blank
    93      }
    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     {
    107         setNamespaceContext( namespaceContext );
    108         setFunctionContext( functionContext );
    109         setVariableContext( variableContext );
    110
    111         this.navigator = navigator;
    112     }
    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         this.namespaceContext = namespaceContext;
    125     }
    126
    127     /*** Retrieve the <code>NamespaceContext</code>.
    128      *
    129      *  @return the namespace context
    130      */
    131     public NamespaceContext getNamespaceContext()
    132     {
    133         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         this.functionContext  = functionContext;
    143     }
    144
    145     /*** Retrieve the <code>FunctionContext</code>.
    146      *
    147      *  @return the function context
    148      */
    149     public FunctionContext getFunctionContext()
    150     {
    151         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         this.variableContext  = variableContext;
    161     }
    162
    163     /*** Retrieve the <code>VariableContext</code>.
    164      *
    165      *  @return the variable context
    166      */
    167     public VariableContext getVariableContext()
    168     {
    169         return this.variableContext;
    170     }
    171
    172     /*** Retrieve the <code>Navigator</code>.
    173      *
    174      *  @return the navigator
    175      */
    176     public Navigator getNavigator()
    177     {
    178         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         if ("xml".equals(prefix)) {
    193             return "http://www.w3.org/XML/1998/namespace";
    194         }
    195         NamespaceContext context = getNamespaceContext();
    196
    197         if ( context != null )
    198         {
    199             return context.translateNamespacePrefixToUri( prefix );
    200         }
    201
    202         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         VariableContext context = getVariableContext();
    221
    222         if ( context != null )
    223         {
    224             return context.getVariableValue( namespaceURI, prefix, localName );
    225         }
    226         else
    227         {
    228             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         FunctionContext context = getFunctionContext();
    248
    249         if ( context != null )
    250         {
    251             return context.getFunction( namespaceURI, prefix, localName );
    252         }
    253         else
    254         {
    255             throw new UnresolvableException( "No function context installed" );
    256         }
    257     }
    258 }