(23)【Commandの作成】
アドレス帳サンプルアプリの続きです。
では、今回はCommandを作成します。
検索、登録、修正、削除の4コマンドクラスを作成します。
登録、修正、削除に関しては、各処理を実行した後に、一覧表を再描画させるので、SequenceCommandを継承します。
■1.検索コマンドの作成
AddressSelectCommandクラスを作成します。
package command { import business.AddressLogic; import com.adobe.cairngorm.commands.ICommand; import com.adobe.cairngorm.control.CairngormEvent; import event.AddressSelectEvent; import model.AddressModelLocator; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.rpc.IResponder; import vo.Address; /** * 検索コマンド。 */ public class AddressSelectCommand implements ICommand,IResponder{ public var model:AddressModelLocator = AddressModelLocator.getInstance(); /** * 実行 */ public function execute(cairngormEvent:CairngormEvent):void{ var addressEvent:AddressSelectEvent = cairngormEvent as AddressSelectEvent; var logic:AddressLogic = new AddressLogic(this); logic.select(); } /** * 実行結果 */ public function result(data:Object):void{ var retObj:ArrayCollection = data.token.result as ArrayCollection; this.model.addressList.removeAll(); for ( var i: Number = 0; i < retObj.length; i++ ){ var dto:Address = new Address; dto.addressid = retObj[i].addressid; dto.address = retObj[i].address; dto.name = retObj[i].name; dto.telno = retObj[i].telno; this.model.addressList.addItemAt(dto, i); } } /** * 実行失敗 */ public function fault(info:Object):void{ // todo Alert.show('失敗', 'Fault'); } } }
■2.登録コマンドの作成
AddressInsertCommandクラスを作成します。
package command { import business.AddressLogic; import com.adobe.cairngorm.commands.SequenceCommand; import com.adobe.cairngorm.control.CairngormEvent; import event.AddressInsertEvent; import event.AddressSelectEvent; import model.AddressModelLocator; import mx.controls.Alert; import mx.rpc.IResponder; import vo.Address; /** * 登録コマンド。 */ public class AddressInsertCommand extends SequenceCommand implements IResponder{ public var model:AddressModelLocator = AddressModelLocator.getInstance(); /** * 実行 */ public override function execute(cairngormEvent:CairngormEvent):void{ var addressEvent :AddressInsertEvent = cairngormEvent as AddressInsertEvent; var logic :AddressLogic = new AddressLogic(this); logic.insert(addressEvent.dto); } /** * 実行結果 */ public function result(data:Object):void{ var buff:String = String(data.token.result); this.model.message = buff+"件登録しました"; if ( buff == "1" ){ executeNextCommand(); } } /** * 実行失敗 */ public function fault(info:Object):void{ Alert.show('Insert失敗', 'Fault'); } /** * 次のコマンド呼び出し */ public override function executeNextCommand():void{ var dto : Address = new Address(); // 検索イベント送出 var selectEvent : AddressSelectEvent = new AddressSelectEvent(dto); nextEvent = selectEvent; super.executeNextCommand(); nextEvent = null; } } }
■3.修正コマンドの作成
AddressUpdateCommandクラスを作成します。
package command { import business.AddressLogic; import com.adobe.cairngorm.commands.SequenceCommand; import com.adobe.cairngorm.control.CairngormEvent; import event.AddressSelectEvent; import event.AddressUpdateEvent; import model.AddressModelLocator; import mx.controls.Alert; import mx.rpc.IResponder; import vo.Address; /** * 修正コマンド。 */ public class AddressUpdateCommand extends SequenceCommand implements IResponder{ public var model:AddressModelLocator = AddressModelLocator.getInstance(); /** * 実行 */ public override function execute(cairngormEvent:CairngormEvent):void{ var addressEvent:AddressUpdateEvent = cairngormEvent as AddressUpdateEvent; var logic:AddressLogic = new AddressLogic(this); logic.update(addressEvent.dto); } /** * 実行結果 */ public function result(data:Object):void{ var buff:String = String(data.token.result); this.model.message = buff+"件更新しました"; if ( buff == "1" ){ executeNextCommand(); } } /** * 実行失敗 */ public function fault(info:Object):void{ Alert.show('失敗', 'Fault'); } /** * 次のコマンド呼び出し */ public override function executeNextCommand():void{ var dto : Address = new Address(); // 検索イベント送出 var selectEvent : AddressSelectEvent = new AddressSelectEvent(dto); nextEvent = selectEvent; super.executeNextCommand(); nextEvent = null; } } }
■4.削除コマンドの作成
AddressRemoveCommandクラスを作成します。
package command { import business.AddressLogic; import com.adobe.cairngorm.commands.SequenceCommand; import com.adobe.cairngorm.control.CairngormEvent; import event.AddressRemoveEvent; import event.AddressSelectEvent; import model.AddressModelLocator; import mx.controls.Alert; import mx.rpc.IResponder; import vo.Address; /** * 削除コマンド。 */ public class AddressRemoveCommand extends SequenceCommand implements IResponder{ public var model:AddressModelLocator = AddressModelLocator.getInstance(); /** * 実行 */ public override function execute(cairngormEvent:CairngormEvent):void{ var addressEvent:AddressRemoveEvent = cairngormEvent as AddressRemoveEvent; var logic:AddressLogic = new AddressLogic(this); logic.remove(addressEvent.dto); } /** * 実行結果 */ public function result(data:Object):void{ var buff:String = String(data.token.result); this.model.message = buff+"件削除しました"; if ( buff == "1" ){ executeNextCommand(); } } /** * 実行失敗 */ public function fault(info:Object):void{ Alert.show('失敗', 'Fault'); } /** * 次のコマンド呼び出し */ public override function executeNextCommand():void{ var dto : Address = new Address(); // 検索イベント送出 var selectEvent : AddressSelectEvent = new AddressSelectEvent(dto); nextEvent = selectEvent; super.executeNextCommand(); nextEvent = null; } } }
次回は、ModelLocatorの作成です。