/*
 * This code is generated by blanco Framework.
 * Apache Antタスク [BlancoDocListingCombineXmlDb]の抽象親クラス
 */
package blanco.doclisting.task;

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

/**
 * Apache Antタスク [BlancoDocListingCombineXmlDb]の抽象親クラス。
 *
 * SQL定義書のドキュメント一覧の中間XMLファイルを作成するタスクです。<br>
 * この抽象親クラスでは、Apache Antタスクで一般的に必要なチェックなどのコーディングを肩代わりします。
 * このクラスを継承して、パッケージ[blanco.doclisting.task]にBlancoDocListingCombineXmlDbTaskクラスを作成してください。そしてAntタスクの処理内容を記述してください。<br>
 * <br>
 * Antタスクへの組み込み例<br>
 * <pre>
 * &lt;taskdef name=&quot;blancodoclistingcombinexmldb&quot; classname=&quot;blanco.doclisting.task.BlancoDocListingCombineXmlDbTask">
 *     &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 abstract class AbstractBlancoDocListingCombineXmlDbTask extends Task {
    /**
     * Antタスクの[inputdir]アトリビュート<br>
     * 項目番号: 1<br>
     * 入力元フォルダを指定します。無指定の場合には、カレント直下のtmp/db/sqlを用います。<br>
     */
    private String fInputdir;

    /**
     * Antタスクの[outputdir]アトリビュート<br>
     * 項目番号: 2<br>
     * 出力先となるフォルダ。無指定の場合には、カレント直下のtmp/doclistingを用います。<br>
     */
    private String fOutputdir;

    /**
     * Antタスクの[basepackage]アトリビュート<br>
     * 項目番号: 3<br>
     * 基準パッケージを指定します。<br>
     * 必須項目<br>
     */
    private String fBasepackage;

    /**
     * Antタスクの[runtimepackage]アトリビュート<br>
     * 項目番号: 4<br>
     * ランタイムパッケージを指定します。無指定の場合には basepackageが利用されます。<br>
     */
    private String fRuntimepackage;

    /**
     * Antタスクの[inputdir]アトリビュートのセッターメソッド<br>
     * 項目番号: 1<br>
     * 入力元フォルダを指定します。無指定の場合には、カレント直下のtmp/db/sqlを用います。<br>
     *
     * @param arg セットしたい値
     */
    public void setInputdir(final String arg) {
        fInputdir = arg;
    }

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

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

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

    /**
     * Antタスクの[basepackage]アトリビュートのセッターメソッド<br>
     * 項目番号: 3<br>
     * 基準パッケージを指定します。<br>
     *
     * @param arg セットしたい値
     */
    public void setBasepackage(final String arg) {
        fBasepackage = arg;
    }

    /**
     * Antタスクの[basepackage]アトリビュートのゲッターメソッド<br>
     * 項目番号: 3<br>
     * 基準パッケージを指定します。<br>
     * 必須アトリビュートです。Apache Antタスク上で必ず値が指定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getBasepackage() {
        return fBasepackage;
    }

    /**
     * Antタスクの[runtimepackage]アトリビュートのセッターメソッド<br>
     * 項目番号: 4<br>
     * ランタイムパッケージを指定します。無指定の場合には basepackageが利用されます。<br>
     *
     * @param arg セットしたい値
     */
    public void setRuntimepackage(final String arg) {
        fRuntimepackage = arg;
    }

    /**
     * Antタスクの[runtimepackage]アトリビュートのゲッターメソッド<br>
     * 項目番号: 4<br>
     * ランタイムパッケージを指定します。無指定の場合には basepackageが利用されます。<br>
     *
     * @return このフィールドの値
     */
    public String getRuntimepackage() {
        return fRuntimepackage;
    }

    /**
     * 実際のAntTaskの処理について、このメソッドをオーバーライドします。
     *
     * @throws IllegalArgumentException 引数や入出力などについて例外が発生した場合。
     */
    protected abstract void process() throws IllegalArgumentException;

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

        // 項目番号[3]、アトリビュート[basepackage]は必須入力です。入力チェックを行います。
        if (getBasepackage() == null) {
            throw new BuildException("アトリビュート[basepackage]が設定されていません。処理を中断します。");
        }
        // 項目番号[1]、アトリビュート[inputdir]にはデフォルトが設定されています。入力がnullの場合にはデフォルト値をセットします。
        if (getInputdir() == null) {
            setInputdir("tmp/db/sql");
        }
        // 項目番号[2]、アトリビュート[outputdir]にはデフォルトが設定されています。入力がnullの場合にはデフォルト値をセットします。
        if (getOutputdir() == null) {
            setOutputdir("tmp/doclisting");
        }
        try {
            // 実際のAntタスクの主処理を実行します。
            process();
        } catch (IllegalArgumentException e) {
            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());
        }
    }
}
