001: /*
002: * Copyright 1999-2004 The Apache Software Foundation
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.apache.commons.jxpath;
017:
018: import java.util.Iterator;
019:
020: /**
021: * Represents a compiled XPath. The interpretation of compiled XPaths
022: * may be faster, because it bypasses the compilation step. The reference
023: * implementation of JXPathContext also globally caches some of the
024: * results of compilation, so the direct use of JXPathContext is not
025: * always less efficient than the use of CompiledExpression.
026: * <p>
027: * Use CompiledExpression only when there is a need to evaluate the
028: * same expression multiple times and the CompiledExpression can be
029: * conveniently cached.
030: * <p>
031: * To acqure a CompiledExpression, call {@link JXPathContext#compile
032: * JXPathContext.compile}
033: *
034: * @author Dmitri Plotnikov
035: * @version $Revision: 1.6 $ $Date: 2004/02/29 14:17:42 $
036: */
037: public interface CompiledExpression {
038:
039: /**
040: * Evaluates the xpath and returns the resulting object. Primitive
041: * types are wrapped into objects.
042: */
043: Object getValue(JXPathContext context);
044:
045: /**
046: * Evaluates the xpath, converts the result to the specified class and
047: * returns the resulting object.
048: */
049: Object getValue(JXPathContext context, Class requiredType);
050:
051: /**
052: * Modifies the value of the property described by the supplied xpath.
053: * Will throw an exception if one of the following conditions occurs:
054: * <ul>
055: * <li>The xpath does not in fact describe an existing property
056: * <li>The property is not writable (no public, non-static set method)
057: * </ul>
058: */
059: void setValue(JXPathContext context, Object value);
060:
061: /**
062: * Creates intermediate elements of
063: * the path by invoking an AbstractFactory, which should first be
064: * installed on the context by calling "setFactory".
065: */
066: Pointer createPath(JXPathContext context);
067:
068: /**
069: * The same as setValue, except it creates intermediate elements of
070: * the path by invoking an AbstractFactory, which should first be
071: * installed on the context by calling "setFactory".
072: * <p>
073: * Will throw an exception if one of the following conditions occurs:
074: * <ul>
075: * <li>Elements of the xpath aleady exist, by the path does not in
076: * fact describe an existing property
077: * <li>The AbstractFactory fails to create an instance for an intermediate
078: * element.
079: * <li>The property is not writable (no public, non-static set method)
080: * </ul>
081: */
082: Pointer createPathAndSetValue(JXPathContext context, Object value);
083:
084: /**
085: * Traverses the xpath and returns a Iterator of all results found
086: * for the path. If the xpath matches no properties
087: * in the graph, the Iterator will not be null.
088: */
089: Iterator iterate(JXPathContext context);
090:
091: /**
092: * Traverses the xpath and returns a Pointer.
093: * A Pointer provides easy access to a property.
094: * If the xpath matches no properties
095: * in the graph, the pointer will be null.
096: */
097: Pointer getPointer(JXPathContext context, String xpath);
098:
099: /**
100: * Traverses the xpath and returns an Iterator of Pointers.
101: * A Pointer provides easy access to a property.
102: * If the xpath matches no properties
103: * in the graph, the Iterator be empty, but not null.
104: */
105: Iterator iteratePointers(JXPathContext context);
106:
107: /**
108: * Remove the graph element described by this expression
109: */
110: void removePath(JXPathContext context);
111:
112: /**
113: * Remove all graph elements described by this expression
114: */
115: void removeAll(JXPathContext context);
116: }
|