OW2 Consortium telosys

Rev

Blame | Last modification | View Log | RSS feed

//------------------------------------------------------------------------------
// ScreenActions_class.js ( client stub to invoke server actions )
// Telosys framework
// Author  : Laurent Guérin
//------------------------------------------------------------------------------
 
//------------------------------------------------------------------------------
// CLASS DEFINITION
//------------------------------------------------------------------------------
function ScreenActions( paramScreen, paramAsyncFlag )
{
        //==============================================================================
        // PRIVATE CONSTANTS
        //==============================================================================

        var RETRIEVE_NOTHING = 0 ;
        
        var RETRIEVE_ALL     = 1 ;
        
        var NOT_SET   = 0 ;
        var ASYNC     = 1 ;
        var SYNC      = 2 ;
        
        //==============================================================================
        // PRIVATE ATTRIBUTES
        //==============================================================================
        
        var _bTrace      = false ;
        
        var _oScreen     = null ; 
        
        var _iDefaultMode = SYNC ;
        var _iMode        = NOT_SET ;
        
        var _oRequester  = new ScreenActionsXHR(); // The AJAX requester
        
        var _fPermanentCallback = null ; // Permanent external callback function, set to be used each time an action is called
        var _fTemporaryCallback = null ; // Temporary external callback function, set to be used only one time
        
        var _sFlagClear  = null ; // Request Flag "clear"
        var _sFlagSet    = null ; // Request Flag "set"
        var _sFlagGet    = null ; // Request Flag "get"
        
        var _oParameters = new Map();  // The parameters to send in the action request
        
        var _oElements   = new Map() ; // The elements to retrieve 
        
        var _oViews      = new Map() ; // The views to retrieve
        
        var _bUpdateScreen    = true ;
        var _bClearScreen     = true ;
        
        var _sLastRequestURL  = null ;
        var _sLastRequestXML  = null ;
        var _sLastResponseXML = null ;
        
        var _fInternalResponseProcessor = null ;
        
        //==============================================================================
        // PSEUDO CONSTRUCTOR
        //==============================================================================
        if ( paramScreen != null )
        {
                _oScreen = paramScreen ; 
        }
        else
        {
                alert ( "ERROR in ScreenActions constructor : no screen parameter !" );
        }
        
        if ( paramAsyncFlag != null )
        {               
                _iDefaultMode = ( paramAsyncFlag == true ? ASYNC : SYNC ) ;
        }
        else
        {
                _iDefaultMode = SYNC ;
        }
        
        //==============================================================================
        // PRIVATE METHODS 
        //==============================================================================
        function _trace ( sMsg ) 
        {
                if ( _bTrace ) alert ( "TRACE [ScreenActions] :\n\n" + sMsg ) ;
        }
        //------------------------------------------------------------------------------
        function _error ( sMsg ) 
        {
                alert ( "ERROR [ScreenActions] :\n\n" + sMsg ) ;
        }
        //------------------------------------------------------------------------------
        // Returns a request with the given action and the parameters to send 
        //------------------------------------------------------------------------------
        this.getRequest = function ( sAction )
        {
                //--- Create a new request 
                var request = new ScreenRequest();
                //--- Init the request 
                request.setScreenName( _oScreen.getScreenName() );
                request.setScreenId  ( _oScreen.getScreenId()   );
                //--- Set the action name ( "get", "set", "load", .. ) 
                if ( sAction )
                {
                        request.setAction(sAction);
                }
                
                //--- Set the action FLAGS in the request
                if ( _sFlagClear != null ) { request.setFlagClear(_sFlagClear) } ;
                if ( _sFlagSet   != null ) { request.setFlagSet  (_sFlagSet)   } ;
                if ( _sFlagGet   != null ) { request.setFlagGet  (_sFlagGet)   } ;
                
                //--- Set the action PARAMETERS in the request
                if ( _oParameters.size() > 0 )
                {
                        var name = null ;
                        var names = _oParameters.keysArray();
                        var n = names.length ;                  
                        // for ( i in names ) // for .. in cannot be used with "prototype.js" 
                        for ( var i = 0 ; i < n ; i++ )
                        {
                                name = names[i] ;
                                request.setParameter(name, _oParameters.get(name) );
                        }
                        //--- Clear the action parameters 
                        _oParameters.clear();
                }               
                return request ;
        }
        
        //------------------------------------------------------------------------------
        function _beforeSend()
        {
                // Clear Flags 
                _sFlagClear  = null ; 
                _sFlagSet    = null ; 
                _sFlagGet    = null ; 
        
                // Clear Parameters, Elements and Views 
                _oParameters.clear();
                _oElements.clear();
                _oViews.clear();                
        }
        //------------------------------------------------------------------------------
        // Response processing used by SYNCHRONOUS and ASYNCHRONOUS calls
        //------------------------------------------------------------------------------
        function _processResponse(response)
        {
                _trace("_processResponse(response)...");
        
                var bResponseProcessed = false ;
                
                //--- 1) Keep last response for debug window
                _sLastResponseXML = response.getResponseText(); 

                //--- 2) Process the response for screen impacts ( using the internal processing if any )
                if ( _fInternalResponseProcessor != null )
                {
                        _fInternalResponseProcessor(response); // call _updateScreen or _clearScreen or _updateScreenAfterDelete
                        _fInternalResponseProcessor = null ; // Just "for once" => unset after use
                }
                                
                //--- 3) Call the screen "developer callback function" if any ( supposed to process response errors )
                if ( _fTemporaryCallback != null )
                {
                        // There's a specific external temporary callback function => use it 
                        _fTemporaryCallback(response) ; 
                        _fTemporaryCallback = null ; // Temporary => Just "for once" => unset after use
                }
                else
                {
                        if ( _fPermanentCallback != null ) // see setPermanentCallback(..)
                        {
                                // There's a specific external permanent callback function (for all actions) => use it 
                                _fPermanentCallback(response) ;
                        }
                        else
                        {
                                // No application callback => Default response error processing
                                if ( response.reportsErrors() )
                                {
                                        if ( typeof window.onTelosysActionError == "function" )
                                        {
                                                // call the application error handler (if any)
                                                window.onTelosysActionError(response);
                                        }
                                        else
                                        {
                                                // by default show all the error messages
                                                response.showAllErrors();
                                        }
                                }
                        }
                }
        }
        //------------------------------------------------------------------------------
        // The callback function called by the XHR object when the response has been 
        // received after an ASYNCHRONOUS call
        //------------------------------------------------------------------------------
        function _ajaxAsynchronousCallback(response)
        {
                //--- 1) Hide the "WAIT" SYMBOL 
                // TODO :  HIDE "WAIT"
                
                //--- 2) Process the response
                _processResponse(response);
        }
        //------------------------------------------------------------------------------
        function _sendRequest(req, applicationCallerFunction, responseProcessor )
        {
                _beforeSend();
                
                if ( _oRequester == null )
                {
                        throw new Error( "ScreenActions._sendRequest() : The AJAX requester is null ! ");
                }
                if ( _oScreen == null )
                {
                        throw new Error( "ScreenActions._sendRequest() : The SCREEN object is null ! ");
                }
                
                _sLastRequestURL = _oScreen.getRequestURL() ;
                _sLastRequestXML = req.getXmlRequest();
                
                // Set the hidden internal response processor to use ( can be null if none )
                _fInternalResponseProcessor = responseProcessor ; // _updateScreen, _clearScreen, _updateScreenAfterDelete or null
                
/***
                _bUpdateScreen = false ;
                if ( bUpdateScreen == null || bUpdateScreen == true )
                {
                        _bUpdateScreen = true ;
                }
***/    
                
                //--- Call mode : SYNC or ASYNC ?
                var iCallMode = _iDefaultMode ;
                if ( _iMode != NOT_SET ) 
                {
                        iCallMode = _iMode ;
                        _iMode = NOT_SET ; // Reset for next call
                }
                
                //--- Use a callback function for post processing ( for SYNC and ASYNC modes )
                if ( _fTemporaryCallback == null ) // not set => use "applicationCallerFunction.callback" if any
                {
                        _fTemporaryCallback = ( applicationCallerFunction != null ? applicationCallerFunction.callback : null ) ;
                }
                
                if ( iCallMode == ASYNC )
                {
                        //--- Send the request with an ASYNCHRONOUS call
                        _oRequester.postAsync ( _sLastRequestXML, _ajaxAsynchronousCallback, _sLastRequestURL );
                                
                        //--- The request is sent => Display the "WAIT SYMBOL"
                        // TODO :  DISPLAY "WAIT"
                        
                        return null ; // ASYNCHRONOUS => No response to return ( just wait the callback processing )
                }
                else
                {
                        //--- No callback function => SYNCHRONOUS call
                        _oRequester.postSync ( _sLastRequestXML, _sLastRequestURL ); // SYNC => wait the response       
                        
                        //--- The responce is here
                        var response = _oRequester.getResponse();
                        
                        _processResponse(response);
                        
                        return response ; // SYNCHRONOUS => Return the response ( for backward compatibility )
                }
        }
        
        //------------------------------------------------------------------------------
        // Set request elements
        //------------------------------------------------------------------------------
        function _setElements(request, elements)
        {
//      alert("_setElements");
                if ( elements != null ) 
                {
                        if ( elements.length == 0 )
                        {
                                //--- No elements => get all the elements of the screen
                                request.setElements(_oScreen.getElementsString());                              
                        }
                        else
                        {
                                //--- Build the elements list
                                var sElementsList = "" ;
                                var iNbElements = 0 ;
                                for ( i=0 ; i < elements.length ; i++ )
                                {
                                        if ( typeof elements[i] == "string" )
                                        {
                                                if ( iNbElements > 0 ) 
                                                {
                                                        sElementsList += ",";
                                                }
                                                sElementsList += elements[i];
                                                iNbElements++;
                                        }
                                }                               
                                //--- Set the given elements list in the request
                                request.setElements(sElementsList);
                        }       
                }
        }       
        
        //------------------------------------------------------------------------------
        // Set a view in the request (with renderer if any)
        //------------------------------------------------------------------------------
/***
        function _setView(request, psViewName, psRenderer )
        {
                var oScreenView = _searchView( psViewName ) ;
                if ( oScreenView != null )
                {
                        if ( psRenderer != null )
                        {
                                request.setView( oScreenView.getName(), psRenderer );
                        }
                        else
                        {
                                request.setView( oScreenView.getName(), oScreenView.getRenderer() );
                        }
                }
        }
***/
        function _setView(request, psViewName, psRenderer ) // v 1.1.0
        {
                if ( request == null ) _error ( "_setView : request parameter is null" ) ;
                if ( psViewName == null ) _error ( "_setView : view name parameter is null" ) ;
                
                if ( psRenderer != null )
                {
                        // A specific renderer is given => just use it
                        request.setView( psViewName, psRenderer ); 
                }
                else
                {
                        // No renderer => get the renderer associated with the view ( supposed to be a registered view )
                        var oScreenView = _searchView( psViewName ) ;
                        if ( oScreenView != null )
                        {
                                request.setView( oScreenView.getName(), oScreenView.getRenderer() );
                        }
                }
        }
        //------------------------------------------------------------------------------
        // Set the given views in the request
        //------------------------------------------------------------------------------
        function _setViews(request, views)
        {
                if ( views != null ) 
                {
                        if ( views.length == 0 )
                        {
                                //--- No views => set all the views of the screen in the request
                                _setAllViews(request);
                        }
                        else
                        {
                                //--- Set the given views in the request
                                for ( i=0 ; i < views.length ; i++ )
                                {
                                        if ( typeof views[i] != "string" )
                                        {
                                                _error( "_setViews() : argument[" + i + "] is not a String ! type = " + typeof views[i] );                                      
                                        }
                                        else
                                        {
                                                var oScreenView = _searchView( views[i] ) ;
                                                if ( oScreenView != null )
                                                {
                                                        request.setView( oScreenView.getName(), oScreenView.getRenderer() );                                            
                                                }
                                        }
                                }                               
                        }       
                }
        }
        //------------------------------------------------------------------------------
        // Set all the views of the screen in the request
        //------------------------------------------------------------------------------
        function _setAllViews(request)
        {
                //--- Set views names if any
                var views = _oScreen.getViews();
                if ( views != null )
                {
                        var oScreenView = null ;                        
                        //--- For each view registered in this screen 
                        for ( var i = 0 ; i < views.length ; i++ )
                        {
                                oScreenView = views[i] ;
                                if ( oScreenView != null )
                                {
                                        request.setView( oScreenView.getName(), oScreenView.getRenderer() );                    
                                }
                                else
                                {
                                        _error( "_setAllViews() : ScreenViews ["+i+"] is null ! " );                                    
                                }
                        }
                }
        }       
        //------------------------------------------------------------------------------
        // Set the elements to retrieve in the request according with the elements list 
        // defined by "setElementToRetrieve()"
        //------------------------------------------------------------------------------
        function _setWhatToRetrieve(request, defaultFlag )
        {
                if ( _oElements == null )
                {
                        _error( "_setWhatToRetrieve() : _oElements is null" );  
                        return;                         
                }
                if ( _oViews == null )
                {
                        _error( "_setWhatToRetrieve() : _oViews is null" );                                     
                        return;                         
                }
                
                if ( _oElements.size() == 0  &&  _oViews.size() == 0 )
                {
                        //--- Nothing specified => Retrieve ALL or NOTHING ( cf Flag ) 
                        if ( defaultFlag == RETRIEVE_ALL )
                        {
                                //--- Retrieve ALL ( everything : elements + views )
                                request.setElements( _oScreen.getElementsString() );
                                _setAllViews(request);
                        }
                        else
                        {
                                //--- Retrieve NOTHING
                                request.setElements( "" ); // No elements
                                // No views
                        }
                }
                else
                {
                        _setElementsToRetrieve(request);
                        _setViewsToRetrieve(request);
                }
        }
        //------------------------------------------------------------------------------
        // Set the elements to retrieve in the request according with the elements list 
        // defined by "setElementToRetrieve()"
        //------------------------------------------------------------------------------
        function _setElementsToRetrieve(request)
        {
                var sElementsList = null ;
                if ( _oElements.size() > 0 )
                {
                        //--- Elements specified
                        sElementsList = _oElements.keysString();
                }
                else
                {
                        ////--- No elements => get all the elements of the screen
                        //sElementsList = _oScreen.getElementsString() ;
                        //--- No elements => Do not get elements
                        sElementsList = "" ;
                }
                request.setElements(sElementsList);
        }
        //------------------------------------------------------------------------------
        //------------------------------------------------------------------------------
        // Set the views to retrieve in the request according with the views list 
        // defined by "setViewToRetrieve()"
        //------------------------------------------------------------------------------
        function _setViewsToRetrieve(request)
        {
                //--- Set the views to retrieve 
                if ( _oViews.size() > 0 )
                {
                        var names = _oViews.keysArray();
                        var n = names.length ;
                        var name = null ;
                        var renderer = null ;
                        for ( var i = 0 ; i < n ; i++ )
                        {
                                name = names[i] ;
                                renderer = _oViews.get(name); // Specific renderer or null for standard renderer
                                _setView(request, name, renderer ) ;                            
                        }
                }
                /** DO NOT GET VIEWS
                else
                {
                        _setAllViews(request);
                }
                **/
        }
        //------------------------------------------------------------------------------
        // Search a view (by name) in the views list of the screen
        //------------------------------------------------------------------------------
        function _searchView(psViewName)
        {
                var views = _oScreen.getViews();
                if ( views != null )
                {
                        var oScreenView = null ;                        
                        //--- For each view registered in this screen 
                        for ( var i = 0 ; i < views.length ; i++ )
                        {
                                oScreenView = views[i] ;
                                if ( oScreenView != null )
                                {
                                        if ( oScreenView.getName() == psViewName )
                                        {
                                                return oScreenView ;
                                        }
                                }
                                else
                                {
                                        _error( "_searchView() : ScreenViews ["+i+"] is null ! " );                                     
                                }
                        }
                        _error( "_searchView() : unknown view '" + psViewName + "' ! " );                                       
                }
                else
                {
                        _error( "_searchView() : no views in this screen ! " );                                 
                }       
                return null;
        }
        //------------------------------------------------------------------------------
        // Internal response processors
        //------------------------------------------------------------------------------
        function _updateScreen ( response ) 
        {
_trace ( "_updateScreen : flag = " + _bUpdateScreen );  
                if ( response.isOK() && _bUpdateScreen )
                {
                        //--- Populate the screen fields and views with XML data recieved
                        _oScreen.XmlToScreen(response);
                }
        }
        //------------------------------------------------------------------------------
        function _clearScreen ( response ) 
        {
_trace ( "_clearScreen : flag = " + _bUpdateScreen );   
                if ( response.isOK() && _bUpdateScreen )
                {
                        //--- Clear the screen
                        _oScreen.clear();
                }
        }
        //------------------------------------------------------------------------------
        function _updateScreenAfterDelete ( response ) 
        {
_trace ( "_updateScreenAfterDelete : _bClearScreen = " + _bClearScreen + "  _bUpdateScreen = " + _bUpdateScreen );      
                if ( response.isOK() )
                {
                        if ( _bClearScreen )
                        {
                                //--- Clear the screen
                                _oScreen.clear();
                        }
                        if ( _bUpdateScreen )
                        {
                                //--- Populate FIELDS and VIEWS 
                                _oScreen.XmlToScreen(response);
                        }
                }
        }
        //==============================================================================
        // PUBLIC / PRIVILEGED  METHODS 
        //==============================================================================
        /**
     * Retuns the Screen instance 
     * @return Object the Screen instance 
     */ 
        this.getScreen = function () 
        {
                return _oScreen ;
        }
        //------------------------------------------------------------------------------
        //   FLAGS
        //------------------------------------------------------------------------------
        this.setTrace = function ( p ) 
        {
                _bTrace = p ;
                _oRequester.setTrace(p);
        }
        //------------------------------------------------------------------------------
        this.doNotClearContextData = function () 
        {
                _sFlagClear = "false" ;
        }
        //------------------------------------------------------------------------------
        this.doNotSetContextData = function () 
        {
                _sFlagSet = "false" ;
        }
        //------------------------------------------------------------------------------
        this.doNotGetContextData = function () 
        {
                _sFlagGet = "false" ;
        }
        
        //------------------------------------------------------------------------------
        this.setModeAsync = function () 
        {
                _iMode = ASYNC ;
        }
        this.setModeSync = function () 
        {
                _iMode = SYNC ;
        }
        //------------------------------------------------------------------------------
        this.setDefaultModeAsync = function () 
        {
                _iDefaultMode = ASYNC ;
        }
        this.setDefaultModeSync = function () 
        {
                _iDefaultMode = SYNC ;
        }
        //------------------------------------------------------------------------------
        this.setPermanentCallback = function ( p ) // v 1.0.5 (replace setDefaultCallback)
        {
                _fPermanentCallback = p ;
        }
        //------------------------------------------------------------------------------
        this.setTemporaryCallback = function ( p ) // v 1.0.5 (replace setCallback)
        {
                _fTemporaryCallback = p ;
        }
        
        //------------------------------------------------------------------------------
        
        //------------------------------------------------------------------------------
        //   PARAMETERS
        //------------------------------------------------------------------------------
        this.setParameter = function (sName, sValue) 
        {
                if ( sName == null )
                {
                        _error ( "setParameter(name,value) : name is null" ) ;
                }
                if ( sValue == null )
                {
                        _error ( "setParameter(name,value) : value is null" ) ;
                }
                _oParameters.put(sName, sValue) ;
        }
        //------------------------------------------------------------------------------
        this.clearParameters = function () 
        {
                _oParameters.clear() ;          
        }
        //------------------------------------------------------------------------------
        this.showParameters = function () 
        {
                _oParameters.show() ;           
        }
        //------------------------------------------------------------------------------
        this.numberOfParameters = function () // v 1.1.0
        {
                return _oParameters.size() ;            
        }
        //------------------------------------------------------------------------------
        //   ELEMENTS TO RETRIEVE
        //------------------------------------------------------------------------------
        this.setElementToRetrieve = function (sElementName) 
        {
                if ( sElementName == null )
                {
                        _error ( "setElementToRetrieve(element_name) : element name is null" ) ;
                }
                _oElements.put(sElementName, null) ; 
        }
        //------------------------------------------------------------------------------
        this.setElementsToRetrieve = function () 
        {
                if ( arguments.length > 0 )
                {
                        for ( var i=0 ; i<arguments.length ; i++ )
                        {
                                _oElements.put(arguments[i], null ) ;
                        }
                }
                else
                {
                        _error ( "setElementsToRetrieve(..) : argument(s) expected !" ) ;
                }
        }
        //------------------------------------------------------------------------------
        this.clearElementsToRetrieve = function () 
        {
                _oElements.clear() ;            
        }
        //------------------------------------------------------------------------------
        this.showElementsToRetrieve = function () 
        {
                _oElements.show() ;             
        }
        //------------------------------------------------------------------------------
        //   VIEWS TO RETRIEVE
        //------------------------------------------------------------------------------
        this.setViewToRetrieve = function (sViewName, sRenderer) 
        {
                if ( sViewName == null )
                {
                        _error ( "setViewToRetrieve(name,renderer) : view name is null" ) ;
                }
                _oViews.put(sViewName, sRenderer) ; // sRenderer can be null ( = default renderer )
                /*
                if ( sRenderer != null )
                {
                        _oViews.put(sViewName, sRenderer) ;
                }
                else
                {
                        _oViews.put(sViewName, "") ;
                        //_error ( "setViewToRetrieve(name,renderer) : renderer is null" ) ;
                }
                */
        }
        //------------------------------------------------------------------------------
        this.setViewsToRetrieve = function () 
        {
                if ( arguments.length > 0 )
                {
                        for ( var i=0 ; i<arguments.length ; i++ )
                        {
                                _oElements.put(arguments[i], null ) ; // default renderer
                        }
                }
                else
                {
                        _error ( "setViewsToRetrieve(..) : arguments expected !" ) ;
                }
        }
        //------------------------------------------------------------------------------
        this.clearViewsToRetrieve = function () 
        {
                _oViews.clear() ;               
        }
        //------------------------------------------------------------------------------
        this.showViewsToRetrieve = function () 
        {
                _oViews.show() ;                
        }
        //------------------------------------------------------------------------------

        //------------------------------------------------------------------------------
        //   A C T I O N S
        //------------------------------------------------------------------------------
        this.doOpen = function () 
        {
                _trace("doOpen()");
                var response = null ;
                try {
                        //--- Build the request 
                        var request = this.getRequest("open") ;
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller );
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doClose = function () 
        {
                _trace("doClose()");
                var response = null ;
                try {
                        //--- Build the request 
                        var request = this.getRequest("close") ;
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller );
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doGetViews = function () 
        {
                _trace("doGetViews()");
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("get") ;
                        //--- Don't want elements => set "elements" to void list
                        request.setElements("");
                        //--- Set views and renderer
                        _setViews(request, arguments);
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        
        //------------------------------------------------------------------------------
        this.doGetView = function ( psViewName, psRenderer ) 
        {
                _trace("doGetView(" + psViewName + "," + psRenderer + ")" );
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("get") ;
                        //--- Don't want elements => set "elements" to void list
                        request.setElements("");
                        //--- Set the given view
                        _setView(request, psViewName, psRenderer ) ;

                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        
        //------------------------------------------------------------------------------
        /**
     * Invokes the standard "GET" action with an elements list
     * @param  Variable list of arguments ( 0 .. N ) 
     *         if the last argument is a boolean it is considered as the update screen flag
     * @return Object  the server response object  
     */ 
        this.doGetElements = function () 
        {
                _trace("doGetElements()");
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("get") ;
                        _setElements(request, arguments);
                        //var bUpdateScreen =_getUpdateScreenFlag(arguments, true);
                        
                        //--- Send the request 
//                      response = _sendRequest(request, arguments.callee.caller, _afterGet, bUpdateScreen );
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                        /***
                        response = _sendRequest(request);
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                        ***/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }

        //------------------------------------------------------------------------------
        /**
     * Invokes the standard "GET" action to get data from the server 
     * Get all the Screen Context elements and all the views
     * @param  boolean true = update the screen, false = no screen update
     * @return Object  the server response object  
     */ 
        this.doGet = function ( bUpdateScreen ) 
        {
                _trace("doGet(" + bUpdateScreen + ")");
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("get") ;

                        //--- Set what to retrieve : elements and/or views ( RETRIEVE_ALL by default )
                        _setWhatToRetrieve(request, RETRIEVE_ALL);

                        //--- Send the request 
//                      response = _sendRequest(request, arguments.callee.caller, _afterGet, bUpdateScreen );
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                /**
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                **/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        /**
     * Invokes the standard "SET" action to update data on the server 
     * Set all the Screen Context elements 
     * @return Object  the server response object  
     */ 
        this.doSet = function ( bUpdateScreen ) 
        {
                _trace("doSet(" + bUpdateScreen + ")");
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : false ) ; // default FALSE
                
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("set") ;
                        
                        var sXmlData = _oScreen.ScreenToXml();
                        request.setData(sXmlData);
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                }
                catch (ex) {
                        _error ( ex.message );
                }                       
                return response ;
        }
        //------------------------------------------------------------------------------
        /**
     * Invokes the standard "CLEAR" action to clear the Screen Context on the server 
     * @param  boolean true = clear the screen fields, false = do not clear the screen fields
     * @return Object  the server response object  
     */ 
        this.doClear = function ( bUpdateScreen ) 
        {
                _trace("doClear(" + bUpdateScreen +")" );
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                var response = null ;
                try {
                        //--- Build the request 
                        var request = this.getRequest("clear") ;                
                        //--- Send the request 
//                      response = _sendRequest(request, arguments.callee.caller, _afterClear, bUpdateScreen );
                        response = _sendRequest(request, arguments.callee.caller, _clearScreen );
                /**
                        response = _sendRequest(request);
                        if ( response.isOK() )
                        {
                                if ( bUpdateScreen == null || bUpdateScreen == true )
                                {
                                        //--- Clear the screen
                                        _oScreen.clear();
                                }
                        }
                **/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        
        //------------------------------------------------------------------------------
        //  LOAD ACTIONS
        //------------------------------------------------------------------------------
        this.doLoadViews = function () 
        {
                _trace("doLoadViews()");
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("load") ;
                        //--- Don't want elements => set "elements" to void list
                        request.setElements("");
                        //--- Set views and renderer
                        _setViews(request, arguments);
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                        /**
                        response = _sendRequest(request);
                        if ( response.isOK() )
                        {
                                if ( response.dataNotFound() != true ) // Data Found
                                {
                                        _oScreen.XmlToScreen(response);
                                }
                        }
                        **/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doLoadView = function ( psViewName, psRenderer ) 
        {
                _trace("doLoadView(" + psViewName + "," + psRenderer + ")");
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {
                        //--- Build the request 
                        var request = this.getRequest("load") ;
                        //--- Don't want elements => set "elements" to void list
                        request.setElements("");
                        //--- Set the given view
                        _setView(request, psViewName, psRenderer ) ;
                        //--- Send the request ( retrieve the response )
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                        /***
                        response = _sendRequest(request);
                        //--- Use the response ( View => allways update screen )
                        if ( response.isOK() )
                        {
                                if ( response.dataNotFound() != true ) // Data Found
                                {
                                        _oScreen.XmlToScreen(response);
                                }
                        }
                        **/
                }
                catch (ex) {
                        _error ( ex.message );
                }       
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doLoadElements = function () 
        {
                _trace("doLoadElements(...)");
                _bUpdateScreen = true ; // always TRUE
                var response = null ;
                try {
                        //--- Build the request 
                        var request = this.getRequest("load") ;
                        //--- Elements to get after the load
                        _setElements(request, arguments);
                        //--- Flag to update (or not) the screen fields
                        //var bUpdateScreen =_getUpdateScreenFlag(arguments, true);
                        //--- Send the request ( retrieve the response )
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                        /**
                        response = _sendRequest(request);
                        if ( response.isOK() )
                        {
                                if ( response.dataNotFound() != true ) // Data Found
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                        **/
                }
                catch (ex) {
                        _error ( ex.message );
                }       
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doLoad = function ( bUpdateScreen ) 
        {
                _trace("doLoad("+bUpdateScreen+")");
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("load") ;
                        
                        //--- Set what to retrieve : elements and/or views ( RETRIEVE_ALL by default )
                        _setWhatToRetrieve(request, RETRIEVE_ALL);
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen );
                        /**
                        response = _sendRequest(request);
                        if ( response.isOK() )
                        {
                                if ( response.dataNotFound() != true ) // Data Found
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                        **/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        
        //------------------------------------------------------------------------------
/***
        function _afterLoad ( response ) 
        {
alert ( "_afterLoad" ); 
                if ( response.isOK() )
                {
                        if ( response.dataNotFound() != true ) // Data Found
                        {
                                if ( _bUpdateScreen )
                                {
                                        //--- Populate the screen fields with XML data recieved
                                        _oScreen.XmlToScreen(response);
                                }
                        }
                }
        }
***/
        //------------------------------------------------------------------------------
        this.populateFields = function (response) 
        {
                if ( response.isOK() )
                {
                        if ( response.dataNotFound() != true ) // Data Found
                        {
                                //--- Populate the screen fields with XML data recieved
                                _oScreen.XmlToScreen(response);
                        }
                }
                else
                {
                        //alert("ERROR : cannot populate fields ( response status is not OK ) !");
                        _error("populateFields(response) : cannot populate fields ( response status is not OK ) !");
                }
        }
        //------------------------------------------------------------------------------
        
        //------------------------------------------------------------------------------
        // param Action : "save", "insert", "update"
        //------------------------------------------------------------------------------
        this.sendScreenData = function ( sAction, applicationCallerFunction, bUpdateScreen )
        {
                _trace("sendScreenData : Action = '" + sAction + "'" );
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest(sAction) ;
                        
                        //--- Set what to retrieve : elements and/or views ( RETRIEVE_NOTHING by default )
                        _setWhatToRetrieve(request, RETRIEVE_NOTHING);
                        
                        //--- Build the XML tree from screen fields 
                        var sXmlData = _oScreen.ScreenToXml();
                        request.setData(sXmlData);
                        
                        //--- Send the request ( retrieve the response )
                        //response = _sendRequest(request, applicationCallerFunction, _afterSavInsUpd, bUpdateScreen );
                        response = _sendRequest(request, applicationCallerFunction, _updateScreen );
                        
                        /***
                        response = _sendRequest(request);
                        
                        if ( bUpdateScreen == true )
                        {
                                if ( response.isOK() )
                                {
                                        //--- Populate FIELDS and VIEWS 
                                        _oScreen.XmlToScreen(response);
                                }
                        }                       
                        ***/
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
/***
        function _afterSavInsUpd ( response ) 
        {
alert ( "_afterSavInsUpd" );    
                if ( response.isOK() )
                {
                        if ( _bUpdateScreen )
                        {
                                //--- Populate FIELDS and VIEWS 
                                _oScreen.XmlToScreen(response);
                        }
                }
        }
***/
        //------------------------------------------------------------------------------
        this.doSave = function ( bUpdateScreen ) 
        {
                _trace("doSave("+bUpdateScreen+")");
                return this.sendScreenData("save", arguments.callee.caller, bUpdateScreen );
        }
        //------------------------------------------------------------------------------
        this.doInsert = function ( bUpdateScreen ) 
        {
                _trace("doInsert("+bUpdateScreen+")");
                return this.sendScreenData("insert", arguments.callee.caller, bUpdateScreen );
        }
        //------------------------------------------------------------------------------
        this.doUpdate = function ( bUpdateScreen ) 
        {
                _trace("doUpdate("+bUpdateScreen+")");
                return this.sendScreenData("update", arguments.callee.caller, bUpdateScreen );
        }
        //------------------------------------------------------------------------------
        this.doDelete = function ( bClearScreen, bUpdateScreen ) 
        {
                _trace("doDelete( " + bClearScreen + ", " + bUpdateScreen + " )" );
                
                _bClearScreen  = ( bClearScreen  != null ? bClearScreen  : true ) ; // default TRUE
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("delete") ;
                        
                        //--- Set what to retrieve : elements and/or views ( RETRIEVE_NOTHING by default )
                        _setWhatToRetrieve(request, RETRIEVE_NOTHING);
                        
                        //--- Send the request ( retrieve the response )
                        //response = _sendRequest(request, arguments.callee.caller);
                        response = _sendRequest(request, arguments.callee.caller, _updateScreenAfterDelete);


/***
                        if ( response.isOK() )
                        {
                                if ( bClearScreen == null || bClearScreen == true )
                                {
                                        //--- Clear the screen
                                        _oScreen.clear();
                                }
                                if ( bUpdateScreen != null && bUpdateScreen == true )
                                {
                                        //--- Populate FIELDS and VIEWS 
                                        _oScreen.XmlToScreen(response);
                                }
                        }
***/
                }
                catch (ex) {
                        _error ( ex.message );
                }       
                return response ;
        }
        
        //------------------------------------------------------------------------------
        // ACTIONS FOR LIST MANAGEMENT
        //------------------------------------------------------------------------------
        this.doListSelect = function ( sListName, sItemName, iOldIndex, iIndex, bUpdateScreen ) 
        {
                _trace("Action : SelectListElement");
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_select") ;          

                        request.setParameter( "list", sListName );
                        request.setParameter( "item", sItemName );
                        request.setParameter( "old-index", iOldIndex );
                        request.setParameter( "new-index", iIndex );
                        
                        //request.setData( _oScreen.ScreenToXml() );
                        request.setData( _oScreen.ScreenToXml(sItemName) ); // NEW
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doListInsert = function ( sListName, sItemName, iOldIndex, iIndex, bUpdateScreen ) 
        {
                _trace("Action : ListInsert");
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_insert") ;          

                        request.setParameter( "list", sListName );
                        request.setParameter( "item", sItemName );
                        request.setParameter( "new-index", iIndex );
                        request.setParameter( "old-index", iOldIndex );
                        
                        //request.setData( _oScreen.ScreenToXml() );
                        request.setData( _oScreen.ScreenToXml(sItemName) ); // NEW
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doListAdd = function ( sListName, sItemName, iOldIndex, bUpdateScreen ) 
        {
                _trace("Action : ListAdd");
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_add") ;             

                        request.setParameter( "list", sListName );
                        request.setParameter( "item", sItemName );
                        //request.setParameter( "new-index", iIndex );
                        request.setParameter( "old-index", iOldIndex );
                        
                        //request.setData( _oScreen.ScreenToXml() );
                        request.setData( _oScreen.ScreenToXml(sItemName) ); // NEW
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doListRemove = function ( sListName, sItemName, iOldIndex, iIndex, bUpdateScreen ) 
        {
                _trace("Action : ListRemove");
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_remove") ;          

                        request.setParameter( "list", sListName );
                        request.setParameter( "item", sItemName );
                        request.setParameter( "new-index", iIndex );
                        request.setParameter( "old-index", iOldIndex );
                        
                        //request.setData( _oScreen.ScreenToXml() );
                        request.setData( _oScreen.ScreenToXml(sItemName) ); // NEW
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                        if ( response.isOK() )
                        {
                                if ( response.dataVoid() != true ) // Data is not void
                                {
                                        if ( bUpdateScreen == null || bUpdateScreen == true )
                                        {
                                                //--- Populate the screen fields with XML data recieved
                                                _oScreen.XmlToScreen(response);
                                        }
                                }
                        }
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doListClear = function ( sListName, sItemName, iOldIndex ) 
        {
                _trace("Action : ListClear");
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_clear") ;           

                        request.setParameter( "list", sListName );
                        //request.setParameter( "item", sItemName );
                        //request.setParameter( "new-index", iIndex );
                        request.setParameter( "old-index", iOldIndex );
                        
                        //request.setData( _oScreen.ScreenToXml(sItemName) ); 
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        this.doListSort = function ( sListName, sItemName, iOldIndex, sFieldName, sOrder ) 
        {
                _trace("Action : ListSort");
                if ( arguments.length < 4 )
                {
                        _error ( "doListSort() : 4 or 5 arguments expected ( " + arguments.length + " arguments )" ) ;
                        return ;
                }
                var response = null ;
                try {   
                        //--- Build the request 
                        var request = this.getRequest("list_sort") ;            

                        //--- Set what to retrieve : elements and/or views ( RETRIEVE_NOTHING by default )
                        _setWhatToRetrieve(request, RETRIEVE_NOTHING);

                        request.setParameter( "list",  sListName );
                        //--- Sort parameters 
                        request.setParameter( "column", sFieldName );
                        if ( sOrder != null ) // order parameter is optional
                        {
                                request.setParameter( "order", sOrder );
                        }
                        
                        //--- Update current item before sort ?
                        if ( sItemName != null && iOldIndex != null )
                        {
                                request.setParameter( "item", sItemName );
                                request.setParameter( "old-index", iOldIndex );
                                request.setData( _oScreen.ScreenToXml(sItemName) ); // NEW
                        }
                        else
                        {
                                request.setParameter( "item", "" ); // No item to update
                                request.setParameter( "old-index", "-1" ); // No item index
                        }
                        
                        //--- Send the request 
                        response = _sendRequest(request, arguments.callee.caller);
                        if ( response.isOK() )
                        {
                                //--- Populate the screen fields with list view recieved
                                _oScreen.XmlToScreen(response);
                        }                       
                }
                catch (ex) {
                        _error ( ex.message );
                }               
                return response ;
        }
        //------------------------------------------------------------------------------
        
        //------------------------------------------------------------------------------
        this.doExec = function (sProcName, bUpdateScreen) 
        {
                _trace("doExec( "+sProcName+", "+bUpdateScreen+" )");
                _bUpdateScreen = ( bUpdateScreen != null ? bUpdateScreen : true ) ; // default TRUE
                var response = null ;
                if ( sProcName == null )
                {
                        _error ( "doExec() : No procedure name (argument is null) " );
                }
                try {   
                        //--- Build the request 
                        var request = this.getRequest("exec") ;
                        //--- Set the procedure name 
                        request.setProcedure(sProcName);
                        
                        //--- Set what to retrieve : elements and/or views 
                        //_setWhatToRetrieve(request, RETRIEVE_ALL);
                        _setWhatToRetrieve(request, RETRIEVE_NOTHING); // RETRIEVE_NOTHING by default
                        
                        
                        //--- Send the request ( retrieve the response )
                        response = _sendRequest(request, arguments.callee.caller, _updateScreen);

                        /*** OLD
                        if ( response.isOK() )
                        {
                                //--- Call external method ????
                                this.afterExec(request,response);
                        }
                        ***/
                }
                catch (ex) {
                        _error ( ex.message );
                }       
                return response ;
        }
        //------------------------------------------------------------------------------
        this.setParametersFromFields = function ( argElementName ) // v 1.1.0
        {
                _oScreen.setParametersFromFields( _oParameters, argElementName);
        }
                        
        //----------------------------------------------------------------------------------------------------
        this.openWindowLastAction = function(sURL, sRequest, sResponse )
        {
                var  sHtml = 
                "<html><head><title>Last screen action</title></head>" +
                "<body style='margin:4px; background-color: #D4D0C8;'>" +
                "<table style='width:100%;height:100%;' >" +
                "<tr style='height:26px;' ><td style='width:70px;' >URL : </td>" +
                "<td><input style='width:100%;' type='text' value='" + sURL + "' />" +
                "</td></tr>" +
                
                "<tr style='height:40%;' ><td style='width:70px; vertical-align: top;' >Request : </td>" +
                "<td><textarea id='requestArea' style='width:100%;height:100%;overflow: scroll;' readonly='readonly' >" +
                "</textarea>" +
                "</td></tr>" +
                
                "<tr style='height:60%;' ><td style='width:70px; vertical-align: top;' >Response : </td>" +
                "<td><textarea id='responseArea' style='width:100%;height:100%;overflow: scroll;' readonly='readonly' >" +
                "</textarea>" +
                "</td></tr>" +
                
                "</table>" +
                "</body></html>" ;
                
                var  sParams = 'status=no,resizable=yes,toolbars=no,menubar=no,titlebar=no,statusbar=no,hotkeys=no' ;
                
                sParams=sParams + ',screenX=80,screenY=80' ; // NETSCAPE
                sParams=sParams + ',left=80,top=80' ;        // IE
                var win = window.open( "", "LastAction", sParams ) ; // open ( "URL", "name", "parameters" );
                win.document.write ( sHtml ) ;
                win.document.close();
                var requestArea = win.document.getElementById('requestArea');
                if ( requestArea != null )
                {
                        requestArea.value = sRequest ;
                }
                else
                {
                        alert ("ERROR : Cannot found element for id 'requestArea' ");
                }
                var responseArea = win.document.getElementById('responseArea');
                if ( responseArea != null )
                {
                        responseArea.value = sResponse ;
                }
                else
                {
                        alert ("ERROR : Cannot found element for id 'responseArea' ");
                }
                win.focus();
        }
        //------------------------------------------------------------------------------
        this.showLastAction = function () 
        {
                this.openWindowLastAction(_sLastRequestURL, _sLastRequestXML, _sLastResponseXML);
        }
                
}
//------------------------------------------------------------------------------
//                                  F  I  N
//------------------------------------------------------------------------------

Generated by GNU enscript 1.6.4.