DRY: better inhert from FilterIterator
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/NodesInContentRangeIterator.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/NodesInContentRangeIterator.java
index 3b7de6a..703741e 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/NodesInContentRangeIterator.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/NodesInContentRangeIterator.java
@@ -10,52 +10,20 @@
*******************************************************************************/
package org.eclipse.vex.core.internal.dom;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
+import org.eclipse.vex.core.internal.core.FilterIterator;
+import org.eclipse.vex.core.internal.core.IFilter;
/**
* @author Florian Thienel
*/
-public class NodesInContentRangeIterator implements Iterator<Node> {
-
- private final Iterator<Node> nodes;
- private final ContentRange contentRange;
-
- private Node currentNode;
+public class NodesInContentRangeIterator extends FilterIterator<Node> {
public NodesInContentRangeIterator(final Iterable<Node> nodes, final ContentRange contentRange) {
- this.contentRange = contentRange;
- this.nodes = nodes.iterator();
- nextStep();
- }
-
- private void nextStep() {
- while (nodes.hasNext()) {
- currentNode = nodes.next();
- if (!currentNode.isAssociated()) {
- return;
+ super(nodes.iterator(), new IFilter<Node>() {
+ public boolean matches(final Node node) {
+ return contentRange.contains(node.getRange());
}
- if (contentRange.contains(currentNode.getRange())) {
- return;
- }
- }
- currentNode = null;
+ });
}
- public boolean hasNext() {
- return currentNode != null;
- }
-
- public Node next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- final Node next = currentNode;
- nextStep();
- return next;
- }
-
- public void remove() {
- throw new UnsupportedOperationException("Cannot remove node.");
- }
}
\ No newline at end of file