package com.android_mvc.sample_project.domain; import android.app.Activity; import com.android_mvc.sample_project.activities.func_db.DBEditActivity; import com.android_mvc.sample_project.db.dao.FriendDAO; import com.android_mvc.sample_project.db.entity.Friend; import com.android_mvc.framework.controller.action.ActionResult; import com.android_mvc.framework.controller.action.BaseAction; import com.android_mvc.framework.controller.validation.ActivityParams; import com.android_mvc.framework.ui.UIUtil; /** * DB登録に関するBL。 * @author id:language_and_engineering * */ public class DBEditAction extends BaseAction { private DBEditActivity activity; public DBEditAction(DBEditActivity activity) { this.activity = activity; } // BL本体 @Override public ActionResult exec() { ActivityParams params = activity.toParams(); // 登録用の値を取得(バリデ通過済み) String name = (String)params.getValue("name"); Integer age = Integer.valueOf((String)params.getValue("age")); Boolean favorite_flag = (Boolean)params.getValue("favorite_flag"); // DB登録(すでに非同期でラップされているので,DB操作も同期的でよい) Friend f = new FriendDAO(activity).create( name, age, favorite_flag ); // 実行結果を返す return new DBEDitActionResult() .setRouteId("success") .add("new_friend_name", f.getName()) .add("new_friend_obj", f) ; } // 実行結果オブジェクト static class DBEDitActionResult extends ActionResult { private static final long serialVersionUID = 1L; @Override public void onNextActivityStarted(final Activity activity) { UIUtil.longToast(activity, get("new_friend_name") + "さんを登録しました。"); } } // NOTE: この内部クラスは,execメソッド中で匿名クラスとして定義することができない。 // staticな内部クラスとして実装する必要がある。 // 理由は,JavaのインナークラスとSerializableの仕様のため。 // @see http://d.hatena.ne.jp/language_and_engineering/20120313/p1 }