    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one or more
    003 * contributor license agreements.  See the NOTICE file distributed with
    004 * this work for additional information regarding copyright ownership.
    005 * The ASF licenses this file to You under the Apache License, Version 2.0
    006 * (the "License"); you may not use this file except in compliance with
    007 * the License.  You may obtain a copy of the License at
    008 *
    009 *     http://www.apache.org/licenses/LICENSE-2.0
    010 *
    011 * Unless required by applicable law or agreed to in writing, software
    012 * distributed under the License is distributed on an "AS IS" BASIS,
    013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014 * See the License for the specific language governing permissions and
    015 * limitations under the License.
    016 */
    017
    018package org.apache.commons.jxpath.ri.compiler;
    019
    020import org.apache.commons.jxpath.ri.EvalContext;
    021import org.apache.commons.jxpath.ri.QName;
    022
    023/**
    024 * An element of the compile tree holding a variable reference.
    025 */
    026public class VariableReference extends Expression {
    027
    028    private final QName varName;
    029
    030    /**
    031     * Constructs a new VariableReference.
    032     *
    033     * @param varName variable name
    034     */
    035    public VariableReference(final QName varName) {
    036        this.varName = varName;
    037    }
    038
    039    @Override
    040    public Object compute(final EvalContext context) {
    041        return computeValue(context);
    042    }
    043
    044    @Override
    045    public boolean computeContextDependent() {
    046        return false;
    047    }
    048
    049    /**
    050     * Returns the value of the variable.
    051     *
    052     * @param context EvalContext against which to compute the variable's value.
    053     * @return Object
    054     */
    055    @Override
    056    public Object computeValue(final EvalContext context) {
    057        return context.getRootContext().getVariableContext(varName);
    058    }
    059
    060    /**
    061     * Gets the variable name.
    062     *
    063     * @return QName
    064     */
    065    public QName getVariableName() {
    066        return varName;
    067    }
    068
    069    @Override
    070    public boolean isContextDependent() {
    071        return false;
    072    }
    073
    074    @Override
    075    public String toString() {
    076        return "$" + varName;
    077    }
    078}