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