/*
 * このソースコードは blanco Frameworkによって自動生成されています。
 * Apache Antタスク [BlancoIBatisSqlMap2Row]のクラス
 */
package blanco.ibatis.task;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import blanco.ibatis.task.valueobject.BlancoIBatisSqlMap2RowProcessInput;

/**
 * Apache Antタスク [BlancoIBatisSqlMap2Row]のクラス。
 *
 * IBaits の sqlMap から Row を自動生成するための AntTaskです。<br>
 * このクラスでは、Apache Antタスクで一般的に必要なチェックなどのコーディングを肩代わりします。
 * 実際の処理は パッケージ[blanco.ibatis.task]にBlancoIBatisSqlMap2RowBatchProcessクラスを作成して記述してください。<br>
 * <br>
 * Antタスクへの組み込み例<br>
 * <pre>
 * &lt;taskdef name=&quot;blancoibatissqlmap2row&quot; classname=&quot;blanco.ibatis.task.BlancoIBatisSqlMap2RowTask">
 *     &lt;classpath&gt;
 *         &lt;fileset dir=&quot;lib&quot; includes=&quot;*.jar&quot; /&gt;
 *         &lt;fileset dir=&quot;lib.ant&quot; includes=&quot;*.jar&quot; /&gt;
 *     &lt;/classpath&gt;
 * &lt;/taskdef&gt;
 * </pre>
 */
public class BlancoIBatisSqlMap2RowTask extends Task {
    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected BlancoIBatisSqlMap2RowProcessInput fInput = new BlancoIBatisSqlMap2RowProcessInput();

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldSourcedirProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldTargetdirProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldTmpdirProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldEncodingProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldJdbcdriverProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldJdbcurlProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldJdbcuserProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldJdbcpasswordProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldPackageProcessed = false;

    /**
     * IBaits の sqlMap から Row を自動生成するための AntTaskです。
     */
    protected boolean fIsFieldIsbindparameterProcessed = false;

    /**
     * verboseモードで動作させるかどうか。
     *
     * @param arg verboseモードで動作させるかどうか。
     */
    public void setVerbose(final boolean arg) {
        fInput.setVerbose(arg);
    }

    /**
     * verboseモードで動作させるかどうか。
     *
     * @return verboseモードで動作させるかどうか。
     */
    public boolean getVerbose() {
        return fInput.getVerbose();
    }

    /**
     * Antタスクの[sourcedir]アトリビュートのセッターメソッド。
     *
     * 項目番号: 1<br>
     * sqlMap ファイルが格納されるディレクトリを指定します。<br>
     *
     * @param arg セットしたい値
     */
    public void setSourcedir(final String arg) {
        fInput.setSourcedir(arg);
        fIsFieldSourcedirProcessed = true;
    }

    /**
     * Antタスクの[sourcedir]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 1<br>
     * sqlMap ファイルが格納されるディレクトリを指定します。<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getSourcedir() {
        return fInput.getSourcedir();
    }

    /**
     * Antタスクの[targetdir]アトリビュートのセッターメソッド。
     *
     * 項目番号: 2<br>
     * 出力先フォルダを指定します。無指定の場合にはカレント直下のblancoを用います。<br>
     *
     * @param arg セットしたい値
     */
    public void setTargetdir(final String arg) {
        fInput.setTargetdir(arg);
        fIsFieldTargetdirProcessed = true;
    }

    /**
     * Antタスクの[targetdir]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 2<br>
     * 出力先フォルダを指定します。無指定の場合にはカレント直下のblancoを用います。<br>
     * デフォルト値[blanco]が設定されています。Apache Antタスク上でアトリビュートの指定が無い場合には、デフォルト値が設定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getTargetdir() {
        return fInput.getTargetdir();
    }

    /**
     * Antタスクの[tmpdir]アトリビュートのセッターメソッド。
     *
     * 項目番号: 3<br>
     * テンポラリフォルダを指定します。無指定の場合には、カレント直下のtmpを用います。<br>
     *
     * @param arg セットしたい値
     */
    public void setTmpdir(final String arg) {
        fInput.setTmpdir(arg);
        fIsFieldTmpdirProcessed = true;
    }

    /**
     * Antタスクの[tmpdir]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 3<br>
     * テンポラリフォルダを指定します。無指定の場合には、カレント直下のtmpを用います。<br>
     * デフォルト値[tmp]が設定されています。Apache Antタスク上でアトリビュートの指定が無い場合には、デフォルト値が設定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getTmpdir() {
        return fInput.getTmpdir();
    }

    /**
     * Antタスクの[encoding]アトリビュートのセッターメソッド。
     *
     * 項目番号: 4<br>
     * 自動生成するソースファイルの文字エンコーディングを指定します。<br>
     *
     * @param arg セットしたい値
     */
    public void setEncoding(final String arg) {
        fInput.setEncoding(arg);
        fIsFieldEncodingProcessed = true;
    }

    /**
     * Antタスクの[encoding]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 4<br>
     * 自動生成するソースファイルの文字エンコーディングを指定します。<br>
     *
     * @return このフィールドの値
     */
    public String getEncoding() {
        return fInput.getEncoding();
    }

    /**
     * Antタスクの[jdbcdriver]アトリビュートのセッターメソッド。
     *
     * 項目番号: 5<br>
     * JDBCドライバ名を指定します。ex. org.postgresql.Driver<br>
     *
     * @param arg セットしたい値
     */
    public void setJdbcdriver(final String arg) {
        fInput.setJdbcdriver(arg);
        fIsFieldJdbcdriverProcessed = true;
    }

    /**
     * Antタスクの[jdbcdriver]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 5<br>
     * JDBCドライバ名を指定します。ex. org.postgresql.Driver<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getJdbcdriver() {
        return fInput.getJdbcdriver();
    }

    /**
     * Antタスクの[jdbcurl]アトリビュートのセッターメソッド。
     *
     * 項目番号: 6<br>
     * JDBC接続先URLを指定します。ex. jdbc:postgresql<br>
     *
     * @param arg セットしたい値
     */
    public void setJdbcurl(final String arg) {
        fInput.setJdbcurl(arg);
        fIsFieldJdbcurlProcessed = true;
    }

    /**
     * Antタスクの[jdbcurl]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 6<br>
     * JDBC接続先URLを指定します。ex. jdbc:postgresql<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getJdbcurl() {
        return fInput.getJdbcurl();
    }

    /**
     * Antタスクの[jdbcuser]アトリビュートのセッターメソッド。
     *
     * 項目番号: 7<br>
     * ex. postgres<br>
     *
     * @param arg セットしたい値
     */
    public void setJdbcuser(final String arg) {
        fInput.setJdbcuser(arg);
        fIsFieldJdbcuserProcessed = true;
    }

    /**
     * Antタスクの[jdbcuser]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 7<br>
     * ex. postgres<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getJdbcuser() {
        return fInput.getJdbcuser();
    }

    /**
     * Antタスクの[jdbcpassword]アトリビュートのセッターメソッド。
     *
     * 項目番号: 8<br>
     *
     * @param arg セットしたい値
     */
    public void setJdbcpassword(final String arg) {
        fInput.setJdbcpassword(arg);
        fIsFieldJdbcpasswordProcessed = true;
    }

    /**
     * Antタスクの[jdbcpassword]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 8<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getJdbcpassword() {
        return fInput.getJdbcpassword();
    }

    /**
     * Antタスクの[package]アトリビュートのセッターメソッド。
     *
     * 項目番号: 9<br>
     * Row バリューオブジェクトに付与するパッケージを指定します。<br>
     *
     * @param arg セットしたい値
     */
    public void setPackage(final String arg) {
        fInput.setPackage(arg);
        fIsFieldPackageProcessed = true;
    }

    /**
     * Antタスクの[package]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 9<br>
     * Row バリューオブジェクトに付与するパッケージを指定します。<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getPackage() {
        return fInput.getPackage();
    }

    /**
     * Antタスクの[isbindparameter]アトリビュートのセッターメソッド。
     *
     * 項目番号: 10<br>
     * パラメータをバインドするかどうか。バインドしなくても動作するのであれば false の利用が望ましい。しかしバインドしないと動作しない JDBC ドライバがあり、その場合には true に設定する必要がある。<br>
     *
     * @param arg セットしたい値
     */
    public void setIsbindparameter(final boolean arg) {
        fInput.setIsbindparameter(arg);
        fIsFieldIsbindparameterProcessed = true;
    }

    /**
     * Antタスクの[isbindparameter]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 10<br>
     * パラメータをバインドするかどうか。バインドしなくても動作するのであれば false の利用が望ましい。しかしバインドしないと動作しない JDBC ドライバがあり、その場合には true に設定する必要がある。<br>
     * デフォルト値[false]が設定されています。Apache Antタスク上でアトリビュートの指定が無い場合には、デフォルト値が設定されます。<br>
     *
     * @return このフィールドの値
     */
    public boolean getIsbindparameter() {
        return fInput.getIsbindparameter();
    }

    /**
     * Antタスクのメイン処理。Apache Antから このメソッドが呼び出されます。
     *
     * @throws BuildException タスクとしての例外が発生した場合。
     */
    public final void execute() throws BuildException {
        System.out.println("BlancoIBatisSqlMap2RowTask begin.");

        // 項目番号[1]、アトリビュート[sourcedir]は必須入力です。入力チェックを行います。
        if (fIsFieldSourcedirProcessed == false) {
            throw new BuildException("必須アトリビュート[sourcedir]が設定されていません。処理を中断します。");
        }
        // 項目番号[5]、アトリビュート[jdbcdriver]は必須入力です。入力チェックを行います。
        if (fIsFieldJdbcdriverProcessed == false) {
            throw new BuildException("必須アトリビュート[jdbcdriver]が設定されていません。処理を中断します。");
        }
        // 項目番号[6]、アトリビュート[jdbcurl]は必須入力です。入力チェックを行います。
        if (fIsFieldJdbcurlProcessed == false) {
            throw new BuildException("必須アトリビュート[jdbcurl]が設定されていません。処理を中断します。");
        }
        // 項目番号[7]、アトリビュート[jdbcuser]は必須入力です。入力チェックを行います。
        if (fIsFieldJdbcuserProcessed == false) {
            throw new BuildException("必須アトリビュート[jdbcuser]が設定されていません。処理を中断します。");
        }
        // 項目番号[8]、アトリビュート[jdbcpassword]は必須入力です。入力チェックを行います。
        if (fIsFieldJdbcpasswordProcessed == false) {
            throw new BuildException("必須アトリビュート[jdbcpassword]が設定されていません。処理を中断します。");
        }
        // 項目番号[9]、アトリビュート[package]は必須入力です。入力チェックを行います。
        if (fIsFieldPackageProcessed == false) {
            throw new BuildException("必須アトリビュート[package]が設定されていません。処理を中断します。");
        }

        if (getVerbose()) {
            System.out.println("- verbose:[true]");
            System.out.println("- sourcedir:[" + getSourcedir() + "]");
            System.out.println("- targetdir:[" + getTargetdir() + "]");
            System.out.println("- tmpdir:[" + getTmpdir() + "]");
            System.out.println("- encoding:[" + getEncoding() + "]");
            System.out.println("- jdbcdriver:[" + getJdbcdriver() + "]");
            System.out.println("- jdbcurl:[" + getJdbcurl() + "]");
            System.out.println("- jdbcuser:[" + getJdbcuser() + "]");
            System.out.println("- jdbcpassword:[" + getJdbcpassword() + "]");
            System.out.println("- package:[" + getPackage() + "]");
            System.out.println("- isbindparameter:[" + getIsbindparameter() + "]");
        }

        try {
            // 実際のAntタスクの主処理を実行します。
            // この箇所でコンパイルエラーが発生する場合、BlancoIBatisSqlMap2RowProcessインタフェースを実装して blanco.ibatis.taskパッケージに BlancoIBatisSqlMap2RowProcessImplクラスを作成することにより解決できる場合があります。
            final BlancoIBatisSqlMap2RowProcess proc = new BlancoIBatisSqlMap2RowProcessImpl();
            if (proc.execute(fInput) != BlancoIBatisSqlMap2RowBatchProcess.END_SUCCESS) {
                throw new BuildException("タスクは異常終了しました。");
            }
        } catch (IllegalArgumentException e) {
            if (getVerbose()) {
                e.printStackTrace();
            }
            throw new BuildException(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            throw new BuildException("タスクを処理中に例外が発生しました。処理を中断します。" + e.toString());
        } catch (Error e) {
            e.printStackTrace();
            throw new BuildException("タスクを処理中にエラーが発生しました。処理を中断します。" + e.toString());
        }
    }
}
