001         package com.croftsoft.core.util.filemap;
002    
003         import java.io.*;
004         import java.util.*;
005    
006         /*********************************************************************
007         * This Iterator is required for the AbstractMap implementation of
008         * FileMap.
009         *
010         * @see
011         *   FileMap
012         * @see
013         *   java.util.AbstractSet
014         *
015         * @version
016         *   1999-04-03
017         * @author
018         *   <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
019         *********************************************************************/
020    
021         public class  FileMapEntryIterator implements Iterator
022         //////////////////////////////////////////////////////////////////////
023         //////////////////////////////////////////////////////////////////////
024         {
025    
026         private File        rootDirectory;
027    
028         private String [ ]  files;
029         private int         index = 0;
030    
031         //////////////////////////////////////////////////////////////////////
032         //////////////////////////////////////////////////////////////////////
033    
034         public  FileMapEntryIterator ( File  rootDirectory )
035         //////////////////////////////////////////////////////////////////////
036         {
037           this.rootDirectory = rootDirectory;
038         }
039    
040         //////////////////////////////////////////////////////////////////////
041         //////////////////////////////////////////////////////////////////////
042    
043         public synchronized boolean  hasNext ( )
044         //////////////////////////////////////////////////////////////////////
045         {
046           if ( files == null ) files = rootDirectory.list ( );
047    
048           if ( files == null ) return false;
049    
050           return ( index < files.length );
051         }
052    
053         public synchronized Object  next ( )
054         //////////////////////////////////////////////////////////////////////
055         {
056           if ( files == null ) files = rootDirectory.list ( );
057    
058           if ( files == null ) return null;
059    
060           if ( index >= files.length ) return null;
061           
062           return new FileMapEntry ( rootDirectory, files [ index++ ] );
063         }
064    
065         public synchronized void  remove ( )
066         //////////////////////////////////////////////////////////////////////
067         {
068           if ( files == null ) files = rootDirectory.list ( );
069    
070           if ( files == null ) return;
071    
072           if ( index >= files.length ) return;
073           
074           new File ( files [ index ] ).delete ( );
075         }
076    
077         //////////////////////////////////////////////////////////////////////
078         //////////////////////////////////////////////////////////////////////
079         }