package com.android_mvc.sample_project.controller; import com.android_mvc.sample_project.activities.func_db.DBEditActivity; import com.android_mvc.sample_project.activities.func_db.DBListActivity; import com.android_mvc.sample_project.activities.func_db.SampleTabHostActivity; import com.android_mvc.sample_project.activities.func_map.SampleMapActivity; import com.android_mvc.sample_project.activities.func_net.HttpNetActivity; import com.android_mvc.sample_project.activities.main.TopActivity; import com.android_mvc.sample_project.db.dao.LocationLogDAO; import com.android_mvc.sample_project.domain.DBDeleteAction; import com.android_mvc.sample_project.domain.DBEditAction; import com.android_mvc.sample_project.domain.DBUpdateAction; import com.android_mvc.framework.controller.BaseController; import com.android_mvc.framework.controller.ControlFlowDetail; import com.android_mvc.framework.controller.action.ActionResult; import com.android_mvc.framework.controller.action.BLExecutor; import com.android_mvc.framework.controller.routing.Router; import com.android_mvc.framework.controller.routing.RoutingTable; import com.android_mvc.framework.controller.routing.TabContentMapping; import com.android_mvc.framework.controller.validation.ValidationResult; import com.android_mvc.framework.controller.validation.ValidationExecutor; /** * DB操作系画面のコントローラ。 * @author id:language_and_engineering * */ public class FuncDBController extends BaseController { /** * DB登録画面からの遷移時 */ public static void submit(final DBEditActivity activity) { new ControlFlowDetail<DBEditActivity>( activity ) .setValidation( new ValidationExecutor(){ @Override public ValidationResult doValidate() { // バリデーション処理 return new FuncDBValidation().validate( activity ); } @Override public void onValidationFailed() { showErrMessages(); // バリデーション失敗時の遷移先 //goOnValidationFailed( DBEditActivity.class ); stayInThisPage(); } }) .setBL( new BLExecutor(){ @Override public ActionResult doAction() { // BL return new DBEditAction( activity ).exec(); } }) .onBLExecuted( // BL実行後の遷移先の一覧 new RoutingTable().map("success", DBListActivity.class ) // onBLExecutedにこれを渡せば,BLの実行結果にかかわらず画面遷移を常に抑止。 //STAY_THIS_PAGE_ALWAYS // BL実行結果が特定の状況のときのみ,画面遷移を抑止することも可能。 //new RoutingTable().map("success", STAY_THIS_PAGE ) ) .setDialogText("お待ちください") .startControl(); ; } /** * DB参照画面からの遷移時 */ public static void submit(final DBListActivity activity, String action_type, final Long friend_id) { if( "BACK_TO_TOP".equals(action_type) ) { // TOPに戻る Router.go(activity, TopActivity.class); } else if( "UPDATE_FAVORITE_FLAG".equals(action_type) ) { // DB更新 new ControlFlowDetail<DBListActivity>( activity ) .setBL( new BLExecutor(){ @Override public ActionResult doAction() { return new DBUpdateAction( activity, friend_id ).exec(); } }) .onBLExecuted( new RoutingTable().map("success", DBListActivity.class ) ) .startControl(); ; } else if( "DELETE_FRIEND".equals(action_type) ) { // DBから削除 new ControlFlowDetail<DBListActivity>( activity ) .setBL( new BLExecutor(){ @Override public ActionResult doAction() { return new DBDeleteAction( activity, friend_id ).exec(); } }) .onBLExecuted( new RoutingTable().map("success", DBListActivity.class ) ) .startControl(); ; } } /** * タブ親サンプル画面から呼び出される子画面のリスト */ public static TabContentMapping getChildActivities(SampleTabHostActivity activity) { // タブのタグ文字列に対応するアクティビティを指定する。 return new TabContentMapping() .add( "TAB_VIEW_DB", DBListActivity.class ) .add( "TAB_EDIT_DB", DBEditActivity.class ) .add( "TAB_FUNC_NET", HttpNetActivity.class ) ; } /** * 最新の位置情報を取得する */ public static void submit(final SampleMapActivity activity) { // DB参照 new ControlFlowDetail<SampleMapActivity>( activity ) .setBL( new BLExecutor(){ @Override public ActionResult doAction() { return new ActionResult() .add("recent_locations", new LocationLogDAO(activity).findAll()) .setRouteId("success") ; } }) .onBLExecuted( STAY_THIS_PAGE_ALWAYS ) .startControl(); ; } }