home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / air / update / descriptors / StateDescriptor.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  9.8 KB  |  318 lines

  1. package air.update.descriptors
  2. {
  3.    import air.update.logging.Logger;
  4.    import air.update.utils.Constants;
  5.    import flash.filesystem.File;
  6.    
  7.    public class StateDescriptor
  8.    {
  9.       private static var logger:Logger = Logger.getLogger("air.update.descriptors.StateDescriptor");
  10.       
  11.       public static const NAMESPACE_STATE_1_0:Namespace = new Namespace("http://ns.adobe.com/air/framework/update/state/1.0");
  12.       
  13.       private var defaultNS:Namespace;
  14.       
  15.       private var xml:XML;
  16.       
  17.       public function StateDescriptor(param1:XML)
  18.       {
  19.          super();
  20.          this.xml = param1;
  21.          this.defaultNS = param1.namespace();
  22.       }
  23.       
  24.       public static function isThisVersion(param1:Namespace) : Boolean
  25.       {
  26.          return Boolean(param1) && param1.uri == NAMESPACE_STATE_1_0.uri;
  27.       }
  28.       
  29.       public static function defaultState() : StateDescriptor
  30.       {
  31.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  32.          var _loc1_:XML = <state>
  33.                     <lastCheck>{new Date()}</lastCheck>
  34.                 </state>;
  35.          return new StateDescriptor(_loc1_);
  36.       }
  37.       
  38.       public function set lastCheckDate(param1:Date) : void
  39.       {
  40.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  41.          this.xml.lastCheck = param1.toString();
  42.       }
  43.       
  44.       public function set previousVersion(param1:String) : void
  45.       {
  46.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  47.          this.xml.previousVersion = param1;
  48.       }
  49.       
  50.       private function fileToString_defaultEmpty(param1:File) : String
  51.       {
  52.          default xml namespace = this.defaultNS;
  53.          if(Boolean(param1) && Boolean(param1.nativePath))
  54.          {
  55.             return param1.nativePath;
  56.          }
  57.          return "";
  58.       }
  59.       
  60.       public function get storage() : File
  61.       {
  62.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  63.          return this.stringToFile_defaultNull(this.xml.storage.toString());
  64.       }
  65.       
  66.       public function get failedUpdates() : Array
  67.       {
  68.          var _loc2_:XML = null;
  69.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  70.          var _loc1_:Array = new Array();
  71.          for each(_loc2_ in this.xml.failed.*)
  72.          {
  73.             _loc1_.push(_loc2_);
  74.          }
  75.          return _loc1_;
  76.       }
  77.       
  78.       public function removeAllFailedUpdates() : void
  79.       {
  80.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  81.          this.xml.failed = <failed/>;
  82.       }
  83.       
  84.       public function validate() : void
  85.       {
  86.          default xml namespace = this.defaultNS;
  87.          if(!isThisVersion(this.defaultNS))
  88.          {
  89.             throw new Error("unknown state version",Constants.ERROR_STATE_UNKNOWN);
  90.          }
  91.          if(this.xml.lastCheck.toString() == "")
  92.          {
  93.             throw new Error("lastCheck must have a non-empty value",Constants.ERROR_LAST_CHECK_MISSING);
  94.          }
  95.          if(!this.validateDate(this.xml.lastCheck.toString()))
  96.          {
  97.             throw new Error("Invalid date format for state/lastCheck",Constants.ERROR_LAST_CHECK_INVALID);
  98.          }
  99.          if(this.xml.previousVersion.toString() != "" && !this.validateText(this.xml.previousVersion))
  100.          {
  101.             throw new Error("Illegal value for state/previousVersion",Constants.ERROR_PREV_VERSION_INVALID);
  102.          }
  103.          if(this.xml.currentVersion.toString() != "" && !this.validateText(this.xml.currentVersion))
  104.          {
  105.             throw new Error("Illegal value for state/currentVersion",Constants.ERROR_CURRENT_VERSION_INVALID);
  106.          }
  107.          if(this.xml.storage.toString() != "" && (!this.validateText(this.xml.storage) || !this.validateFile(this.xml.storage.toString())))
  108.          {
  109.             throw new Error("Illegal value for state/storage",Constants.ERROR_STORAGE_INVALID);
  110.          }
  111.          if(["","true","false"].indexOf(this.xml.updaterLaunched.toString()) == -1)
  112.          {
  113.             throw new Error("Illegal value \"" + this.xml.updaterLaunched.toString() + "\" for state/updaterLaunched.",Constants.ERROR_LAUNCHED_INVALID);
  114.          }
  115.          if(!this.validateFailed(this.xml.failed))
  116.          {
  117.             throw new Error("Illegal values for state/failed",Constants.ERROR_FAILED_INVALID);
  118.          }
  119.          var _loc1_:int = 0;
  120.          if(this.previousVersion != "")
  121.          {
  122.             _loc1_++;
  123.          }
  124.          if(this.currentVersion != "")
  125.          {
  126.             _loc1_++;
  127.          }
  128.          if(this.storage)
  129.          {
  130.             _loc1_++;
  131.          }
  132.          if(_loc1_ > 0 && _loc1_ != 3)
  133.          {
  134.             throw new Error("All state/previousVersion, state/currentVersion, state/storage, state/updaterLaunched  must be set",Constants.ERROR_VERSIONS_INVALID);
  135.          }
  136.       }
  137.       
  138.       public function get currentVersion() : String
  139.       {
  140.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  141.          return this.xml.currentVersion.toString();
  142.       }
  143.       
  144.       public function get lastCheckDate() : Date
  145.       {
  146.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  147.          return this.stringToDate_defaultNull(this.xml.lastCheck.toString());
  148.       }
  149.       
  150.       public function getXML() : XML
  151.       {
  152.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  153.          return this.xml;
  154.       }
  155.       
  156.       private function validateText(param1:XMLList) : Boolean
  157.       {
  158.          default xml namespace = this.defaultNS;
  159.          if(!param1.hasSimpleContent())
  160.          {
  161.             return false;
  162.          }
  163.          if(param1.length() > 1)
  164.          {
  165.             return false;
  166.          }
  167.          return true;
  168.       }
  169.       
  170.       private function validateDate(param1:String) : Boolean
  171.       {
  172.          var result:Boolean;
  173.          var n:Number = NaN;
  174.          var dateString:String = param1;
  175.          default xml namespace = this.defaultNS;
  176.          result = false;
  177.          try
  178.          {
  179.             n = Date.parse(dateString);
  180.             if(!isNaN(n))
  181.             {
  182.                result = true;
  183.             }
  184.          }
  185.          catch(err:Error)
  186.          {
  187.             result = false;
  188.          }
  189.          return result;
  190.       }
  191.       
  192.       private function stringToBoolean_defaultFalse(param1:String) : Boolean
  193.       {
  194.          default xml namespace = this.defaultNS;
  195.          switch(param1)
  196.          {
  197.             case "true":
  198.             case "1":
  199.                return true;
  200.             case "":
  201.             case "false":
  202.             case "0":
  203.                return false;
  204.             default:
  205.                return false;
  206.          }
  207.       }
  208.       
  209.       public function addFailedUpdate(param1:String) : void
  210.       {
  211.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  212.          if(this.xml.failed.length() == 0)
  213.          {
  214.             this.xml.failed = <failed/>;
  215.          }
  216.          this.xml.failed.appendChild(<version>{param1}</version>);
  217.       }
  218.       
  219.       public function get previousVersion() : String
  220.       {
  221.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  222.          return this.xml.previousVersion.toString();
  223.       }
  224.       
  225.       private function stringToDate_defaultNull(param1:String) : Date
  226.       {
  227.          default xml namespace = this.defaultNS;
  228.          var _loc2_:Date = null;
  229.          if(param1)
  230.          {
  231.             _loc2_ = new Date(param1);
  232.          }
  233.          return _loc2_;
  234.       }
  235.       
  236.       private function stringToFile_defaultNull(param1:String) : File
  237.       {
  238.          default xml namespace = this.defaultNS;
  239.          if(!param1)
  240.          {
  241.             return null;
  242.          }
  243.          return new File(param1);
  244.       }
  245.       
  246.       private function validateFile(param1:String) : Boolean
  247.       {
  248.          var result:Boolean;
  249.          var file:File = null;
  250.          var fileString:String = param1;
  251.          default xml namespace = this.defaultNS;
  252.          result = false;
  253.          try
  254.          {
  255.             file = new File(fileString);
  256.             result = true;
  257.          }
  258.          catch(err:Error)
  259.          {
  260.             result = false;
  261.          }
  262.          return result;
  263.       }
  264.       
  265.       public function set storage(param1:File) : void
  266.       {
  267.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  268.          this.xml.storage = this.fileToString_defaultEmpty(param1);
  269.       }
  270.       
  271.       private function validateFailed(param1:XMLList) : Boolean
  272.       {
  273.          var _loc3_:XML = null;
  274.          default xml namespace = this.defaultNS;
  275.          if(param1.length() > 1)
  276.          {
  277.             return false;
  278.          }
  279.          var _loc2_:XMLList = param1.*;
  280.          for each(_loc3_ in _loc2_)
  281.          {
  282.             if(_loc3_.name() == null)
  283.             {
  284.                return false;
  285.             }
  286.             if(_loc3_.name().localName != "version")
  287.             {
  288.                return false;
  289.             }
  290.             if(!_loc3_.hasSimpleContent())
  291.             {
  292.                return false;
  293.             }
  294.          }
  295.          return true;
  296.       }
  297.       
  298.       public function get updaterLaunched() : Boolean
  299.       {
  300.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  301.          return this.stringToBoolean_defaultFalse(this.xml.updaterLaunched.toString());
  302.       }
  303.       
  304.       public function set updaterLaunched(param1:Boolean) : void
  305.       {
  306.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  307.          this.xml.updaterLaunched = param1.toString();
  308.       }
  309.       
  310.       public function set currentVersion(param1:String) : void
  311.       {
  312.          default xml namespace = StateDescriptor.NAMESPACE_STATE_1_0;
  313.          this.xml.currentVersion = param1;
  314.       }
  315.    }
  316. }
  317.  
  318.