/*
** Tim feel free to integrate this code here.
**
** This code has been placed into the Public Domain.
** This code was written by David M. Gaskin in 1999.
**
*/
package com.ice.tar;
import java.io.IOException;
import java.util.Enumeration;
import java.util.NoSuchElementException;
/**
* Enumerate the contents of a "tar" file.
*
* Last updated 26th Mar 1999.
*
* @author David. M. Gaskin.
* @version Version 1.0 Mar 1999
* @since Version 1.0
*/
public class TarEntryEnumerator implements Enumeration
{
/**
* The instance on which the enumeration works.
*/
private TarInputStream tis = null;
/**
* Has EndOfFile been reached?
*/
private boolean eof = false;
/**
* The read ahead entry (or null if no read ahead exists)
*/
private TarEntry readAhead = null;
/**
* Construct an instance given a TarInputStream. This method is package
* private because it is not initially forseen that an instance of this class
* should be constructed from outside the package. Should it become necessary
* to construct an instance of this class from outside the package in which it
* exists then the constructor should be made protected and an empty
* subclass should be written in the other package.
* @param tis the TarInputStream on which this enumeration has
* to be based.
*/
public TarEntryEnumerator(TarInputStream tis)
{
this.tis = tis;
eof = false;
}
/**
* Return the next element in the enumeration. This is a required method
* for implementing java.util.Enumeration.
*
* @return the next Object in the enumeration
* @exception NoSuchElementException should an attempt be made to
* read beyond EOF
*/
public Object nextElement() throws NoSuchElementException
{
if (eof && (readAhead == null))
throw new NoSuchElementException();
TarEntry rc = null;
if (readAhead != null)
{
rc = readAhead;
readAhead = null;
}
else
{
rc = getNext();
}
return rc;
}
/**
* Return true if there are more elements in the enumeration.
*
* @return true if there are more elements in the enumeration.
*/
public boolean hasMoreElements()
{
if (eof)
return false;
boolean rc = false;
readAhead = getNext();
if (readAhead != null)
rc = true;
return rc;
}
/**
* Return the next element of null if there is no next element or
* if an error occured.
*
* @return the next element of null if there is no next element or
* if an error occured.
*/
private TarEntry getNext()
{
TarEntry rc = null;
try
{
rc = tis.getNextEntry();
}
catch (IOException ex)
{
// null will be returned but should not occur
ex.printStackTrace();
}
if (rc == null)
eof = true;
return rc;
}
}