content: package btools.mapcreator;
  
  import java.io.BufferedInputStream;
  import java.io.EOFException;
  import java.io.File;
  import java.io.FileInputStream;
  
  import btools.util.DiffCoderDataInputStream;
  
  /**
   * Iterate over a singe nodefile or a directory
   * of nodetiles and feed the nodes to the callback listener
   *
   * @author ab
   */
  public class NodeIterator extends MapCreatorBase {
    private NodeListener listener;
    private boolean delete;
  
    public NodeIterator(NodeListener nodeListener, boolean deleteAfterReading) {
      listener = nodeListener;
      delete = deleteAfterReading;
    }
  
    public void processDir(File indir, String inSuffix) throws Exception {
      if (!indir.isDirectory()) {
        throw new IllegalArgumentException("not a directory: " + indir);
      }
  
      File[] af = sortBySizeAsc(indir.listFiles());
      for (int i = 0; i < af.length; i++) {
        File nodefile = af[i];
        if (nodefile.getName().endsWith(inSuffix)) {
          processFile(nodefile);
        }
      }
    }
  
  
    public void processFile(File nodefile) throws Exception {
      System.out.println("*** NodeIterator reading: " + nodefile);
  
      listener.nodeFileStart(nodefile);
  
      DiffCoderDataInputStream di = new DiffCoderDataInputStream(new BufferedInputStream(new FileInputStream(nodefile)));
      try {
        for (; ; ) {
          NodeData n = new NodeData(di);
          listener.nextNode(n);
        }
      } catch (EOFException eof) {
        di.close();
      }
      listener.nodeFileEnd(nodefile);
      if (delete && "true".equals(System.getProperty("deletetmpfiles"))) {
        nodefile.delete();
      }
    }
  }
  