home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / rpc / xml / SimpleXMLEncoder.as < prev   
Encoding:
Text File  |  2010-06-23  |  7.4 KB  |  252 lines

  1. package mx.rpc.xml
  2. {
  3.    import flash.xml.XMLDocument;
  4.    import flash.xml.XMLNode;
  5.    import mx.utils.ObjectUtil;
  6.    
  7.    public class SimpleXMLEncoder
  8.    {
  9.       private static const NUMBER_TYPE:uint = 0;
  10.       
  11.       private static const STRING_TYPE:uint = 1;
  12.       
  13.       private static const OBJECT_TYPE:uint = 2;
  14.       
  15.       private static const DATE_TYPE:uint = 3;
  16.       
  17.       private static const BOOLEAN_TYPE:uint = 4;
  18.       
  19.       private static const XML_TYPE:uint = 5;
  20.       
  21.       private static const ARRAY_TYPE:uint = 6;
  22.       
  23.       private static const MAP_TYPE:uint = 7;
  24.       
  25.       private static const ANY_TYPE:uint = 8;
  26.       
  27.       private static const ROWSET_TYPE:uint = 11;
  28.       
  29.       private static const QBEAN_TYPE:uint = 12;
  30.       
  31.       private static const DOC_TYPE:uint = 13;
  32.       
  33.       private static const SCHEMA_TYPE:uint = 14;
  34.       
  35.       private static const FUNCTION_TYPE:uint = 15;
  36.       
  37.       private static const ELEMENT_TYPE:uint = 16;
  38.       
  39.       private static const BASE64_BINARY_TYPE:uint = 17;
  40.       
  41.       private static const HEX_BINARY_TYPE:uint = 18;
  42.       
  43.       private static const CLASS_INFO_OPTIONS:Object = {
  44.          "includeReadOnly":false,
  45.          "includeTransient":false
  46.       };
  47.       
  48.       private var myXMLDoc:XMLDocument;
  49.       
  50.       public function SimpleXMLEncoder(param1:XMLDocument)
  51.       {
  52.          super();
  53.          this.myXMLDoc = !!param1 ? param1 : new XMLDocument();
  54.       }
  55.       
  56.       internal static function encodeDate(param1:Date, param2:String) : String
  57.       {
  58.          var _loc4_:Number = NaN;
  59.          var _loc3_:String = new String();
  60.          if(param2 == "dateTime" || param2 == "date")
  61.          {
  62.             _loc3_ = _loc3_.concat(param1.getUTCFullYear(),"-");
  63.             _loc4_ = param1.getUTCMonth() + 1;
  64.             if(_loc4_ < 10)
  65.             {
  66.                _loc3_ = _loc3_.concat("0");
  67.             }
  68.             _loc3_ = _loc3_.concat(_loc4_,"-");
  69.             _loc4_ = Number(param1.getUTCDate());
  70.             if(_loc4_ < 10)
  71.             {
  72.                _loc3_ = _loc3_.concat("0");
  73.             }
  74.             _loc3_ = _loc3_.concat(_loc4_);
  75.          }
  76.          if(param2 == "dateTime")
  77.          {
  78.             _loc3_ = _loc3_.concat("T");
  79.          }
  80.          if(param2 == "dateTime" || param2 == "time")
  81.          {
  82.             _loc4_ = Number(param1.getUTCHours());
  83.             if(_loc4_ < 10)
  84.             {
  85.                _loc3_ = _loc3_.concat("0");
  86.             }
  87.             _loc3_ = _loc3_.concat(_loc4_,":");
  88.             _loc4_ = Number(param1.getUTCMinutes());
  89.             if(_loc4_ < 10)
  90.             {
  91.                _loc3_ = _loc3_.concat("0");
  92.             }
  93.             _loc3_ = _loc3_.concat(_loc4_,":");
  94.             _loc4_ = Number(param1.getUTCSeconds());
  95.             if(_loc4_ < 10)
  96.             {
  97.                _loc3_ = _loc3_.concat("0");
  98.             }
  99.             _loc3_ = _loc3_.concat(_loc4_,".");
  100.             _loc4_ = Number(param1.getUTCMilliseconds());
  101.             if(_loc4_ < 10)
  102.             {
  103.                _loc3_ = _loc3_.concat("00");
  104.             }
  105.             else if(_loc4_ < 100)
  106.             {
  107.                _loc3_ = _loc3_.concat("0");
  108.             }
  109.             _loc3_ = _loc3_.concat(_loc4_);
  110.          }
  111.          return _loc3_.concat("Z");
  112.       }
  113.       
  114.       public function encodeValue(param1:Object, param2:QName, param3:XMLNode) : XMLNode
  115.       {
  116.          var _loc4_:XMLNode = null;
  117.          var _loc6_:Object = null;
  118.          var _loc7_:Array = null;
  119.          var _loc8_:uint = 0;
  120.          var _loc9_:uint = 0;
  121.          var _loc10_:String = null;
  122.          var _loc11_:QName = null;
  123.          var _loc12_:uint = 0;
  124.          var _loc13_:QName = null;
  125.          var _loc14_:uint = 0;
  126.          var _loc15_:String = null;
  127.          var _loc16_:XMLNode = null;
  128.          var _loc17_:String = null;
  129.          var _loc18_:String = null;
  130.          if(param1 == null)
  131.          {
  132.             return null;
  133.          }
  134.          var _loc5_:uint = getDataTypeFromObject(param1);
  135.          if(_loc5_ == SimpleXMLEncoder.FUNCTION_TYPE)
  136.          {
  137.             return null;
  138.          }
  139.          if(_loc5_ == SimpleXMLEncoder.XML_TYPE)
  140.          {
  141.             _loc4_ = param1.cloneNode(true);
  142.             param3.appendChild(_loc4_);
  143.             return _loc4_;
  144.          }
  145.          _loc4_ = myXMLDoc.createElement("foo");
  146.          _loc4_.nodeName = param2.localName;
  147.          param3.appendChild(_loc4_);
  148.          if(_loc5_ == SimpleXMLEncoder.OBJECT_TYPE)
  149.          {
  150.             _loc6_ = ObjectUtil.getClassInfo(param1,null,CLASS_INFO_OPTIONS);
  151.             _loc7_ = _loc6_.properties;
  152.             _loc8_ = _loc7_.length;
  153.             _loc9_ = 0;
  154.             while(_loc9_ < _loc8_)
  155.             {
  156.                _loc10_ = _loc7_[_loc9_];
  157.                _loc11_ = new QName("",_loc10_);
  158.                encodeValue(param1[_loc10_],_loc11_,_loc4_);
  159.                _loc9_++;
  160.             }
  161.          }
  162.          else if(_loc5_ == SimpleXMLEncoder.ARRAY_TYPE)
  163.          {
  164.             _loc12_ = uint(param1.length);
  165.             _loc13_ = new QName("","item");
  166.             _loc14_ = 0;
  167.             while(_loc14_ < _loc12_)
  168.             {
  169.                encodeValue(param1[_loc14_],_loc13_,_loc4_);
  170.                _loc14_++;
  171.             }
  172.          }
  173.          else
  174.          {
  175.             if(_loc5_ == SimpleXMLEncoder.DATE_TYPE)
  176.             {
  177.                _loc15_ = encodeDate(param1 as Date,"dateTime");
  178.             }
  179.             else if(_loc5_ == SimpleXMLEncoder.NUMBER_TYPE)
  180.             {
  181.                if(param1 == Number.POSITIVE_INFINITY)
  182.                {
  183.                   _loc15_ = "INF";
  184.                }
  185.                else if(param1 == Number.NEGATIVE_INFINITY)
  186.                {
  187.                   _loc15_ = "-INF";
  188.                }
  189.                else
  190.                {
  191.                   _loc17_ = param1.toString();
  192.                   _loc18_ = _loc17_.substr(0,2);
  193.                   if(_loc18_ == "0X" || _loc18_ == "0x")
  194.                   {
  195.                      _loc15_ = parseInt(_loc17_).toString();
  196.                   }
  197.                   else
  198.                   {
  199.                      _loc15_ = _loc17_;
  200.                   }
  201.                }
  202.             }
  203.             else
  204.             {
  205.                _loc15_ = param1.toString();
  206.             }
  207.             _loc16_ = myXMLDoc.createTextNode(_loc15_);
  208.             _loc4_.appendChild(_loc16_);
  209.          }
  210.          return _loc4_;
  211.       }
  212.       
  213.       private function getDataTypeFromObject(param1:Object) : uint
  214.       {
  215.          if(param1 is Number)
  216.          {
  217.             return SimpleXMLEncoder.NUMBER_TYPE;
  218.          }
  219.          if(param1 is Boolean)
  220.          {
  221.             return SimpleXMLEncoder.BOOLEAN_TYPE;
  222.          }
  223.          if(param1 is String)
  224.          {
  225.             return SimpleXMLEncoder.STRING_TYPE;
  226.          }
  227.          if(param1 is XMLDocument)
  228.          {
  229.             return SimpleXMLEncoder.XML_TYPE;
  230.          }
  231.          if(param1 is Date)
  232.          {
  233.             return SimpleXMLEncoder.DATE_TYPE;
  234.          }
  235.          if(param1 is Array)
  236.          {
  237.             return SimpleXMLEncoder.ARRAY_TYPE;
  238.          }
  239.          if(param1 is Function)
  240.          {
  241.             return SimpleXMLEncoder.FUNCTION_TYPE;
  242.          }
  243.          if(param1 is Object)
  244.          {
  245.             return SimpleXMLEncoder.OBJECT_TYPE;
  246.          }
  247.          return SimpleXMLEncoder.STRING_TYPE;
  248.       }
  249.    }
  250. }
  251.  
  252.