View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.jxpath.ri.compiler;
19  
20  import org.apache.commons.jxpath.ri.EvalContext;
21  import org.apache.commons.jxpath.ri.QName;
22  
23  /**
24   * An element of the compile tree holding a variable reference.
25   */
26  public class VariableReference extends Expression {
27  
28      private final QName varName;
29  
30      /**
31       * Constructs a new VariableReference.
32       *
33       * @param varName variable name
34       */
35      public VariableReference(final QName varName) {
36          this.varName = varName;
37      }
38  
39      @Override
40      public Object compute(final EvalContext context) {
41          return computeValue(context);
42      }
43  
44      @Override
45      public boolean computeContextDependent() {
46          return false;
47      }
48  
49      /**
50       * Returns the value of the variable.
51       *
52       * @param context EvalContext against which to compute the variable's value.
53       * @return Object
54       */
55      @Override
56      public Object computeValue(final EvalContext context) {
57          return context.getRootContext().getVariableContext(varName);
58      }
59  
60      /**
61       * Gets the variable name.
62       *
63       * @return QName
64       */
65      public QName getVariableName() {
66          return varName;
67      }
68  
69      @Override
70      public boolean isContextDependent() {
71          return false;
72      }
73  
74      @Override
75      public String toString() {
76          return "$" + varName;
77      }
78  }