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