package com.adobe.cairngorm.samples.dashboard.command
{
    import com.adobe.cairngorm.business.Responder;
    import com.adobe.cairngorm.commands.Command;
    import com.adobe.cairngorm.control.CairngormEvent;
    import com.adobe.cairngorm.samples.dashboard.business.StockMarketDelegate;
    import com.adobe.cairngorm.samples.dashboard.events.GetStockQuoteEvent;
    import com.adobe.cairngorm.samples.dashboard.model.ModelLocator;
    import com.adobe.cairngorm.samples.dashboard.model.StockTransaction;
    import com.adobe.cairngorm.samples.dashboard.model.StockQuote

    public class GetStockQuoteCommand implements Command, Responder
    {
        private var model : ModelLocator = ModelLocator.getInstance();
         private var stockTransaction : StockTransaction;
              
         public function execute( event : CairngormEvent ) : void
       {
          stockTransaction = model.stockTransaction;
          stockTransaction.stockQuote.isPending = true;
          
           var stockQuoteEvent : GetStockQuoteEvent = GetStockQuoteEvent( event );          
          var symbol : String = stockQuoteEvent.symbol;
          var delegate : StockMarketDelegate = new StockMarketDelegate( this );
          delegate.getQuoteForSymbol( symbol );    
       }
        
       public function onResult( event : * = null ) : void
       {
            //for demo purpose: event would normally be an event object of remote service result.
            stockTransaction.stockQuote.lastStockQuote = event as Number;            
            stockTransaction.stockQuote.isPending = false;
            stockTransaction.status = StockQuote.SUCCESS;
       }
        
       public function onFault( event : * = null ) : void
       {
          stockTransaction.stockQuote.lastStockQuote = NaN;
           stockTransaction.status = StockQuote.ERROR;
           stockTransaction.stockQuote.isPending = false;           
       }
    }
}