/*
 * このソースコードは blanco Frameworkにより自動生成されました。
 */
package blanco.html.normalizer.spec.stringgroup;

/**
 * HTMLの要素についての仕様のタイプをあらわすバリューオブジェクトです。この情報の起源: http://www.w3.org/TR/1999/REC-html401-19991224/index/elements.html
 */
public class BlancoHtmlElementSpecTypeStringGroup {
    /**
     * No.1 説明:(全般) 仕様の資料上に特に記載のないもの。
     */
    public static final int DEFAULT = 1;

    /**
     * No.2 説明:(Start Tag)(End Tag) Start Tag や End Tag においてオプションであるもの。
     */
    public static final int OPTIONAL = 2;

    /**
     * No.3 説明:(End Tag) End Tag において利用が禁じられているもの。
     */
    public static final int FORBIDDEN = 3;

    /**
     * No.4 説明:空のエレメントであるもの。&lt;BR&gt;など。
     */
    public static final int EMPTY = 4;

    /**
     * No.5 説明:使用が非推奨のもの。
     */
    public static final int DEPRECATED = 5;

    /**
     * No.6 説明:(DTD) Loose DTD のもの。
     */
    public static final int LOOSE_DTD = 6;

    /**
     * No.7 説明:(DTD) Frameset DTD のもの。
     */
    public static final int FRAMESET_DTD = 7;

    /**
     * 未定義。文字列グループ以外の文字列または定数が未定義のもの。
     */
    public static final int NOT_DEFINED = -1;

    /**
     * 文字列グループに含まれる文字列であるかどうかを判定します。
     *
     * @param argCheck チェックを行いたい文字列。
     * @return 文字列グループに含まれていればture。グループに含まれない文字列であればfalse。
     */
    public boolean match(final String argCheck) {
        // No.1
        // 説明:(全般) 仕様の資料上に特に記載のないもの。
        if ("-".equals(argCheck)) {
            return true;
        }
        // No.2
        // 説明:(Start Tag)(End Tag) Start Tag や End Tag においてオプションであるもの。
        if ("Optional".equals(argCheck)) {
            return true;
        }
        // No.3
        // 説明:(End Tag) End Tag において利用が禁じられているもの。
        if ("Forbidden".equals(argCheck)) {
            return true;
        }
        // No.4
        // 説明:空のエレメントであるもの。<BR>など。
        if ("Empty".equals(argCheck)) {
            return true;
        }
        // No.5
        // 説明:使用が非推奨のもの。
        if ("Deprecated".equals(argCheck)) {
            return true;
        }
        // No.6
        // 説明:(DTD) Loose DTD のもの。
        if ("Loose DTD".equals(argCheck)) {
            return true;
        }
        // No.7
        // 説明:(DTD) Frameset DTD のもの。
        if ("Frameset DTD".equals(argCheck)) {
            return true;
        }
        return false;
    }

    /**
     * 文字列グループに含まれる文字列であるかどうかを、大文字小文字を区別せず判定します。
     *
     * @param argCheck チェックを行いたい文字列。
     * @return 文字列グループに含まれていればture。グループに含まれない文字列であればfalse。
     */
    public boolean matchIgnoreCase(final String argCheck) {
        // No.1
        // 説明:(全般) 仕様の資料上に特に記載のないもの。
        if ("-".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.2
        // 説明:(Start Tag)(End Tag) Start Tag や End Tag においてオプションであるもの。
        if ("Optional".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.3
        // 説明:(End Tag) End Tag において利用が禁じられているもの。
        if ("Forbidden".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.4
        // 説明:空のエレメントであるもの。<BR>など。
        if ("Empty".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.5
        // 説明:使用が非推奨のもの。
        if ("Deprecated".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.6
        // 説明:(DTD) Loose DTD のもの。
        if ("Loose DTD".equalsIgnoreCase(argCheck)) {
            return true;
        }
        // No.7
        // 説明:(DTD) Frameset DTD のもの。
        if ("Frameset DTD".equalsIgnoreCase(argCheck)) {
            return true;
        }
        return false;
    }

    /**
     * 文字列から定数に変換します。
     *
     * 定数が未定義の場合や 与えられた文字列が文字列グループ外の場合には NOT_DEFINED を戻します。
     *
     * @param argCheck 変換を行いたい文字列。
     * @return 定数に変換後の値。
     */
    public int convertToInt(final String argCheck) {
        // No.1
        // 説明:(全般) 仕様の資料上に特に記載のないもの。
        if ("-".equals(argCheck)) {
            return DEFAULT;
        }
        // No.2
        // 説明:(Start Tag)(End Tag) Start Tag や End Tag においてオプションであるもの。
        if ("Optional".equals(argCheck)) {
            return OPTIONAL;
        }
        // No.3
        // 説明:(End Tag) End Tag において利用が禁じられているもの。
        if ("Forbidden".equals(argCheck)) {
            return FORBIDDEN;
        }
        // No.4
        // 説明:空のエレメントであるもの。<BR>など。
        if ("Empty".equals(argCheck)) {
            return EMPTY;
        }
        // No.5
        // 説明:使用が非推奨のもの。
        if ("Deprecated".equals(argCheck)) {
            return DEPRECATED;
        }
        // No.6
        // 説明:(DTD) Loose DTD のもの。
        if ("Loose DTD".equals(argCheck)) {
            return LOOSE_DTD;
        }
        // No.7
        // 説明:(DTD) Frameset DTD のもの。
        if ("Frameset DTD".equals(argCheck)) {
            return FRAMESET_DTD;
        }

        // 該当する定数が見つかりませんでした。
        return NOT_DEFINED;
    }

    /**
     * 定数から文字列に変換します。
     *
     * 定数と対応づく文字列に変換します。
     *
     * @param argCheck 変換を行いたい文字定数。
     * @return 文字列に変換後の値。NOT_DEFINEDの場合には長さ0の文字列。
     */
    public String convertToString(final int argCheck) {
        // No.1
        // 説明:(全般) 仕様の資料上に特に記載のないもの。
        if (argCheck == DEFAULT) {
            return "-";
        }
        // No.2
        // 説明:(Start Tag)(End Tag) Start Tag や End Tag においてオプションであるもの。
        if (argCheck == OPTIONAL) {
            return "Optional";
        }
        // No.3
        // 説明:(End Tag) End Tag において利用が禁じられているもの。
        if (argCheck == FORBIDDEN) {
            return "Forbidden";
        }
        // No.4
        // 説明:空のエレメントであるもの。<BR>など。
        if (argCheck == EMPTY) {
            return "Empty";
        }
        // No.5
        // 説明:使用が非推奨のもの。
        if (argCheck == DEPRECATED) {
            return "Deprecated";
        }
        // No.6
        // 説明:(DTD) Loose DTD のもの。
        if (argCheck == LOOSE_DTD) {
            return "Loose DTD";
        }
        // No.7
        // 説明:(DTD) Frameset DTD のもの。
        if (argCheck == FRAMESET_DTD) {
            return "Frameset DTD";
        }
        // 未定義。
        if (argCheck == NOT_DEFINED) {
            return "";
        }

        // いずれにも該当しませんでした。
        throw new IllegalArgumentException("与えられた値(" + argCheck + ")は文字列グループ[BlancoHtmlElementSpecType]では定義されない値です。");
    }
}
