package com.android_mvc.framework.controller.validation;
import android.app.Activity;
import com.android_mvc.framework.controller.routing.Router;
import com.android_mvc.framework.ui.UIUtil;
/**
* 一つのコントロールフロー内でバリデーション操作を実行するクラス
*/
public abstract class ValidationExecutor
{
// バリデーション実行結果
public ValidationResult validation_result;
// バリデ失敗時に遷移元となる画面
public Activity from_activity;
// --------- コアな挙動
/**
* ユーザ側で,具体的なバリデーション処理呼び出しを記述する。
*/
public abstract ValidationResult doValidate();
/**
* ユーザ側で,バリデーション失敗時の挙動を記述する。
*/
public abstract void onValidationFailed();
/**
* バリデーションを実行して,実行結果を保持する。
*/
public void execAndStoreValidationResult() {
this.validation_result = doValidate();
}
// --------- エラーメッセージの通知
/**
* バリデ失敗を新画面上で通知する。
* デフォルトの通知方法はToastだが,処理内容を変更したい場合は,匿名クラス宣言時に上書きすること。
*/
protected void showErrMessages()
{
UIUtil.longToast((Activity)from_activity, getAllErrMsgs() );
}
/**
* 全エラーメッセージを取得する。
*/
protected String getAllErrMsgs()
{
return this.validation_result.getAllErrMsgs();
}
// --------- 画面遷移
/**
* バリデーション失敗時にも,同一画面内にとどまる。
* デフォルトの挙動だが,このメソッドを呼び出すことで,画面遷移の仕様を明示的に記述できる。
*/
protected void stayInThisPage()
{
// nop
}
/**
* バリデーション失敗時に,特定の画面へ遷移する。
*/
protected void goOnValidationFailed( Class<? extends Activity> to_activity )
{
Router.goWhenValidationFailed(
from_activity,
to_activity,
this.validation_result
);
}
}