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

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

import blanco.omegat.util.task.valueobject.BlancoOmegatTranslateXliffProcessInput;

/**
 * Apache Antタスク [BlancoOmegatTranslateXliff]のクラス。
 *
 * OmegaT を使って OASIS XLIFF を翻訳するためのAntTaskです。<br>
 * このクラスでは、Apache Antタスクで一般的に必要なチェックなどのコーディングを肩代わりします。
 * 実際の処理は パッケージ[blanco.omegat.util.task]にBlancoOmegatTranslateXliffBatchProcessクラスを作成して記述してください。<br>
 * <br>
 * Antタスクへの組み込み例<br>
 * <pre>
 * &lt;taskdef name=&quot;blancoomegattranslatexliff&quot; classname=&quot;blanco.omegat.util.task.BlancoOmegatTranslateXliffTask">
 *     &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 BlancoOmegatTranslateXliffTask extends Task {
    /**
     * OmegaT を使って OASIS XLIFF を翻訳するためのAntTaskです。
     */
    protected BlancoOmegatTranslateXliffProcessInput fInput = new BlancoOmegatTranslateXliffProcessInput();

    /**
     * フィールド [tmxdir] に値がセットされたかどうか。
     */
    protected boolean fIsFieldTmxdirProcessed = false;

    /**
     * フィールド [xliffdir] に値がセットされたかどうか。
     */
    protected boolean fIsFieldXliffdirProcessed = false;

    /**
     * フィールド [xlifffile] に値がセットされたかどうか。
     */
    protected boolean fIsFieldXlifffileProcessed = false;

    /**
     * フィールド [tool-id] に値がセットされたかどうか。
     */
    protected boolean fIsFieldToolIdProcessed = false;

    /**
     * フィールド [origin] に値がセットされたかどうか。
     */
    protected boolean fIsFieldOriginProcessed = false;

    /**
     * フィールド [skipiftargetexist] に値がセットされたかどうか。
     */
    protected boolean fIsFieldSkipiftargetexistProcessed = false;

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

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

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

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

    /**
     * Antタスクの[xliffdir]アトリビュートのセッターメソッド。
     *
     * 項目番号: 2<br>
     * 入力・出力先となる OASIS XLIFF ファイルが格納されるディレクトリ。xlifffileと排他利用。<br>
     *
     * @param arg セットしたい値
     */
    public void setXliffdir(final String arg) {
        fInput.setXliffdir(arg);
        fIsFieldXliffdirProcessed = true;
    }

    /**
     * Antタスクの[xliffdir]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 2<br>
     * 入力・出力先となる OASIS XLIFF ファイルが格納されるディレクトリ。xlifffileと排他利用。<br>
     *
     * @return このフィールドの値
     */
    public String getXliffdir() {
        return fInput.getXliffdir();
    }

    /**
     * Antタスクの[xlifffile]アトリビュートのセッターメソッド。
     *
     * 項目番号: 3<br>
     * 入力・出力先となる OASIS XLIFF ファイル。xliffdir と排他利用。<br>
     *
     * @param arg セットしたい値
     */
    public void setXlifffile(final String arg) {
        fInput.setXlifffile(arg);
        fIsFieldXlifffileProcessed = true;
    }

    /**
     * Antタスクの[xlifffile]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 3<br>
     * 入力・出力先となる OASIS XLIFF ファイル。xliffdir と排他利用。<br>
     *
     * @return このフィールドの値
     */
    public String getXlifffile() {
        return fInput.getXlifffile();
    }

    /**
     * Antタスクの[tool-id]アトリビュートのセッターメソッド。
     *
     * 項目番号: 4<br>
     * ツールID。<br>
     *
     * @param arg セットしたい値
     */
    public void setToolId(final String arg) {
        fInput.setToolId(arg);
        fIsFieldToolIdProcessed = true;
    }

    /**
     * Antタスクの[tool-id]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 4<br>
     * ツールID。<br>
     * デフォルト値[omegat]が設定されています。Apache Antタスク上でアトリビュートの指定が無い場合には、デフォルト値が設定されます。<br>
     *
     * @return このフィールドの値
     */
    public String getToolId() {
        return fInput.getToolId();
    }

    /**
     * Antタスクの[origin]アトリビュートのセッターメソッド。
     *
     * 項目番号: 5<br>
     * 翻訳メモリの出所。<br>
     *
     * @param arg セットしたい値
     */
    public void setOrigin(final String arg) {
        fInput.setOrigin(arg);
        fIsFieldOriginProcessed = true;
    }

    /**
     * Antタスクの[origin]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 5<br>
     * 翻訳メモリの出所。<br>
     *
     * @return このフィールドの値
     */
    public String getOrigin() {
        return fInput.getOrigin();
    }

    /**
     * Antタスクの[skipiftargetexist]アトリビュートのセッターメソッド。
     *
     * 項目番号: 6<br>
     * targetが既にある場合に処理をスキップするかどうか。<br>
     *
     * @param arg セットしたい値
     */
    public void setSkipiftargetexist(final boolean arg) {
        fInput.setSkipiftargetexist(arg);
        fIsFieldSkipiftargetexistProcessed = true;
    }

    /**
     * Antタスクの[skipiftargetexist]アトリビュートのゲッターメソッド。
     *
     * 項目番号: 6<br>
     * targetが既にある場合に処理をスキップするかどうか。<br>
     * デフォルト値[false]が設定されています。Apache Antタスク上でアトリビュートの指定が無い場合には、デフォルト値が設定されます。<br>
     *
     * @return このフィールドの値
     */
    public boolean getSkipiftargetexist() {
        return fInput.getSkipiftargetexist();
    }

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

        // 項目番号[1]、アトリビュート[tmxdir]は必須入力です。入力チェックを行います。
        if (fIsFieldTmxdirProcessed == false) {
            throw new BuildException("必須アトリビュート[tmxdir]が設定されていません。処理を中断します。");
        }

        if (getVerbose()) {
            System.out.println("- verbose:[true]");
            System.out.println("- tmxdir:[" + getTmxdir() + "]");
            System.out.println("- xliffdir:[" + getXliffdir() + "]");
            System.out.println("- xlifffile:[" + getXlifffile() + "]");
            System.out.println("- tool-id:[" + getToolId() + "]");
            System.out.println("- origin:[" + getOrigin() + "]");
            System.out.println("- skipiftargetexist:[" + getSkipiftargetexist() + "]");
        }

        try {
            // 実際のAntタスクの主処理を実行します。
            // この箇所でコンパイルエラーが発生する場合、BlancoOmegatTranslateXliffProcessインタフェースを実装して blanco.omegat.util.taskパッケージに BlancoOmegatTranslateXliffProcessImplクラスを作成することにより解決できる場合があります。
            final BlancoOmegatTranslateXliffProcess proc = new BlancoOmegatTranslateXliffProcessImpl();
            if (proc.execute(fInput) != BlancoOmegatTranslateXliffBatchProcess.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());
        }
    }
}
