AppStartup.mxml 14.6 KB
<?xml version="1.0" encoding="utf-8"?>
<mx:Application  implements="com.adam.aia.IAppBase,com.magic.mvc.container.IMVCContainer"
	xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:kapit="fr.kapit.*" 
	xmlns:controller="com.adam.aia.appstartup.controller.*"
    width="100%" height="100%" layout="absolute"
    backgroundColor="#000000"
	preinitialize="executePreinitializationTasks()"
	creationComplete="onCreationComplete();"
	verticalScrollPolicy="off" horizontalScrollPolicy="off">
	<!--<kapit:KapInspect />-->
	<mx:Script>
		<![CDATA[
			import com.adam.aia.CommonUtil;
			import com.adam.aia.IAppBase;
			import com.adam.aia.appstartup.event.StartupEventConst;
			import com.adam.aia.appstartup.model.UserContextVO;
			import com.adam.aia.appstartup.util.StartupOSTConst;
			import com.adam.aia.appstartup.view.LoginView;
			import com.adobe.cairngorm.business.ServiceLocator;
			import com.adobe.cairngorm.events.UMEvent;
			import com.magic.flexmdi.manager.MDIModuleWindowManager;
			import com.magic.mvc.container.IMVCContainer;
			import com.magic.mvc.container.MVCVBox;
			import com.magic.mvc.context.IMVCContext;
			import com.magic.mvc.context.MVCContextManager;
			import com.magic.util.LocaleManager;
			import com.magic.util.OSTManager;
			import com.magic.util.UriUtil;
			import com.magic.util.cache.CacheManager;
			
			import mx.controls.Alert;
			import mx.controls.ProgressBar;
			import mx.controls.SWFLoader;
			import mx.events.FlexEvent;
			import mx.managers.BrowserManager;
			import mx.managers.SystemManager;
			//import fr.kapit.KapInspect;

            public const LOGIN_SUCCESS:String = "LoginSuccess";
            public const LOAD_LOGIN_APP:String = "LoadLoginApp";
            public const LOAD_ADMIN_APP:String = "LoadAdminApp";
            public const LOAD_MAIN_APP:String = "LoadContainerApp";
            public const GET_USER_CONTEXT:String = "GetUserContext";

            private const APP_ADMIN:String = "AppAdmin.swf";
            private const APP_MAIN:String = "AppMain.swf";
            private const APP_STARTUP:String = "AppStartup.swf";
            private const LOCALE_XML:String =  "locale.xml";

			
			import com.adam.pattern.Request;
			import com.adam.pattern.Response;
			import com.adam.aia.appstartup.business.AppStartupConst;
			import com.adam.aia.appstartup.business.StartupRemoteDelegate;
			import com.adam.aia.appstartup.business.StartupRemoteDelegate;

            //******************************************************
            // Public properties
            //******************************************************

            private var _objSwfLoader:SWFLoader;
            private var _objProgressBar:ProgressBar;

            private const APPSTARTUP_OST_XML:String =  "appstartup_ost.xml";
			private const CONTENT_PATH:String =  "content_path";
			private const PATH_SEPARATOR:String="/";


            public var _cmpLoginView:LoginView;

            public var objGlobalUserContext:UserContextVO = new  UserContextVO();



            /**
              * Override of initialized method to defer application initialization
              * finish until AFTER the runtime style has been loaded
              *
              * @param value Has the UIComponent/application been initialized
              */
            override public function set initialized(value:Boolean):void
            {
                // Hold off until the Runtime CSS SWF is done loading.
            }

            /**
              * This function is responsible for invoking task which needed to be done before initialization.
              * Basically the initialize the LocaleManager with the locale info.
              *
              */
            private function executePreinitializationTasks():void
            {
				//new KapInspect();
				
            	setupMVCContextManager();
            	// just for the sake of initializing this first
                ServiceLocator.getInstance();
                MDIModuleWindowManager.getInstance();
                MVCContextManager.getInstance();
            
                LocaleManager.getInstance().addEventListener(Event.COMPLETE,onLocale);
                LocaleManager.getInstance().load(UriUtil.getAbsoluteUriFromApplication(LOCALE_XML));
            }

            /**
              * Once the locale xml is loaded and initialized the proceed
              *
              */
            private function onLocale(objEvent:Event):void
            {
                super.initialized = true;
            }
			
            /**
             * Function implementation for IAppBase.doAction()
             * This is the only window to the AppBase any call should be made through this only
             */
            public function doAction(strActionId:String, ...args):*
            {
            	BrowserManager.getInstance().init("","A.D.A.M. Interactive Anatomy");
				//displayError
                switch(strActionId)
                {
                    case LOGIN_SUCCESS:
                            loadApp(UriUtil.getAbsoluteUriFromApplication(APP_MAIN));
                        break;
                    case LOAD_ADMIN_APP:
                            loadApp(UriUtil.getAbsoluteUriFromApplication(APP_ADMIN));
                        break;
                    case LOAD_LOGIN_APP:
                            loadLoginView();
                        break;
                    case GET_USER_CONTEXT:
                            return objGlobalUserContext;
                        break;
                }
            }

            /**
             * function to load an application swf. creates a new swf load instance and loads the application in that.
             * if there is already another application running then it will first unload that
             * @param  : strPath - uri to the application swf that needs to be loaded
             * @return : void
             */
            private function loadApp(strPath:String):void
            {
                unloadApp();
                var objLoadContext:LoaderContext = new LoaderContext(false,
                                                ApplicationDomain.currentDomain);
                _objSwfLoader = new SWFLoader();
                _objSwfLoader.visible = false;
                _objSwfLoader.percentHeight = 100;
                _objSwfLoader.percentWidth = 100;
                _objSwfLoader.showBusyCursor = true;
                _objSwfLoader.addEventListener(Event.COMPLETE, onAppLoadComplete);
                _objSwfLoader.addEventListener(IOErrorEvent.IO_ERROR,
                                                            onAppLoadIOError);
                _objSwfLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
                                                         onAppLoadSecurityError);
                _objProgressBar = CommonUtil.getProgressBar(this,  _objSwfLoader, CommonUtil.APP_LOADER_STRING);
               /*
                _objProgressBar.width = 300;
                _objProgressBar.x = (width-300)/2;
                _objProgressBar.y = (height)/2;
                _objProgressBar.mode = "pool";
                _objProgressBar.label = APP_LOADER_STRING;
                _objProgressBar.source = _objSwfLoader;
                */
                addChild(_objSwfLoader);
                //addChild(_objProgressBar);
                _objSwfLoader.loaderContext = objLoadContext;
                _objSwfLoader.source =  strPath;

            }

            private function setupMVCContextManager():void
            {
            	MVCContextManager.getInstance().flush();
            	//register Global MVC context
                MVCContextManager.getInstance().createGlobalContext(
                                                            _objModelLocator,
                                                            _objViewLocator,
                                                            _objFrontController);
            }
            /**
             * unloads the currently loaded application.
             * @param  : none
             * @return : void
             */
            private function unloadApp():void
            {
            	unloadLoginView();
                if(_objSwfLoader != null)
                {

                    cleanupApplication();
                    MDIModuleWindowManager.getInstance().flush();
                    MVCContextManager.getInstance().flush();
                    com.magic.util.CacheManager.getInstance().flush();
                    com.magic.util.cache.CacheManager.getInstance().dispose();
                    _objSwfLoader.source = null;
                    removeChild(_objSwfLoader);
                    _objSwfLoader = null;

                }
            }

            /**
            * This function retrieves the loaded application and invokes its prepareToUnload function.
            *
            * @param none
            * @return none
            */
            private function cleanupApplication():void
            {
                if(_objSwfLoader.content == null)
                {
                    return;
                }
                //
                var objSystemManager:SystemManager = SystemManager(_objSwfLoader.content);
                if(objSystemManager && objSystemManager.application)
                {
                    var objApplication:Object = Object(objSystemManager.application);
                    if(objApplication.hasOwnProperty("prepareToUnload"))
                    {
                        objApplication["prepareToUnload"]()
                    }
                }
            }
            /**
             * event handler on application swf load complete. Remove the progress bar.
             * @param  : objEvent
             * @return : void
             */
            private function onAppLoadComplete(objEvent:Event):void
            {
                if(_objProgressBar != null && _objSwfLoader != null)
                {
                    _objSwfLoader.showBusyCursor = false;
                    _objSwfLoader.visible = true;
                    removeChild(_objProgressBar);
                    _objProgressBar = null;
                }
            }

            /**
             * Event handler of input/output error. prompt the error message to the user.
             * @param  : none
             * @return : void
             */
            private function onAppLoadIOError(objEvent:IOErrorEvent):void
            {
                // display error message
            }

            /**
             * Event handler of security error. prompt the error message to the user.
             * @param  : none
             * @return : void
             */
            private function onAppLoadSecurityError(objEvent:SecurityErrorEvent):void
            {
                // display error message
            }

            /**
             * function to load AppStartup.swf on creationComplete event
             * @param  : none
             * @return : void
             */
            private function onCreationComplete():void
            {
			//	systemManager.addEventListener(FlexEvent.IDLE, handleApplicationIdle);
				//NIKITA 25July18
                //doAction(LOAD_LOGIN_APP);
				var un:String = mx.core.Application.application.parameters.username;
				var up:String = mx.core.Application.application.parameters.password;
				
				//Alert.show(un+", "+up);
				//Encryption of the password for more security
				/*var saltValue:String = 'A1B2C3D4E5F6G7H8I9';
				var password:String = event.data.password + saltValue;
				var sha1:SHA1 = new SHA1();
				var src:ByteArray = new ByteArray();
				src.writeUTFBytes(password);
				var digest:ByteArray = sha1.hash(src);
				var passwordHash:String = Hex.fromArray(digest);*/
				
				var objData:Object = new Object();
				objData.loginId = un;
				objData.password = up;
				
				var objEvent:UMEvent = new UMEvent(StartupEventConst.EVENT_LOGIN_CLICK,null,true,false,objData);
				objEvent.dispatch();
				
             //   doAction(LOGIN_SUCCESS);
				//25July18

                //loadApp(UriUtil.getAbsoluteUriFromApplication(APP_STARTUP));
            }
			private function handleApplicationIdle(event:FlexEvent):void
			{
				//Alert.show("IDLE");
				if(event.currentTarget.mx_internal::idleCounter == 480){
					Alert.show("Time out happened");
					ExternalInterface.call("setUserIdleValue");
				}
			}
            private function loadLoginView():void
            {
            	unloadApp();
            	if(_cmpLoginView != null && _cmpLoginView.visible == false)
                {
                    _cmpLoginView.visible = true;
                    return;
                }

                //Intially load the appstartup_ost.xml for the Static UI data
				OSTManager.getInstance().addEventListener(Event.COMPLETE,onOstComplete);
				var uri:String = CommonUtil.getRelativeContentUri(APPSTARTUP_OST_XML );
				OSTManager.getInstance().load(uri);
            }



            private function unloadLoginView():void
            {
            	 if(_cmpLoginView)
                 {
                    _cmpLoginView.visible = false;
                    removeChild(_cmpLoginView);

                    _cmpLoginView = null;

                 }
            }

			/**
			 * Function implementation for IMVCContainer.getInherentMvcContext()
			 * returns the its MVC context.
			 *
			 */
			public function getInherentMvcContext():IMVCContext
			{
				return MVCContextManager.getInstance().getGlobalContext();
			}
			/**
			 *  once the appstartup_ost.xml load do action proceed
			 */
			private function onOstComplete(objEvent:Event):void
			{

				OSTManager.getInstance().removeEventListener(Event.COMPLETE,onOstComplete);
				CommonUtil.APP_LOADER_STRING = OSTManager.getInstance().getValue(StartupOSTConst.LOADING);
				setupMVCContextManager();
                _cmpLoginView = new LoginView();
                _cmpLoginView.percentHeight = 100;
                _cmpLoginView.percentWidth = 100;
                _cmpLoginView.minWidth = 972;
                _cmpLoginView.minHeight = 648;
                addChild(_cmpLoginView);


			}
		]]>
	</mx:Script>

	<!--
		Initialize MVC Framework classes
	-->
	<mx:Style source="css/Global.css"/>
    <mx:Style source="css/Toolbars.css"/>
    <service:AIAServiceLocator  id="_objRemoteService"  xmlns:service="com.adam.aia.business.*" />

	<controller:StartupFrontController id="_objFrontController" xmlns:contoller="com.adam.aia.appstartup.controller.*" />
	<viewlocator:LocalViewLocator id="_objViewLocator" xmlns:viewlocator="com.magic.cairngorm.view.*" />
	<modellocator:StartupModelLocator id="_objModelLocator" xmlns:modellocator="com.adam.aia.appstartup.model.*" />
	<viewhelper:AppStartupViewHelper	id="_objViewHelper" xmlns:viewhelper="com.adam.aia.appstartup.view.helper.*" />

</mx:Application>