…lines 1–12 unchanged (12 lines)
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 */
17package org.apache.commons.jxpath.ri.axes;
18
19import org.apache.commons.jxpath.ri.Compiler;
20import org.apache.commons.jxpath.ri.EvalContext;
21import org.apache.commons.jxpath.ri.QName;
22import org.apache.commons.jxpath.ri.compiler.NodeNameTest;
23import org.apache.commons.jxpath.ri.compiler.NodeTest;
24import org.apache.commons.jxpath.ri.compiler.NodeTypeTest;
25import org.apache.commons.jxpath.ri.model.NodeIterator;
26import org.apache.commons.jxpath.ri.model.NodePointer;
27
28/**
29 * EvalContext that walks the "attribute::" axis.
30 *
31 * @author Dmitri Plotnikov
32 * @version $Revision$ $Date$
33 */
34public class AttributeContext extends EvalContext {
35 private static final NodeNameTest WILDCARD_TEST = new NodeNameTest(new QName(null, "*"));
36
37 private NodeTest nodeTest;
38 private boolean setStarted = false;
39 private NodeIterator iterator;
40 private NodePointer currentNodePointer;
41
…lines 42–71 unchanged (30 lines)
72 }
73
74 public boolean nextNode() {
75 super.setPosition(getCurrentPosition() + 1);
76 if (!setStarted) {
77 setStarted = true;
78 NodeNameTest nodeNameTest = null;
79 if (nodeTest instanceof NodeTypeTest) {
80 if (((NodeTypeTest) nodeTest).getNodeType() == Compiler.NODE_TYPE_NODE) {
81 nodeNameTest = WILDCARD_TEST;
82 }
83 }
84 else if (nodeTest instanceof NodeNameTest) {
85 nodeNameTest = (NodeNameTest) nodeTest;
86 }
87 if (nodeNameTest == null) {
88 return false;
89 }
90 iterator = parentContext.getCurrentNodePointer().attributeIterator(
91 nodeNameTest.getNodeName());
92 }
93 if (iterator == null) {
94 return false;
95 }
96 if (!iterator.setPosition(iterator.getPosition() + 1)) {
97 return false;
…lines 98–102 unchanged (5 lines)