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 */
017package org.apache.commons.jxpath.ri;
018
019import java.util.Iterator;
020
021import org.apache.commons.jxpath.ri.compiler.Expression;
022import org.apache.commons.jxpath.CompiledExpression;
023import org.apache.commons.jxpath.JXPathContext;
024import org.apache.commons.jxpath.Pointer;
025
026/**
027 * RI of CompiledExpression.
028 *
029 * @author Dmitri Plotnikov
030 * @version $Revision: 652845 $ $Date: 2008-05-02 13:46:46 -0400 (Fri, 02 May 2008) $
031 */
032public class JXPathCompiledExpression implements CompiledExpression {
033
034    private String xpath;
035    private Expression expression;
036
037    /**
038     * Create a new JXPathCompiledExpression.
039     * @param xpath source
040     * @param expression compiled
041     */
042    public JXPathCompiledExpression(String xpath, Expression expression) {
043        this.xpath = xpath;
044        this.expression = expression;
045    }
046
047    /**
048     * Get the source expression.
049     * @return String
050     */
051    protected String getXPath() {
052        return xpath;
053    }
054
055    /**
056     * Get the compiled expression.
057     * @return Expression
058     */
059    protected Expression getExpression() {
060        return expression;
061    }
062
063    public String toString() {
064        return xpath;
065    }
066
067    public Object getValue(JXPathContext context) {
068        return ((JXPathContextReferenceImpl) context).
069                    getValue(xpath, expression);
070    }
071
072    public Object getValue(JXPathContext context, Class requiredType) {
073        return ((JXPathContextReferenceImpl) context).
074                    getValue(xpath, expression, requiredType);
075    }
076
077    public void setValue(JXPathContext context, Object value) {
078        ((JXPathContextReferenceImpl) context).
079                    setValue(xpath, expression, value);
080    }
081
082    public Pointer createPath(JXPathContext context) {
083        return ((JXPathContextReferenceImpl) context).
084                    createPath(xpath, expression);
085    }
086
087    public Pointer createPathAndSetValue(JXPathContext context, Object value) {
088        return ((JXPathContextReferenceImpl) context).
089                    createPathAndSetValue(xpath, expression, value);
090    }
091
092    public Iterator iterate(JXPathContext context) {
093        return ((JXPathContextReferenceImpl) context).
094                    iterate(xpath, expression);
095    }
096
097    public Pointer getPointer(JXPathContext context, String xpath) {
098        return ((JXPathContextReferenceImpl) context).
099                    getPointer(xpath, expression);
100    }
101
102    public Iterator iteratePointers(JXPathContext context) {
103        return ((JXPathContextReferenceImpl) context).
104                    iteratePointers(xpath, expression);
105    }
106
107    public void removePath(JXPathContext context) {
108        ((JXPathContextReferenceImpl) context).removePath(xpath, expression);
109    }
110
111    public void removeAll(JXPathContext context) {
112        ((JXPathContextReferenceImpl) context).removeAll(xpath, expression);
113    }
114}