package net.argius.filetool;

import java.io.*;

/**
 * 書庫タイプ。
 */
public final class ArchiveType {

    /**
     * <code>ZIP</code>
     */
    public static final ArchiveType ZIP = new ArchiveType("ZIP");

    /**
     * <code>TAR</code>
     */
    public static final ArchiveType TAR = new ArchiveType("TAR");

    /**
     * <code>TGZ (TAR+GZIP)</code>
     */
    public static final ArchiveType TGZ = new ArchiveType("TGZ");

    /**
     * <code>TBZ (TAR+BZIP2)</code>
     */
    public static final ArchiveType TBZ = new ArchiveType("TBZ");

    /**
     * <code>LZH</code>
     */
    public static final ArchiveType LZH = new ArchiveType("LZH");

    /**
     * 不明なタイプ。
     */
    public static final ArchiveType UNKNOWN = new ArchiveType("UNKNOWN");

    private final String typeName;

    /**
     * ArchiveTypeの生成。
     * @param typeName タイプ名 
     */
    private ArchiveType(String typeName) {
        this.typeName = typeName;
    }

    /**
     * タイプの取得。
     * @param file ファイル
     * @return タイプ
     */
    static ArchiveType getType(File file) {
        if (!file.isDirectory()) {
            String nameLC = file.getName().toLowerCase();
            if (nameLC.endsWith(".zip")) {
                return ZIP;
            }
            if (nameLC.endsWith(".tar")) {
                return TAR;
            }
            if (nameLC.endsWith(".tar.gz") || nameLC.endsWith(".tgz")) {
                return TGZ;
            }
            if (nameLC.endsWith(".tar.bz2") || nameLC.endsWith(".tbz")) {
                return TBZ;
            }
            if (nameLC.endsWith(".lzh")) {
                return LZH;
            }
        }
        return UNKNOWN;
    }

    /* (overridden)
     * @see java.lang.Object#toString()
     */
    public String toString() {
        return "ArchiveType:" + typeName;
    }

}
