1 19 package org.netbeans.lib.jmi.query; 20 21 import java.util.Iterator ; 22 import java.util.NoSuchElementException ; 23 24 28 public abstract class FilterQuery implements Query { 29 30 private final Query QUERY; 31 32 public FilterQuery( Query query ) { 33 this.QUERY = query; 34 } 35 36 public Iterator iterator() { 37 return new FilterIterator(); 38 } 39 40 public boolean contains( Object object ) { 41 return accept( object ) ? QUERY.contains( object ) : false; 42 } 43 44 abstract protected boolean accept( Object object ); 45 46 47 49 private class FilterIterator extends QueryIterator.Delegate { 50 51 52 private Object next = null; 53 54 FilterIterator() { 55 super ( QUERY.iterator() ); 56 } 57 58 public boolean hasNext() { 59 if ( !ITERATOR.hasNext() ) { 60 return false; 61 } 62 else { 63 return findNext(); 64 } 65 } 66 67 public Object next() { 68 if ( next != null ) { 69 return next; 70 } 71 else if ( findNext() ) { 72 return next; 73 } 74 else { 75 throw new NoSuchElementException (); 76 } 77 } 78 79 81 private boolean findNext() { 82 while( ITERATOR.hasNext() ) { 83 Object object = ITERATOR.next(); 84 if ( accept( object ) ) { 85 next = object; 86 return true; 87 } 88 } 89 90 next = null; 91 return false; 92 } 93 } 94 } 95 | Popular Tags |