package net.argius.filetool;

import java.io.*;

import org.apache.tools.tar.*;

/**
 * Tarアーカイブ展開。
 * AntAPIを使用してTAR形式のアーカイブを展開する。
 */
public final class TarExpander implements Expander {

    private TarInputStream tis;

    /**
     * TarExpanderの生成。
     * @param is 入力ストリーム
     */
    public TarExpander(InputStream is) {
        this.tis = new TarInputStream(is);
    }

    /* (overridden)
     * @see net.argius.filetool.compress.Expander#nextEntry()
     */
    public ArchiveEntry nextEntry() throws IOException {
        TarEntry entry = tis.getNextEntry();
        if (entry == null) {
            return ArchiveEntry.EMPTY;
        }
        ArchiveEntry ae = new ArchiveEntry(entry.getName());
        ae.setLastModified(entry.getModTime().getTime());
        return ae;
    }

    /* (overridden)
     * @see net.argius.filetool.compress.Expander#expand(java.io.OutputStream)
     */
    public long expand(OutputStream os) throws IOException {
        return IOUtilities.transferAll(tis, os);
    }

    /* (overridden)
     * @see net.argius.filetool.compress.Expander#close()
     */
    public void close() throws IOException {
        tis.close();
    }

}
