home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Puzzle / HexiomConnect.swf / scripts / mx / resources / ResourceManagerImpl.as < prev   
Encoding:
Text File  |  2008-08-29  |  15.6 KB  |  497 lines

  1. package mx.resources
  2. {
  3.    import flash.events.Event;
  4.    import flash.events.EventDispatcher;
  5.    import flash.events.IEventDispatcher;
  6.    import flash.events.TimerEvent;
  7.    import flash.system.ApplicationDomain;
  8.    import flash.system.SecurityDomain;
  9.    import flash.utils.Timer;
  10.    import mx.core.mx_internal;
  11.    import mx.events.ModuleEvent;
  12.    import mx.events.ResourceEvent;
  13.    import mx.modules.IModuleInfo;
  14.    import mx.modules.ModuleManager;
  15.    import mx.utils.StringUtil;
  16.    
  17.    use namespace mx_internal;
  18.    
  19.    public class ResourceManagerImpl extends EventDispatcher implements IResourceManager
  20.    {
  21.       
  22.       mx_internal static const VERSION:String = "3.0.0.0";
  23.       
  24.       private static var instance:IResourceManager;
  25.        
  26.       
  27.       private var resourceModules:Object;
  28.       
  29.       private var initializedForNonFrameworkApp:Boolean = false;
  30.       
  31.       private var localeMap:Object;
  32.       
  33.       private var _localeChain:Array;
  34.       
  35.       public function ResourceManagerImpl()
  36.       {
  37.          localeMap = {};
  38.          resourceModules = {};
  39.          super();
  40.       }
  41.       
  42.       public static function getInstance() : IResourceManager
  43.       {
  44.          if(!instance)
  45.          {
  46.             instance = new ResourceManagerImpl();
  47.          }
  48.          return instance;
  49.       }
  50.       
  51.       public function get localeChain() : Array
  52.       {
  53.          return _localeChain;
  54.       }
  55.       
  56.       public function set localeChain(param1:Array) : void
  57.       {
  58.          _localeChain = param1;
  59.          update();
  60.       }
  61.       
  62.       [Bindable("change")]
  63.       public function getStringArray(param1:String, param2:String, param3:String = null) : Array
  64.       {
  65.          var _loc4_:IResourceBundle;
  66.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  67.          {
  68.             return null;
  69.          }
  70.          var _loc5_:* = _loc4_.content[param2];
  71.          var _loc6_:Array;
  72.          var _loc7_:int = int((_loc6_ = String(_loc5_).split(",")).length);
  73.          var _loc8_:int = 0;
  74.          while(_loc8_ < _loc7_)
  75.          {
  76.             _loc6_[_loc8_] = StringUtil.trim(_loc6_[_loc8_]);
  77.             _loc8_++;
  78.          }
  79.          return _loc6_;
  80.       }
  81.       
  82.       mx_internal function installCompiledResourceBundle(param1:ApplicationDomain, param2:String, param3:String) : void
  83.       {
  84.          var _loc4_:String = null;
  85.          var _loc5_:String = param3;
  86.          var _loc6_:int;
  87.          if((_loc6_ = param3.indexOf(":")) != -1)
  88.          {
  89.             _loc4_ = param3.substring(0,_loc6_);
  90.             _loc5_ = param3.substring(_loc6_ + 1);
  91.          }
  92.          if(getResourceBundle(param2,param3))
  93.          {
  94.             return;
  95.          }
  96.          var _loc7_:* = param2 + "$" + _loc5_ + "_properties";
  97.          if(_loc4_ != null)
  98.          {
  99.             _loc7_ = _loc4_ + "." + _loc7_;
  100.          }
  101.          var _loc8_:Class = null;
  102.          if(param1.hasDefinition(_loc7_))
  103.          {
  104.             _loc8_ = Class(param1.getDefinition(_loc7_));
  105.          }
  106.          if(!_loc8_)
  107.          {
  108.             _loc7_ = param3;
  109.             if(param1.hasDefinition(_loc7_))
  110.             {
  111.                _loc8_ = Class(param1.getDefinition(_loc7_));
  112.             }
  113.          }
  114.          if(!_loc8_)
  115.          {
  116.             _loc7_ = param3 + "_properties";
  117.             if(param1.hasDefinition(_loc7_))
  118.             {
  119.                _loc8_ = Class(param1.getDefinition(_loc7_));
  120.             }
  121.          }
  122.          if(!_loc8_)
  123.          {
  124.             throw new Error("Could not find compiled resource bundle \'" + param3 + "\' for locale \'" + param2 + "\'.");
  125.          }
  126.          var _loc9_:ResourceBundle;
  127.          (_loc9_ = ResourceBundle(new _loc8_())).mx_internal::_locale = param2;
  128.          _loc9_.mx_internal::_bundleName = param3;
  129.          addResourceBundle(_loc9_);
  130.       }
  131.       
  132.       [Bindable("change")]
  133.       public function getString(param1:String, param2:String, param3:Array = null, param4:String = null) : String
  134.       {
  135.          var _loc5_:IResourceBundle;
  136.          if(!(_loc5_ = findBundle(param1,param2,param4)))
  137.          {
  138.             return null;
  139.          }
  140.          var _loc6_:String = String(_loc5_.content[param2]);
  141.          if(param3)
  142.          {
  143.             _loc6_ = StringUtil.substitute(_loc6_,param3);
  144.          }
  145.          return _loc6_;
  146.       }
  147.       
  148.       public function loadResourceModule(param1:String, param2:Boolean = true, param3:ApplicationDomain = null, param4:SecurityDomain = null) : IEventDispatcher
  149.       {
  150.          var errorHandler:Function;
  151.          var moduleInfo:IModuleInfo = null;
  152.          var resourceEventDispatcher:ResourceEventDispatcher = null;
  153.          var timer:Timer = null;
  154.          var timerHandler:Function = null;
  155.          var url:String = param1;
  156.          var updateFlag:Boolean = param2;
  157.          var applicationDomain:ApplicationDomain = param3;
  158.          var securityDomain:SecurityDomain = param4;
  159.          moduleInfo = ModuleManager.getModule(url);
  160.          resourceEventDispatcher = new ResourceEventDispatcher(moduleInfo);
  161.          var readyHandler:Function = function(param1:ModuleEvent):void
  162.          {
  163.             var _loc2_:* = param1.module.factory.create();
  164.             resourceModules[param1.module.url].resourceModule = _loc2_;
  165.             if(updateFlag)
  166.             {
  167.                update();
  168.             }
  169.          };
  170.          moduleInfo.addEventListener(ModuleEvent.READY,readyHandler,false,0,true);
  171.          errorHandler = function(param1:ModuleEvent):void
  172.          {
  173.             var _loc3_:ResourceEvent = null;
  174.             var _loc2_:String = "Unable to load resource module from " + url;
  175.             if(resourceEventDispatcher.willTrigger(ResourceEvent.ERROR))
  176.             {
  177.                _loc3_ = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  178.                _loc3_.bytesLoaded = 0;
  179.                _loc3_.bytesTotal = 0;
  180.                _loc3_.errorText = _loc2_;
  181.                resourceEventDispatcher.dispatchEvent(_loc3_);
  182.                return;
  183.             }
  184.             throw new Error(_loc2_);
  185.          };
  186.          moduleInfo.addEventListener(ModuleEvent.ERROR,errorHandler,false,0,true);
  187.          resourceModules[url] = new ResourceModuleInfo(moduleInfo,readyHandler,errorHandler);
  188.          timer = new Timer(0);
  189.          timerHandler = function(param1:TimerEvent):void
  190.          {
  191.             timer.removeEventListener(TimerEvent.TIMER,timerHandler);
  192.             timer.stop();
  193.             moduleInfo.load(applicationDomain,securityDomain);
  194.          };
  195.          timer.addEventListener(TimerEvent.TIMER,timerHandler,false,0,true);
  196.          timer.start();
  197.          return resourceEventDispatcher;
  198.       }
  199.       
  200.       public function getLocales() : Array
  201.       {
  202.          var _loc2_:String = null;
  203.          var _loc1_:Array = [];
  204.          for(_loc2_ in localeMap)
  205.          {
  206.             _loc1_.push(_loc2_);
  207.          }
  208.          return _loc1_;
  209.       }
  210.       
  211.       public function removeResourceBundlesForLocale(param1:String) : void
  212.       {
  213.          delete localeMap[param1];
  214.       }
  215.       
  216.       public function getResourceBundle(param1:String, param2:String) : IResourceBundle
  217.       {
  218.          var _loc3_:Object = localeMap[param1];
  219.          if(!_loc3_)
  220.          {
  221.             return null;
  222.          }
  223.          return _loc3_[param2];
  224.       }
  225.       
  226.       private function dumpResourceModule(param1:*) : void
  227.       {
  228.          var _loc2_:ResourceBundle = null;
  229.          var _loc3_:String = null;
  230.          for each(_loc2_ in param1.resourceBundles)
  231.          {
  232.             trace(_loc2_.locale,_loc2_.bundleName);
  233.             for(_loc3_ in _loc2_.content)
  234.             {
  235.             }
  236.          }
  237.       }
  238.       
  239.       [Bindable("change")]
  240.       public function getObject(param1:String, param2:String, param3:String = null) : *
  241.       {
  242.          var _loc4_:IResourceBundle;
  243.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  244.          {
  245.             return undefined;
  246.          }
  247.          return _loc4_.content[param2];
  248.       }
  249.       
  250.       public function addResourceBundle(param1:IResourceBundle) : void
  251.       {
  252.          var _loc2_:String = param1.locale;
  253.          var _loc3_:String = param1.bundleName;
  254.          if(!localeMap[_loc2_])
  255.          {
  256.             localeMap[_loc2_] = {};
  257.          }
  258.          localeMap[_loc2_][_loc3_] = param1;
  259.       }
  260.       
  261.       private function findBundle(param1:String, param2:String, param3:String) : IResourceBundle
  262.       {
  263.          supportNonFrameworkApps();
  264.          return param3 != null ? getResourceBundle(param3,param1) : findResourceBundleWithResource(param1,param2);
  265.       }
  266.       
  267.       [Bindable("change")]
  268.       public function getInt(param1:String, param2:String, param3:String = null) : int
  269.       {
  270.          var _loc4_:IResourceBundle;
  271.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  272.          {
  273.             return 0;
  274.          }
  275.          var _loc5_:* = _loc4_.content[param2];
  276.          return int(_loc5_);
  277.       }
  278.       
  279.       private function supportNonFrameworkApps() : void
  280.       {
  281.          if(initializedForNonFrameworkApp)
  282.          {
  283.             return;
  284.          }
  285.          initializedForNonFrameworkApp = true;
  286.          if(getLocales().length > 0)
  287.          {
  288.             return;
  289.          }
  290.          var _loc1_:ApplicationDomain = ApplicationDomain.currentDomain;
  291.          if(!_loc1_.hasDefinition("_CompiledResourceBundleInfo"))
  292.          {
  293.             return;
  294.          }
  295.          var _loc2_:Class = Class(_loc1_.getDefinition("_CompiledResourceBundleInfo"));
  296.          var _loc3_:Array = _loc2_.compiledLocales;
  297.          var _loc4_:Array = _loc2_.compiledResourceBundleNames;
  298.          installCompiledResourceBundles(_loc1_,_loc3_,_loc4_);
  299.          localeChain = _loc3_;
  300.       }
  301.       
  302.       [Bindable("change")]
  303.       public function getClass(param1:String, param2:String, param3:String = null) : Class
  304.       {
  305.          var _loc4_:IResourceBundle;
  306.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  307.          {
  308.             return null;
  309.          }
  310.          var _loc5_:*;
  311.          return (_loc5_ = _loc4_.content[param2]) as Class;
  312.       }
  313.       
  314.       [Bindable("change")]
  315.       public function getNumber(param1:String, param2:String, param3:String = null) : Number
  316.       {
  317.          var _loc4_:IResourceBundle;
  318.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  319.          {
  320.             return NaN;
  321.          }
  322.          var _loc5_:* = _loc4_.content[param2];
  323.          return Number(_loc5_);
  324.       }
  325.       
  326.       public function update() : void
  327.       {
  328.          dispatchEvent(new Event(Event.CHANGE));
  329.       }
  330.       
  331.       public function getBundleNamesForLocale(param1:String) : Array
  332.       {
  333.          var _loc3_:String = null;
  334.          var _loc2_:Array = [];
  335.          for(_loc3_ in localeMap[param1])
  336.          {
  337.             _loc2_.push(_loc3_);
  338.          }
  339.          return _loc2_;
  340.       }
  341.       
  342.       public function removeResourceBundle(param1:String, param2:String) : void
  343.       {
  344.          delete localeMap[param1][param2];
  345.          if(getBundleNamesForLocale(param1).length == 0)
  346.          {
  347.             delete localeMap[param1];
  348.          }
  349.       }
  350.       
  351.       public function installCompiledResourceBundles(param1:ApplicationDomain, param2:Array, param3:Array) : void
  352.       {
  353.          var _loc7_:String = null;
  354.          var _loc8_:int = 0;
  355.          var _loc9_:String = null;
  356.          var _loc4_:int = !!param2 ? int(param2.length) : 0;
  357.          var _loc5_:int = !!param3 ? int(param3.length) : 0;
  358.          var _loc6_:int = 0;
  359.          while(_loc6_ < _loc4_)
  360.          {
  361.             _loc7_ = String(param2[_loc6_]);
  362.             _loc8_ = 0;
  363.             while(_loc8_ < _loc5_)
  364.             {
  365.                _loc9_ = String(param3[_loc8_]);
  366.                mx_internal::installCompiledResourceBundle(param1,_loc7_,_loc9_);
  367.                _loc8_++;
  368.             }
  369.             _loc6_++;
  370.          }
  371.       }
  372.       
  373.       public function findResourceBundleWithResource(param1:String, param2:String) : IResourceBundle
  374.       {
  375.          var _loc5_:String = null;
  376.          var _loc6_:Object = null;
  377.          var _loc7_:ResourceBundle = null;
  378.          if(!_localeChain)
  379.          {
  380.             return null;
  381.          }
  382.          var _loc3_:int = int(_localeChain.length);
  383.          var _loc4_:int = 0;
  384.          while(_loc4_ < _loc3_)
  385.          {
  386.             _loc5_ = String(localeChain[_loc4_]);
  387.             if(_loc6_ = localeMap[_loc5_])
  388.             {
  389.                if(_loc7_ = _loc6_[param1])
  390.                {
  391.                   if(param2 in _loc7_.content)
  392.                   {
  393.                      return _loc7_;
  394.                   }
  395.                }
  396.             }
  397.             _loc4_++;
  398.          }
  399.          return null;
  400.       }
  401.       
  402.       [Bindable("change")]
  403.       public function getUint(param1:String, param2:String, param3:String = null) : uint
  404.       {
  405.          var _loc4_:IResourceBundle;
  406.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  407.          {
  408.             return 0;
  409.          }
  410.          var _loc5_:* = _loc4_.content[param2];
  411.          return uint(_loc5_);
  412.       }
  413.       
  414.       [Bindable("change")]
  415.       public function getBoolean(param1:String, param2:String, param3:String = null) : Boolean
  416.       {
  417.          var _loc4_:IResourceBundle;
  418.          if(!(_loc4_ = findBundle(param1,param2,param3)))
  419.          {
  420.             return false;
  421.          }
  422.          var _loc5_:* = _loc4_.content[param2];
  423.          return String(_loc5_).toLowerCase() == "true";
  424.       }
  425.       
  426.       public function unloadResourceModule(param1:String, param2:Boolean = true) : void
  427.       {
  428.          throw new Error("unloadResourceModule() is not yet implemented.");
  429.       }
  430.    }
  431. }
  432.  
  433. import mx.modules.IModuleInfo;
  434. import mx.resources.IResourceModule;
  435.  
  436. class ResourceModuleInfo
  437. {
  438.     
  439.    
  440.    public var resourceModule:IResourceModule;
  441.    
  442.    public var errorHandler:Function;
  443.    
  444.    public var readyHandler:Function;
  445.    
  446.    public var moduleInfo:IModuleInfo;
  447.    
  448.    public function ResourceModuleInfo(param1:IModuleInfo, param2:Function, param3:Function)
  449.    {
  450.       super();
  451.       this.moduleInfo = param1;
  452.       this.readyHandler = param2;
  453.       this.errorHandler = param3;
  454.    }
  455. }
  456.  
  457. import flash.events.EventDispatcher;
  458. import mx.events.ModuleEvent;
  459. import mx.events.ResourceEvent;
  460. import mx.modules.IModuleInfo;
  461.  
  462. class ResourceEventDispatcher extends EventDispatcher
  463. {
  464.     
  465.    
  466.    public function ResourceEventDispatcher(param1:IModuleInfo)
  467.    {
  468.       super();
  469.       param1.addEventListener(ModuleEvent.ERROR,moduleInfo_errorHandler,false,0,true);
  470.       param1.addEventListener(ModuleEvent.PROGRESS,moduleInfo_progressHandler,false,0,true);
  471.       param1.addEventListener(ModuleEvent.READY,moduleInfo_readyHandler,false,0,true);
  472.    }
  473.    
  474.    private function moduleInfo_progressHandler(param1:ModuleEvent) : void
  475.    {
  476.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.PROGRESS,param1.bubbles,param1.cancelable);
  477.       _loc2_.bytesLoaded = param1.bytesLoaded;
  478.       _loc2_.bytesTotal = param1.bytesTotal;
  479.       dispatchEvent(_loc2_);
  480.    }
  481.    
  482.    private function moduleInfo_readyHandler(param1:ModuleEvent) : void
  483.    {
  484.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.COMPLETE);
  485.       dispatchEvent(_loc2_);
  486.    }
  487.    
  488.    private function moduleInfo_errorHandler(param1:ModuleEvent) : void
  489.    {
  490.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  491.       _loc2_.bytesLoaded = param1.bytesLoaded;
  492.       _loc2_.bytesTotal = param1.bytesTotal;
  493.       _loc2_.errorText = param1.errorText;
  494.       dispatchEvent(_loc2_);
  495.    }
  496. }
  497.