Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Filtering Enumeration

/**  * The utillib library.  * More information is available at http://www.jinchess.com/.  * Copyright (C) 2003 Alexander Maryanovsky.  * All rights reserved.  *  * The utillib library is free software; you can redistribute  * it and/or modify it under the terms of the GNU Lesser General Public License  * as published by the Free Software Foundation; either version 2 of the  * License, or (at your option) any later version.  *  * The utillib library is distributed in the hope that it will  * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser  * General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public License  * along with utillib library; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */ import java.util.Enumeration; import java.util.NoSuchElementException; /**  * An implementation of the <code>Enumeration</code> interface which delegates  * to another <code>Enumeration</code>, but only returns elements which pass  * the {@link #accept(Object)} method.  */ public abstract class FilteringEnumeration implements Enumeration{   /**    * The delegate enumeration.    */   private final Enumeration delegate;   /**    * The next element we'll return. This is set by the <code>findNext</code>    * method.    */   private Object next = null;   /**    * Creates a new <code>FilteringEnumeration</code> object with the specified    * delegate.    */   public FilteringEnumeration(Enumeration delegate){     this.delegate = delegate;   }   /**    * Finds the next element in the delegate enumeration which passes    * <code>accept</code> and puts it in <code>next</code>.    */   private void findNext(){     if (next != null)       return;     while (delegate.hasMoreElements()){       Object element = delegate.nextElement();       if (accept(element)){         next = element;         break;       }     }   }   /**    * Returns whether there are more elements in this <code>Enumeration</code>.    */   public boolean hasMoreElements(){     findNext();     return next != null;   }   /**    * Returns the next element in the delegate enumeration which passes the    * <code>accept</code> method.    */   public Object nextElement() throws NoSuchElementException{     findNext();     if (next == null)       throw new NoSuchElementException();     Object result = next;     next = null;     return result;   }   /**    * Returns whether the specified object passes the filter.    */   public abstract boolean accept(Object element); }