(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の作成です。