home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2012 April / ME_04_2012.iso / Video-Tutorial / iPhoto / media / player.swf / scripts / mx / utils / UIDUtil.as < prev    next >
Encoding:
Text File  |  2011-11-11  |  8.3 KB  |  279 lines

  1. package mx.utils
  2. {
  3.    import flash.utils.ByteArray;
  4.    import flash.utils.Dictionary;
  5.    import mx.core.IPropertyChangeNotifier;
  6.    import mx.core.IUIComponent;
  7.    import mx.core.IUID;
  8.    import mx.core.mx_internal;
  9.    
  10.    use namespace mx_internal;
  11.    
  12.    public class UIDUtil
  13.    {
  14.       mx_internal static const VERSION:String = "4.5.0.20967";
  15.       
  16.       private static const ALPHA_CHAR_CODES:Array = [48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70];
  17.       
  18.       private static var uidDictionary:Dictionary = new Dictionary(true);
  19.       
  20.       public function UIDUtil()
  21.       {
  22.          super();
  23.       }
  24.       
  25.       public static function createUID() : String
  26.       {
  27.          var _loc3_:int = 0;
  28.          var _loc4_:int = 0;
  29.          var _loc1_:Array = new Array(36);
  30.          var _loc2_:int = 0;
  31.          _loc3_ = 0;
  32.          while(_loc3_ < 8)
  33.          {
  34.             var _loc7_:*;
  35.             _loc1_[_loc7_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  36.             _loc3_++;
  37.          }
  38.          _loc3_ = 0;
  39.          while(_loc3_ < 3)
  40.          {
  41.             _loc1_[_loc7_ = _loc2_++] = 45;
  42.             _loc4_ = 0;
  43.             while(_loc4_ < 4)
  44.             {
  45.                var _loc8_:*;
  46.                _loc1_[_loc8_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  47.                _loc4_++;
  48.             }
  49.             _loc3_++;
  50.          }
  51.          _loc1_[_loc7_ = _loc2_++] = 45;
  52.          var _loc5_:Number = Number(new Date().getTime());
  53.          var _loc6_:String = ("0000000" + _loc5_.toString(16).toUpperCase()).substr(-8);
  54.          _loc3_ = 0;
  55.          while(_loc3_ < 8)
  56.          {
  57.             _loc1_[_loc8_ = _loc2_++] = _loc6_.charCodeAt(_loc3_);
  58.             _loc3_++;
  59.          }
  60.          _loc3_ = 0;
  61.          while(_loc3_ < 4)
  62.          {
  63.             _loc1_[_loc8_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  64.             _loc3_++;
  65.          }
  66.          return String.fromCharCode.apply(null,_loc1_);
  67.       }
  68.       
  69.       public static function fromByteArray(param1:ByteArray) : String
  70.       {
  71.          var _loc2_:Array = null;
  72.          var _loc3_:uint = 0;
  73.          var _loc4_:uint = 0;
  74.          var _loc5_:int = 0;
  75.          if(param1 != null && param1.length >= 16 && param1.bytesAvailable >= 16)
  76.          {
  77.             _loc2_ = new Array(36);
  78.             _loc3_ = 0;
  79.             _loc4_ = 0;
  80.             while(_loc4_ < 16)
  81.             {
  82.                if(_loc4_ == 4 || _loc4_ == 6 || _loc4_ == 8 || _loc4_ == 10)
  83.                {
  84.                   var _loc6_:*;
  85.                   _loc2_[_loc6_ = _loc3_++] = 45;
  86.                }
  87.                _loc5_ = param1.readByte();
  88.                _loc2_[_loc6_ = _loc3_++] = ALPHA_CHAR_CODES[(_loc5_ & 0xF0) >>> 4];
  89.                var _loc7_:*;
  90.                _loc2_[_loc7_ = _loc3_++] = ALPHA_CHAR_CODES[_loc5_ & 0x0F];
  91.                _loc4_++;
  92.             }
  93.             return String.fromCharCode.apply(null,_loc2_);
  94.          }
  95.          return null;
  96.       }
  97.       
  98.       public static function isUID(param1:String) : Boolean
  99.       {
  100.          var _loc2_:uint = 0;
  101.          var _loc3_:Number = NaN;
  102.          if(param1 != null && param1.length == 36)
  103.          {
  104.             _loc2_ = 0;
  105.             while(_loc2_ < 36)
  106.             {
  107.                _loc3_ = Number(param1.charCodeAt(_loc2_));
  108.                if(_loc2_ == 8 || _loc2_ == 13 || _loc2_ == 18 || _loc2_ == 23)
  109.                {
  110.                   if(_loc3_ != 45)
  111.                   {
  112.                      return false;
  113.                   }
  114.                }
  115.                else if(_loc3_ < 48 || _loc3_ > 70 || _loc3_ > 57 && _loc3_ < 65)
  116.                {
  117.                   return false;
  118.                }
  119.                _loc2_++;
  120.             }
  121.             return true;
  122.          }
  123.          return false;
  124.       }
  125.       
  126.       public static function toByteArray(param1:String) : ByteArray
  127.       {
  128.          var _loc2_:ByteArray = null;
  129.          var _loc3_:uint = 0;
  130.          var _loc4_:String = null;
  131.          var _loc5_:uint = 0;
  132.          var _loc6_:uint = 0;
  133.          if(isUID(param1))
  134.          {
  135.             _loc2_ = new ByteArray();
  136.             _loc3_ = 0;
  137.             while(_loc3_ < param1.length)
  138.             {
  139.                _loc4_ = param1.charAt(_loc3_);
  140.                if(_loc4_ != "-")
  141.                {
  142.                   _loc5_ = getDigit(_loc4_);
  143.                   _loc3_++;
  144.                   _loc6_ = getDigit(param1.charAt(_loc3_));
  145.                   _loc2_.writeByte((_loc5_ << 4 | _loc6_) & 0xFF);
  146.                }
  147.                _loc3_++;
  148.             }
  149.             _loc2_.position = 0;
  150.             return _loc2_;
  151.          }
  152.          return null;
  153.       }
  154.       
  155.       public static function getUID(param1:Object) : String
  156.       {
  157.          var result:String = null;
  158.          var xitem:XML = null;
  159.          var nodeKind:String = null;
  160.          var notificationFunction:Function = null;
  161.          var item:Object = param1;
  162.          result = null;
  163.          if(item == null)
  164.          {
  165.             return result;
  166.          }
  167.          if(item is IUID)
  168.          {
  169.             result = IUID(item).uid;
  170.             if(result == null || result.length == 0)
  171.             {
  172.                result = createUID();
  173.                IUID(item).uid = result;
  174.             }
  175.          }
  176.          else if(item is IPropertyChangeNotifier && !(item is IUIComponent))
  177.          {
  178.             result = IPropertyChangeNotifier(item).uid;
  179.             if(result == null || result.length == 0)
  180.             {
  181.                result = createUID();
  182.                IPropertyChangeNotifier(item).uid = result;
  183.             }
  184.          }
  185.          else
  186.          {
  187.             if(item is String)
  188.             {
  189.                return item as String;
  190.             }
  191.             try
  192.             {
  193.                if(item is XMLList && item.length == 1)
  194.                {
  195.                   item = item[0];
  196.                }
  197.                if(item is XML)
  198.                {
  199.                   xitem = XML(item);
  200.                   nodeKind = xitem.nodeKind();
  201.                   if(nodeKind == "text" || nodeKind == "attribute")
  202.                   {
  203.                      return xitem.toString();
  204.                   }
  205.                   notificationFunction = xitem.notification();
  206.                   if(!(notificationFunction is Function))
  207.                   {
  208.                      notificationFunction = XMLNotifier.mx_internal::initializeXMLForNotification();
  209.                      xitem.setNotification(notificationFunction);
  210.                   }
  211.                   if(notificationFunction["uid"] == undefined)
  212.                   {
  213.                      result = notificationFunction["uid"] = createUID();
  214.                   }
  215.                   result = notificationFunction["uid"];
  216.                }
  217.                else
  218.                {
  219.                   if("mx_internal_uid" in item)
  220.                   {
  221.                      return item.mx_internal_uid;
  222.                   }
  223.                   if("uid" in item)
  224.                   {
  225.                      return item.uid;
  226.                   }
  227.                   result = uidDictionary[item];
  228.                   if(!result)
  229.                   {
  230.                      result = createUID();
  231.                      try
  232.                      {
  233.                         item.mx_internal_uid = result;
  234.                      }
  235.                      catch(e:Error)
  236.                      {
  237.                         uidDictionary[item] = result;
  238.                      }
  239.                   }
  240.                }
  241.             }
  242.             catch(e:Error)
  243.             {
  244.                result = item.toString();
  245.             }
  246.          }
  247.          return result;
  248.       }
  249.       
  250.       private static function getDigit(param1:String) : uint
  251.       {
  252.          switch(param1)
  253.          {
  254.             case "A":
  255.             case "a":
  256.                return 10;
  257.             case "B":
  258.             case "b":
  259.                return 11;
  260.             case "C":
  261.             case "c":
  262.                return 12;
  263.             case "D":
  264.             case "d":
  265.                return 13;
  266.             case "E":
  267.             case "e":
  268.                return 14;
  269.             case "F":
  270.             case "f":
  271.                return 15;
  272.             default:
  273.                return new uint(param1);
  274.          }
  275.       }
  276.    }
  277. }
  278.  
  279.