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 package org.apache.commons.jxpath;
018
019 import java.util.Iterator;
020
021 /**
022 * Represents a compiled XPath. The interpretation of compiled XPaths
023 * may be faster, because it bypasses the compilation step. The reference
024 * implementation of {@link JXPathContext} also globally caches some of the
025 * results of compilation, so the direct use of JXPathContext is not
026 * always less efficient than the use of CompiledExpression.
027 * <p>
028 * Use CompiledExpression only when there is a need to evaluate the
029 * same expression multiple times and the CompiledExpression can be
030 * conveniently cached.
031 * <p>
032 * To acquire a CompiledExpression, call {@link JXPathContext#compile
033 * JXPathContext.compile}
034 *
035 * @author Dmitri Plotnikov
036 * @version $Revision: 652845 $ $Date: 2008-05-02 12:46:46 -0500 (Fri, 02 May 2008) $
037 */
038 public interface CompiledExpression {
039
040 /**
041 * Evaluates the xpath and returns the resulting object. Primitive
042 * types are wrapped into objects.
043 * @param context to evaluate
044 * @return Object
045 */
046 Object getValue(JXPathContext context);
047
048 /**
049 * Evaluates the xpath, converts the result to the specified class and
050 * returns the resulting object.
051 * @param context to evaluate
052 * @param requiredType return type
053 * @return Object
054 */
055 Object getValue(JXPathContext context, Class requiredType);
056
057 /**
058 * Modifies the value of the property described by the supplied xpath.
059 * Will throw an exception if one of the following conditions occurs:
060 * <ul>
061 * <li>The xpath does not in fact describe an existing property
062 * <li>The property is not writable (no public, non-static set method)
063 * </ul>
064 * @param context base
065 * @param value to set
066 */
067 void setValue(JXPathContext context, Object value);
068
069 /**
070 * Creates intermediate elements of
071 * the path by invoking an {@link AbstractFactory}, which should first be
072 * installed on the context by calling {@link JXPathContext#setFactory}.
073 * @param context base
074 * @return Pointer created
075 */
076 Pointer createPath(JXPathContext context);
077
078 /**
079 * The same as setValue, except it creates intermediate elements of
080 * the path by invoking an {@link AbstractFactory}, which should first be
081 * installed on the context by calling {@link JXPathContext#setFactory}.
082 * <p>
083 * Will throw an exception if one of the following conditions occurs:
084 * <ul>
085 * <li>Elements of the xpath aleady exist, by the path does not in
086 * fact describe an existing property
087 * <li>The AbstractFactory fails to create an instance for an intermediate
088 * element.
089 * <li>The property is not writable (no public, non-static set method)
090 * </ul>
091 * @param context base
092 * @param value to set
093 * @return Pointer created
094 */
095 Pointer createPathAndSetValue(JXPathContext context, Object value);
096
097 /**
098 * Traverses the xpath and returns a Iterator of all results found
099 * for the path. If the xpath matches no properties
100 * in the graph, the Iterator will not be null.
101 * @param context base
102 * @return Iterator
103 */
104 Iterator iterate(JXPathContext context);
105
106 /**
107 * Traverses the xpath and returns a Pointer.
108 * A Pointer provides easy access to a property.
109 * If the xpath matches no properties
110 * in the graph, the pointer will be null.
111 * @param context base
112 * @param xpath string
113 * @return Pointer found
114 */
115 Pointer getPointer(JXPathContext context, String xpath);
116
117 /**
118 * Traverses the xpath and returns an Iterator of Pointers.
119 * A Pointer provides easy access to a property.
120 * If the xpath matches no properties
121 * in the graph, the Iterator be empty, but not null.
122 * @param context to iterate
123 * @return Iterator<Pointer>
124 */
125 Iterator iteratePointers(JXPathContext context);
126
127 /**
128 * Remove the graph element described by this expression.
129 * @param context base
130 */
131 void removePath(JXPathContext context);
132
133 /**
134 * Remove all graph elements described by this expression.
135 * @param context base
136 */
137 void removeAll(JXPathContext context);
138 }