home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / utils / ObjectProxy.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  7.7 KB  |  265 lines

  1. package mx.utils
  2. {
  3.    import flash.events.Event;
  4.    import flash.events.EventDispatcher;
  5.    import flash.utils.IDataInput;
  6.    import flash.utils.IDataOutput;
  7.    import flash.utils.IExternalizable;
  8.    import flash.utils.Proxy;
  9.    import flash.utils.flash_proxy;
  10.    import flash.utils.getQualifiedClassName;
  11.    import mx.core.IPropertyChangeNotifier;
  12.    import mx.events.PropertyChangeEvent;
  13.    import mx.events.PropertyChangeEventKind;
  14.    
  15.    use namespace flash_proxy;
  16.    use namespace object_proxy;
  17.    
  18.    [Bindable("propertyChange")]
  19.    public dynamic class ObjectProxy extends Proxy implements IExternalizable, IPropertyChangeNotifier
  20.    {
  21.       private var _id:String;
  22.       
  23.       protected var notifiers:Object;
  24.       
  25.       protected var propertyList:Array;
  26.       
  27.       private var _proxyLevel:int;
  28.       
  29.       private var _type:QName;
  30.       
  31.       protected var dispatcher:EventDispatcher;
  32.       
  33.       protected var proxyClass:Class = ObjectProxy;
  34.       
  35.       private var _item:Object;
  36.       
  37.       public function ObjectProxy(param1:Object = null, param2:String = null, param3:int = -1)
  38.       {
  39.          super();
  40.          if(!param1)
  41.          {
  42.             param1 = {};
  43.          }
  44.          _item = param1;
  45.          _proxyLevel = param3;
  46.          notifiers = {};
  47.          dispatcher = new EventDispatcher(this);
  48.          if(param2)
  49.          {
  50.             _id = param2;
  51.          }
  52.       }
  53.       
  54.       public function dispatchEvent(param1:Event) : Boolean
  55.       {
  56.          return dispatcher.dispatchEvent(param1);
  57.       }
  58.       
  59.       public function hasEventListener(param1:String) : Boolean
  60.       {
  61.          return dispatcher.hasEventListener(param1);
  62.       }
  63.       
  64.       override flash_proxy function setProperty(param1:*, param2:*) : void
  65.       {
  66.          var _loc4_:IPropertyChangeNotifier = null;
  67.          var _loc5_:PropertyChangeEvent = null;
  68.          var _loc3_:* = _item[param1];
  69.          if(_loc3_ !== param2)
  70.          {
  71.             _item[param1] = param2;
  72.             _loc4_ = IPropertyChangeNotifier(notifiers[param1]);
  73.             if(_loc4_)
  74.             {
  75.                _loc4_.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  76.                delete notifiers[param1];
  77.             }
  78.             if(dispatcher.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
  79.             {
  80.                if(param1 is QName)
  81.                {
  82.                   param1 = QName(param1).localName;
  83.                }
  84.                _loc5_ = PropertyChangeEvent.createUpdateEvent(this,param1.toString(),_loc3_,param2);
  85.                dispatcher.dispatchEvent(_loc5_);
  86.             }
  87.          }
  88.       }
  89.       
  90.       public function willTrigger(param1:String) : Boolean
  91.       {
  92.          return dispatcher.willTrigger(param1);
  93.       }
  94.       
  95.       public function readExternal(param1:IDataInput) : void
  96.       {
  97.          var _loc2_:Object = param1.readObject();
  98.          _item = _loc2_;
  99.       }
  100.       
  101.       public function writeExternal(param1:IDataOutput) : void
  102.       {
  103.          param1.writeObject(_item);
  104.       }
  105.       
  106.       override flash_proxy function getProperty(param1:*) : *
  107.       {
  108.          var _loc2_:* = undefined;
  109.          if(notifiers[param1.toString()])
  110.          {
  111.             return notifiers[param1];
  112.          }
  113.          _loc2_ = _item[param1];
  114.          if(_loc2_)
  115.          {
  116.             if(_proxyLevel == 0 || ObjectUtil.isSimple(_loc2_))
  117.             {
  118.                return _loc2_;
  119.             }
  120.             _loc2_ = object_proxy::getComplexProperty(param1,_loc2_);
  121.          }
  122.          return _loc2_;
  123.       }
  124.       
  125.       override flash_proxy function hasProperty(param1:*) : Boolean
  126.       {
  127.          return param1 in _item;
  128.       }
  129.       
  130.       public function get uid() : String
  131.       {
  132.          if(_id === null)
  133.          {
  134.             _id = UIDUtil.createUID();
  135.          }
  136.          return _id;
  137.       }
  138.       
  139.       override flash_proxy function nextNameIndex(param1:int) : int
  140.       {
  141.          if(param1 == 0)
  142.          {
  143.             setupPropertyList();
  144.          }
  145.          if(param1 < propertyList.length)
  146.          {
  147.             return param1 + 1;
  148.          }
  149.          return 0;
  150.       }
  151.       
  152.       public function addEventListener(param1:String, param2:Function, param3:Boolean = false, param4:int = 0, param5:Boolean = false) : void
  153.       {
  154.          dispatcher.addEventListener(param1,param2,param3,param4,param5);
  155.       }
  156.       
  157.       override flash_proxy function nextName(param1:int) : String
  158.       {
  159.          return propertyList[param1 - 1];
  160.       }
  161.       
  162.       public function set uid(param1:String) : void
  163.       {
  164.          _id = param1;
  165.       }
  166.       
  167.       override flash_proxy function callProperty(param1:*, ... rest) : *
  168.       {
  169.          return _item[param1].apply(_item,rest);
  170.       }
  171.       
  172.       public function removeEventListener(param1:String, param2:Function, param3:Boolean = false) : void
  173.       {
  174.          dispatcher.removeEventListener(param1,param2,param3);
  175.       }
  176.       
  177.       protected function setupPropertyList() : void
  178.       {
  179.          var _loc1_:String = null;
  180.          if(getQualifiedClassName(_item) == "Object")
  181.          {
  182.             propertyList = [];
  183.             for(_loc1_ in _item)
  184.             {
  185.                propertyList.push(_loc1_);
  186.             }
  187.          }
  188.          else
  189.          {
  190.             propertyList = ObjectUtil.getClassInfo(_item,null,{
  191.                "includeReadOnly":true,
  192.                "uris":["*"]
  193.             }).properties;
  194.          }
  195.       }
  196.       
  197.       object_proxy function getComplexProperty(param1:*, param2:*) : *
  198.       {
  199.          if(param2 is IPropertyChangeNotifier)
  200.          {
  201.             param2.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  202.             notifiers[param1] = param2;
  203.             return param2;
  204.          }
  205.          if(getQualifiedClassName(param2) == "Object")
  206.          {
  207.             param2 = new proxyClass(_item[param1],null,_proxyLevel > 0 ? _proxyLevel - 1 : _proxyLevel);
  208.             param2.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  209.             notifiers[param1] = param2;
  210.             return param2;
  211.          }
  212.          return param2;
  213.       }
  214.       
  215.       override flash_proxy function deleteProperty(param1:*) : Boolean
  216.       {
  217.          var _loc5_:PropertyChangeEvent = null;
  218.          var _loc2_:IPropertyChangeNotifier = IPropertyChangeNotifier(notifiers[param1]);
  219.          if(_loc2_)
  220.          {
  221.             _loc2_.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  222.             delete notifiers[param1];
  223.          }
  224.          var _loc3_:* = _item[param1];
  225.          var _loc4_:* = delete _item[param1];
  226.          if(dispatcher.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
  227.          {
  228.             _loc5_ = new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
  229.             _loc5_.kind = PropertyChangeEventKind.DELETE;
  230.             _loc5_.property = param1;
  231.             _loc5_.oldValue = _loc3_;
  232.             _loc5_.source = this;
  233.             dispatcher.dispatchEvent(_loc5_);
  234.          }
  235.          return _loc4_;
  236.       }
  237.       
  238.       object_proxy function get type() : QName
  239.       {
  240.          return _type;
  241.       }
  242.       
  243.       object_proxy function set type(param1:QName) : void
  244.       {
  245.          _type = param1;
  246.       }
  247.       
  248.       public function propertyChangeHandler(param1:PropertyChangeEvent) : void
  249.       {
  250.          dispatcher.dispatchEvent(param1);
  251.       }
  252.       
  253.       override flash_proxy function nextValue(param1:int) : *
  254.       {
  255.          return _item[propertyList[param1 - 1]];
  256.       }
  257.       
  258.       object_proxy function get object() : Object
  259.       {
  260.          return _item;
  261.       }
  262.    }
  263. }
  264.  
  265.