<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
xmlns:mx="http://www.adobe.com/2006/mxml" 
layout="absolute"
horizontalAlign="center" verticalAlign="middle"
creationComplete="{creationCompleteHandler()}"
viewSourceURL="srcview/index.html"
>
     <mx:RemoteObject showBusyCursor="true" destination="playerDataServiceImpl" source="views" id="views">
         <mx:method name="get" result="{onViewsResult(event)}" fault="{onFault(event)}" />
     </mx:RemoteObject>
     
    <mx:RemoteObject showBusyCursor="true" destination="playerDataServiceImpl" source="system" id="system">
        <mx:method name="connect" result="{onSystemConnect(event)}"  fault="{onFault(event)}" />
    </mx:RemoteObject>
    
    <mx:RemoteObject showBusyCursor="true" destination="playerDataServiceImpl" source="user" id="user">
        <mx:method name="login" result="{onUserLogin(event)}" fault="{onFault(event)}" />
    </mx:RemoteObject>
    
    <mx:RemoteObject showBusyCursor="true" destination="playerDataServiceImpl" source="node" id="node">
        <mx:method name="get" result="{onNodeGet(event)}" fault="{onFault(event)}" />
    </mx:RemoteObject>
 
    <mx:Panel 
    width="800" height="600" 
    title="Execute a Drupal service call by clicking a button below"
    paddingTop="5" paddingLeft="5" paddingBottom="5" paddingRight="5"
    >
        <mx:HBox>
            <mx:Button label="Simple service call" id="simpleServiceButton" click="{simpleServiceButtonClickHandler(event)}" />
            <mx:Button label="Service call with authentication" id="authenticatedServiceButton" click="{authenticatedServiceButtonClickHandler(event)}" />
        </mx:HBox>
        <mx:DataGrid id="ref_dg" dataProvider="{testResult}" width="100%" height="100%">
            <mx:columns>
                <mx:DataGridColumn headerText="NID" dataField="nid" />
                <mx:DataGridColumn headerText="TITLE" dataField="node_title" />
                <mx:DataGridColumn headerText="BODY" dataField="node_revisions_body" />
            </mx:columns>            
        </mx:DataGrid>
    </mx:Panel>

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.utils.ArrayUtil;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            
            //////////////////////////////////////////////////////////////////////////////
            //
            // PROPERTIES
            //
            //////////////////////////////////////////////////////////////////////////////
            
            private var currentStrategy:IStrategy;
            private var simpleCall:SimpleCall;
            private var callWithLogin:CallWithLogin;
            private var _testResult:Array;
            
            //////////////////////////////////////////////////////////////////////////////
            //
            // GETTERS & SETTERS
            //
            //////////////////////////////////////////////////////////////////////////////
            
            public function set testResult(value:Array):void
            {
                _testResult = value;
            }
            
            [Bindable] public function get testResult():Array
            {
                return _testResult;
            }
            
            //////////////////////////////////////////////////////////////////////////////
            //
            // PROTECTEDs / PRIVATEs
            //
            //////////////////////////////////////////////////////////////////////////////
            
            /**
             * Initialization
             * 
             * The strategy is set, a reference to this UI is given as an argument for the
             * implementation to work with.
             */            
            protected function init():void
            {
                simpleCall = new SimpleCall();
                callWithLogin = new CallWithLogin();
            }
            
            protected function doServiceCall(servStrat:IStrategy):void
            {
                currentStrategy = servStrat;
                servStrat.execute(this);
            }
            
            //////////////////////////////////////////////////////////////////////////////
            //
            // EVENT HANDLERS
            //
            //////////////////////////////////////////////////////////////////////////////
            
            private function creationCompleteHandler():void
            {
                init();
            }
            
            private function simpleServiceButtonClickHandler(e:Event):void
            {
                doServiceCall(simpleCall);
            }
            
            private function authenticatedServiceButtonClickHandler(e:Event):void
            {
                doServiceCall(callWithLogin);
            }
            
            private function onViewsResult(event:ResultEvent):void
            {
                testResult = ArrayUtil.toArray(event.result);
            }
                
            private function onFault(event:FaultEvent):void
            {
                Alert.show(event.fault.faultString, "Error");
            }
            
            private function onSystemConnect(event:ResultEvent):void
            {
                currentStrategy.onSystemConnect(event); // forwarding the handler
            }
            
            private function onUserLogin(event:ResultEvent):void
            {
                (currentStrategy as CallWithLogin).onUserLogin(event); // forwarding the handler
            }
            
            private function onNodeGet(event:ResultEvent):void
            {
                testResult = [{nid:event.result.nid, node_title:event.result.title, node_revisions_body:event.result.body}];
            }
        ]]>
    </mx:Script>
</mx:Application>