1 16 package org.apache.commons.jxpath.ri.axes; 17 18 import org.apache.commons.jxpath.ri.EvalContext; 19 import org.apache.commons.jxpath.ri.compiler.NodeTest; 20 import org.apache.commons.jxpath.ri.model.NodePointer; 21 22 28 public class ParentContext extends EvalContext { 29 private NodeTest nodeTest; 30 private boolean setStarted = false; 31 private NodePointer currentNodePointer; 32 33 public ParentContext(EvalContext parentContext, NodeTest nodeTest) { 34 super(parentContext); 35 this.nodeTest = nodeTest; 36 } 37 38 public NodePointer getCurrentNodePointer() { 39 return currentNodePointer; 40 } 41 42 public int getCurrentPosition() { 43 return 1; 44 } 45 46 public int getDocumentOrder() { 47 return -1; 48 } 49 50 public void reset() { 51 super.reset(); 52 setStarted = false; 53 } 54 55 public boolean setPosition(int position) { 56 super.setPosition(position); 57 return position == 1; 58 } 59 60 public boolean nextNode() { 61 if (setStarted) { 63 return false; 64 } 65 setStarted = true; 66 NodePointer thisLocation = parentContext.getCurrentNodePointer(); 67 currentNodePointer = thisLocation.getImmediateParentPointer(); 68 while (currentNodePointer != null 69 && currentNodePointer.isContainer()) { 70 currentNodePointer = currentNodePointer.getImmediateParentPointer(); 71 } 72 if (currentNodePointer != null 73 && currentNodePointer.testNode(nodeTest)) { 74 position++; 75 return true; 76 } 77 return false; 78 } 79 } | Popular Tags |