FLEX-35381 - Download from sourceforge using an old method instead PowerShell - 
it fixes problem with OSMF on Windows


Project: http://git-wip-us.apache.org/repos/asf/flex-utilities/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-utilities/commit/f82317b9
Tree: http://git-wip-us.apache.org/repos/asf/flex-utilities/tree/f82317b9
Diff: http://git-wip-us.apache.org/repos/asf/flex-utilities/diff/f82317b9

Branch: refs/heads/develop
Commit: f82317b9a87d75fc7d2241e29bc08f06b0a5dfb8
Parents: aa215f7
Author: Piotr Zarzycki <[email protected]>
Authored: Tue Apr 10 19:35:26 2018 +0200
Committer: Piotr Zarzycki <[email protected]>
Committed: Tue Apr 10 19:35:26 2018 +0200

----------------------------------------------------------------------
 .../src/org/apache/flex/ant/tags/Get.as         | 678 ++++++++++---------
 1 file changed, 340 insertions(+), 338 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/f82317b9/flex-installer/ant_on_air/src/org/apache/flex/ant/tags/Get.as
----------------------------------------------------------------------
diff --git a/flex-installer/ant_on_air/src/org/apache/flex/ant/tags/Get.as 
b/flex-installer/ant_on_air/src/org/apache/flex/ant/tags/Get.as
index 21709de..840f883 100644
--- a/flex-installer/ant_on_air/src/org/apache/flex/ant/tags/Get.as
+++ b/flex-installer/ant_on_air/src/org/apache/flex/ant/tags/Get.as
@@ -1,339 +1,341 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package org.apache.flex.ant.tags
-{
-    import flash.events.Event;
-    import flash.events.HTTPStatusEvent;
-    import flash.events.IOErrorEvent;
-    import flash.events.ProgressEvent;
-    import flash.events.SecurityErrorEvent;
-    import flash.filesystem.File;
-    import flash.filesystem.FileMode;
-    import flash.filesystem.FileStream;
-    import flash.net.LocalConnection;
-    import flash.net.URLLoader;
-    import flash.net.URLLoaderDataFormat;
-    import flash.net.URLRequest;
-    import flash.net.URLRequestHeader;
-    import flash.system.Capabilities;
-    import flash.utils.ByteArray;
-    
-    import mx.core.IFlexModuleFactory;
-    import mx.resources.ResourceManager;
-    
-    import org.apache.flex.ant.Ant;
-    import org.apache.flex.ant.tags.supportClasses.TaskHandler;
-    import org.apache.flex.utils.PowerShellFileDownloader;
-
-    [ResourceBundle("ant")]
-    [Mixin]
-    public class Get extends TaskHandler
-    {
-        public static function init(mf:IFlexModuleFactory):void
-        {
-            Ant.antTagProcessors["get"] = Get;
-        }
-        
-        private static const DOWNLOADS_SOURCEFORGE_NET:String = 
"http://downloads.sourceforge.net/";;
-        private static const SOURCEFORGE_NET:String = 
"http://sourceforge.net/";;
-        private static const DL_SOURCEFORGE_NET:String = 
".dl.sourceforge.net/";
-        private static const USE_MIRROR:String = "use_mirror=";
-        
-        public function Get()
-        {
-            super();
-        }
-        
-        private function get src():String
-        {
-            return getAttributeValue("@src");
-        }
-        
-        private function get dest():String
-        {
-            return getAttributeValue("@dest");
-        }
-        
-        private function get skipexisting():Boolean
-        {
-            return getAttributeValue("@skipexisting") == "true";
-        }
-        
-               private function get ignoreerrors():Boolean
-               {
-                       return getAttributeValue("@ignoreerrors") == "true";
-               }
-               
-        private var urlLoader:URLLoader;
-        
-        private var lastProgress:ProgressEvent;
-        private var powerShellFileDownloader:PowerShellFileDownloader;
-
-        override public function execute(callbackMode:Boolean, 
context:Object):Boolean
-        {
-            super.execute(callbackMode, context);
-            
-            // try forcing GC before each step
-            try {
-                var lc1:LocalConnection = new LocalConnection();
-                var lc2:LocalConnection = new LocalConnection();
-                
-                lc1.connect("name");
-                lc2.connect("name");
-            }
-            catch (error:Error)
-            {
-            }
-
-            var destFile:File = getDestFile();
-
-            if (skipexisting)
-            {
-                if (destFile.exists)
-                    return true;
-            }
-
-            var s:String = ResourceManager.getInstance().getString('ant', 
'GETTING');
-            s = s.replace("%1", src);
-            ant.output(ant.formatOutput("get", s));
-            s = ResourceManager.getInstance().getString('ant', 'GETTO');
-            s = s.replace("%1", destFile.nativePath);
-            ant.output(ant.formatOutput("get", s));
-            
-            var actualSrc:String = src;
-            var urlRequest:URLRequest = new URLRequest(actualSrc);
-            urlRequest.followRedirects = false;
-            urlRequest.manageCookies = false;
-            urlRequest.userAgent = "Java";     // required to get sourceforge 
redirects to do the right thing
-            urlLoader = new URLLoader();
-            urlLoader.load(urlRequest);
-            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
-            urlLoader.addEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
-            urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, 
statusHandler);
-            urlLoader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
-            urlLoader.addEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
-            urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
-            return false;
-        }
-
-        private function statusHandler(event:HTTPStatusEvent):void
-        {
-            if (event.status >= 300 && event.status < 400)
-            {
-                // redirect response
-                
-                urlLoader.close();
-                
-                // remove handlers from old request
-                urlLoader.removeEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
-                
urlLoader.removeEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, 
statusHandler);
-                urlLoader.removeEventListener(ProgressEvent.PROGRESS, 
progressHandler);
-                urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
-                
urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
-                
-                var newlocation:String;
-                for each (var header:URLRequestHeader in event.responseHeaders)
-                {
-                    if (header.name == "Location")
-                    {
-                        newlocation = header.value;
-                        break;
-                    }
-                }
-                if (newlocation)
-                {
-                    var srcIndex:int = src.indexOf(DOWNLOADS_SOURCEFORGE_NET);
-                    var sfIndex:int = newlocation.indexOf(SOURCEFORGE_NET);
-                    var mirrorIndex:int = newlocation.indexOf(USE_MIRROR);
-                    if (srcIndex == 0 && sfIndex == 0 && mirrorIndex != -1 && 
event.status == 307)
-                    {
-                        // SourceForge redirects AIR requests differently from 
Ant requests.
-                        // We can't control some of the additional headers 
that are sent
-                        // but that appears to make the difference.  Just pick 
out the
-                        // mirror and use it against dl.sourceforge.net
-                        var mirror:String = newlocation.substring(mirrorIndex 
+ USE_MIRROR.length);
-                        newlocation = "http://"; + mirror + DL_SOURCEFORGE_NET;
-                        newlocation += 
src.substring(DOWNLOADS_SOURCEFORGE_NET.length);
-                    }
-                    ant.output(ant.formatOutput("get", "Redirected to: " + 
newlocation));
-
-                    if (Capabilities.os.indexOf("Win") != -1)
-                    {
-                        var destination:String = getDestFile().nativePath;
-                        powerShellFileDownloader = new 
PowerShellFileDownloader();
-                        
powerShellFileDownloader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
-                        
powerShellFileDownloader.addEventListener(Event.COMPLETE, 
powershellDownloadCompleteHandler);
-                        
powerShellFileDownloader.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, 
standardErrorDataHandler);
-                        
powerShellFileDownloader.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,
 ioErrorEventHandler);
-                        powerShellFileDownloader.download(newlocation, 
destination);
-                    }
-                    else
-                    {
-                         var urlRequest:URLRequest = new 
URLRequest(newlocation);
-                         var refHeader:URLRequestHeader = new 
URLRequestHeader("Referer", src);
-                         urlRequest.requestHeaders.push(refHeader);
-                         urlRequest.manageCookies = false;
-                         urlRequest.followRedirects = false;
-                         urlRequest.userAgent = "Java";        // required to 
get sourceforge redirects to do the right thing
-                         urlLoader = new URLLoader();
-                         urlLoader.load(urlRequest);
-                         urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
-                         urlLoader.addEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
-                         
urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, statusHandler);
-                         urlLoader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
-                         urlLoader.addEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
-                         
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
-                    }
-                }
-            }
-        }
-
-        private function standardErrorDataHandler(event:ProgressEvent):void
-        {
-            if (lastProgress)
-                ant.output("ioError at: " + lastProgress.bytesLoaded + " of " 
+ lastProgress.bytesTotal);
-
-            ant.output(event.toString());
-            if (!ignoreerrors)
-            {
-                ant.project.failureMessage = ant.formatOutput("get", 
event.toString());
-                ant.project.status = false;
-            }
-            dispatchEvent(new Event(Event.COMPLETE));
-            event.preventDefault();
-            cleanUpPowerShellFileDownloader();
-        }
-
-        private function ioErrorEventHandler(event:IOErrorEvent):void
-        {
-            if (lastProgress)
-                ant.output("ioError at: " + lastProgress.bytesLoaded + " of " 
+ lastProgress.bytesTotal);
-            
-            ant.output(event.toString());
-                       if (!ignoreerrors)
-                       {
-                               ant.project.failureMessage = 
ant.formatOutput("get", event.toString());
-                   ant.project.status = false;
-                       }
-            dispatchEvent(new Event(Event.COMPLETE));
-            event.preventDefault();
-            urlLoader = null;
-            cleanUpPowerShellFileDownloader();
-        }
-        
-        private function securityErrorHandler(event:SecurityErrorEvent):void
-        {
-            ant.output(event.toString());
-                       if (!ignoreerrors)
-                       {
-                               ant.project.failureMessage = 
ant.formatOutput("get", event.toString());
-               ant.project.status = false;
-                       }
-            dispatchEvent(new Event(Event.COMPLETE));
-            event.preventDefault();
-                       urlLoader = null;
-        }
-        
-        private function progressHandler(event:ProgressEvent):void
-        {
-            lastProgress = event;
-            ant.progressClass = this;
-            ant.dispatchEvent(event);
-        }
-        
-        private function urlLoaderCompleteHandler(event:Event):void
-        {
-            var destFile:File = getDestFile();
-            if (destFile)
-            {
-                var fs:FileStream = new FileStream();
-                fs.open(destFile, FileMode.WRITE);
-                fs.writeBytes(urlLoader.data as ByteArray);
-                fs.close();
-            }
-
-            dispatchEvent(new Event(Event.COMPLETE));
-            urlLoader = null;
-        }
-        
-        private function powershellDownloadCompleteHandler(event:Event):void
-        {
-            ant.output("PowerShell download completed.");
-            dispatchEvent(new Event(Event.COMPLETE));
-            cleanUpPowerShellFileDownloader();
-        }
-
-        private function cleanUpPowerShellFileDownloader():void
-        {
-            if (powerShellFileDownloader)
-            {
-                
powerShellFileDownloader.removeEventListener(ProgressEvent.PROGRESS, 
progressHandler);
-                powerShellFileDownloader.removeEventListener(Event.COMPLETE, 
powershellDownloadCompleteHandler);
-                
powerShellFileDownloader.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA, 
standardErrorDataHandler);
-                
powerShellFileDownloader.removeEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,
 ioErrorEventHandler);
-                powerShellFileDownloader = null;
-            }
-        }
-
-        private function getDestFile():File
-        {
-            try {
-                var destFile:File = 
File.applicationDirectory.resolvePath(dest);
-            } 
-            catch (e:Error)
-            {
-                ant.output(dest);
-                ant.output(e.message);
-                if (failonerror)
-                               {
-                                       ant.project.failureMessage = 
ant.formatOutput("get", e.message);
-                    ant.project.status = false;
-                               }
-                return null;                                                   
-            }
-            
-            if (destFile.isDirectory)
-            {
-                var fileName:String = src;
-                var c:int = fileName.indexOf("?");
-                if (c != -1)
-                    fileName = fileName.substring(0, c);
-                c = fileName.lastIndexOf("/");
-                if (c != -1)
-                    fileName = fileName.substr(c + 1);
-                try {
-                    destFile = destFile.resolvePath(fileName);
-                } 
-                catch (e:Error)
-                {
-                    ant.output(fileName);
-                    ant.output(e.message);
-                    if (failonerror)
-                                       {
-                                               ant.project.failureMessage = 
ant.formatOutput("get", e.message);                                             
   
-                        ant.project.status = false;
-                                       }
-                    return null;                                               
        
-                }
-                
-            }
-            return destFile;
-        }
-    }
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.ant.tags
+{
+    import flash.events.Event;
+    import flash.events.HTTPStatusEvent;
+    import flash.events.IOErrorEvent;
+    import flash.events.ProgressEvent;
+    import flash.events.SecurityErrorEvent;
+    import flash.filesystem.File;
+    import flash.filesystem.FileMode;
+    import flash.filesystem.FileStream;
+    import flash.net.LocalConnection;
+    import flash.net.URLLoader;
+    import flash.net.URLLoaderDataFormat;
+    import flash.net.URLRequest;
+    import flash.net.URLRequestHeader;
+    import flash.system.Capabilities;
+    import flash.utils.ByteArray;
+    
+    import mx.core.IFlexModuleFactory;
+    import mx.resources.ResourceManager;
+    
+    import org.apache.flex.ant.Ant;
+    import org.apache.flex.ant.tags.supportClasses.TaskHandler;
+    import org.apache.flex.utils.PowerShellFileDownloader;
+
+    [ResourceBundle("ant")]
+    [Mixin]
+    public class Get extends TaskHandler
+    {
+        public static function init(mf:IFlexModuleFactory):void
+        {
+            Ant.antTagProcessors["get"] = Get;
+        }
+        
+        private static const DOWNLOADS_SOURCEFORGE_NET:String = 
"http://downloads.sourceforge.net/";;
+        private static const SOURCEFORGE_NET:String = 
"http://sourceforge.net/";;
+        private static const SOURCEFORGE_NET_HTTPS:String = 
"https://sourceforge.net/";;
+        private static const DL_SOURCEFORGE_NET:String = 
".dl.sourceforge.net/";
+        private static const USE_MIRROR:String = "use_mirror=";
+        
+        public function Get()
+        {
+            super();
+        }
+        
+        private function get src():String
+        {
+            return getAttributeValue("@src");
+        }
+        
+        private function get dest():String
+        {
+            return getAttributeValue("@dest");
+        }
+        
+        private function get skipexisting():Boolean
+        {
+            return getAttributeValue("@skipexisting") == "true";
+        }
+        
+               private function get ignoreerrors():Boolean
+               {
+                       return getAttributeValue("@ignoreerrors") == "true";
+               }
+               
+        private var urlLoader:URLLoader;
+        
+        private var lastProgress:ProgressEvent;
+        private var powerShellFileDownloader:PowerShellFileDownloader;
+
+        override public function execute(callbackMode:Boolean, 
context:Object):Boolean
+        {
+            super.execute(callbackMode, context);
+            
+            // try forcing GC before each step
+            try {
+                var lc1:LocalConnection = new LocalConnection();
+                var lc2:LocalConnection = new LocalConnection();
+                
+                lc1.connect("name");
+                lc2.connect("name");
+            }
+            catch (error:Error)
+            {
+            }
+
+            var destFile:File = getDestFile();
+
+            if (skipexisting)
+            {
+                if (destFile.exists)
+                    return true;
+            }
+
+            var s:String = ResourceManager.getInstance().getString('ant', 
'GETTING');
+            s = s.replace("%1", src);
+            ant.output(ant.formatOutput("get", s));
+            s = ResourceManager.getInstance().getString('ant', 'GETTO');
+            s = s.replace("%1", destFile.nativePath);
+            ant.output(ant.formatOutput("get", s));
+            
+            var actualSrc:String = src;
+            var urlRequest:URLRequest = new URLRequest(actualSrc);
+            urlRequest.followRedirects = false;
+            urlRequest.manageCookies = false;
+            urlRequest.userAgent = "Java";     // required to get sourceforge 
redirects to do the right thing
+            urlLoader = new URLLoader();
+            urlLoader.load(urlRequest);
+            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
+            urlLoader.addEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
+            urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, 
statusHandler);
+            urlLoader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
+            urlLoader.addEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
+            urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
+            return false;
+        }
+
+        private function statusHandler(event:HTTPStatusEvent):void
+        {
+            if (event.status >= 300 && event.status < 400)
+            {
+                // redirect response
+                
+                urlLoader.close();
+                
+                // remove handlers from old request
+                urlLoader.removeEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
+                
urlLoader.removeEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, 
statusHandler);
+                urlLoader.removeEventListener(ProgressEvent.PROGRESS, 
progressHandler);
+                urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
+                
urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
+                
+                var newlocation:String;
+                for each (var header:URLRequestHeader in event.responseHeaders)
+                {
+                    if (header.name == "Location")
+                    {
+                        newlocation = header.value;
+                        break;
+                    }
+                }
+                if (newlocation)
+                {
+                    var srcIndex:int = src.indexOf(DOWNLOADS_SOURCEFORGE_NET);
+                    var sfIndex:int = newlocation.indexOf(SOURCEFORGE_NET);
+                    var mirrorIndex:int = newlocation.indexOf(USE_MIRROR);
+                    var isSourceForge:Boolean = 
newlocation.indexOf(SOURCEFORGE_NET_HTTPS) > -1;
+                    if (srcIndex == 0 && sfIndex == 0 && mirrorIndex != -1 && 
event.status == 307)
+                    {
+                        // SourceForge redirects AIR requests differently from 
Ant requests.
+                        // We can't control some of the additional headers 
that are sent
+                        // but that appears to make the difference.  Just pick 
out the
+                        // mirror and use it against dl.sourceforge.net
+                        var mirror:String = newlocation.substring(mirrorIndex 
+ USE_MIRROR.length);
+                        newlocation = "http://"; + mirror + DL_SOURCEFORGE_NET;
+                        newlocation += 
src.substring(DOWNLOADS_SOURCEFORGE_NET.length);
+                    }
+                    ant.output(ant.formatOutput("get", "Redirected to: " + 
newlocation));
+
+                    if (Capabilities.os.indexOf("Win") != -1 && !isSourceForge)
+                    {
+                        var destination:String = getDestFile().nativePath;
+                        powerShellFileDownloader = new 
PowerShellFileDownloader();
+                        
powerShellFileDownloader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
+                        
powerShellFileDownloader.addEventListener(Event.COMPLETE, 
powershellDownloadCompleteHandler);
+                        
powerShellFileDownloader.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, 
standardErrorDataHandler);
+                        
powerShellFileDownloader.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,
 ioErrorEventHandler);
+                        powerShellFileDownloader.download(newlocation, 
destination);
+                    }
+                    else
+                    {
+                         var urlRequest:URLRequest = new 
URLRequest(newlocation);
+                         var refHeader:URLRequestHeader = new 
URLRequestHeader("Referer", src);
+                         urlRequest.requestHeaders.push(refHeader);
+                         urlRequest.manageCookies = false;
+                         urlRequest.followRedirects = false;
+                         urlRequest.userAgent = "Java";        // required to 
get sourceforge redirects to do the right thing
+                         urlLoader = new URLLoader();
+                         urlLoader.load(urlRequest);
+                         urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
+                         urlLoader.addEventListener(Event.COMPLETE, 
urlLoaderCompleteHandler);
+                         
urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, statusHandler);
+                         urlLoader.addEventListener(ProgressEvent.PROGRESS, 
progressHandler);
+                         urlLoader.addEventListener(IOErrorEvent.IO_ERROR, 
ioErrorEventHandler);
+                         
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 
securityErrorHandler);
+                    }
+                }
+            }
+        }
+
+        private function standardErrorDataHandler(event:ProgressEvent):void
+        {
+            if (lastProgress)
+                ant.output("ioError at: " + lastProgress.bytesLoaded + " of " 
+ lastProgress.bytesTotal);
+
+            ant.output(event.toString());
+            if (!ignoreerrors)
+            {
+                ant.project.failureMessage = ant.formatOutput("get", 
event.toString());
+                ant.project.status = false;
+            }
+            dispatchEvent(new Event(Event.COMPLETE));
+            event.preventDefault();
+            cleanUpPowerShellFileDownloader();
+        }
+
+        private function ioErrorEventHandler(event:IOErrorEvent):void
+        {
+            if (lastProgress)
+                ant.output("ioError at: " + lastProgress.bytesLoaded + " of " 
+ lastProgress.bytesTotal);
+            
+            ant.output(event.toString());
+                       if (!ignoreerrors)
+                       {
+                               ant.project.failureMessage = 
ant.formatOutput("get", event.toString());
+                   ant.project.status = false;
+                       }
+            dispatchEvent(new Event(Event.COMPLETE));
+            event.preventDefault();
+            urlLoader = null;
+            cleanUpPowerShellFileDownloader();
+        }
+        
+        private function securityErrorHandler(event:SecurityErrorEvent):void
+        {
+            ant.output(event.toString());
+                       if (!ignoreerrors)
+                       {
+                               ant.project.failureMessage = 
ant.formatOutput("get", event.toString());
+               ant.project.status = false;
+                       }
+            dispatchEvent(new Event(Event.COMPLETE));
+            event.preventDefault();
+                       urlLoader = null;
+        }
+        
+        private function progressHandler(event:ProgressEvent):void
+        {
+            lastProgress = event;
+            ant.progressClass = this;
+            ant.dispatchEvent(event);
+        }
+        
+        private function urlLoaderCompleteHandler(event:Event):void
+        {
+            var destFile:File = getDestFile();
+            if (destFile)
+            {
+                var fs:FileStream = new FileStream();
+                fs.open(destFile, FileMode.WRITE);
+                fs.writeBytes(urlLoader.data as ByteArray);
+                fs.close();
+            }
+
+            dispatchEvent(new Event(Event.COMPLETE));
+            urlLoader = null;
+        }
+        
+        private function powershellDownloadCompleteHandler(event:Event):void
+        {
+            ant.output("PowerShell download completed.");
+            dispatchEvent(new Event(Event.COMPLETE));
+            cleanUpPowerShellFileDownloader();
+        }
+
+        private function cleanUpPowerShellFileDownloader():void
+        {
+            if (powerShellFileDownloader)
+            {
+                
powerShellFileDownloader.removeEventListener(ProgressEvent.PROGRESS, 
progressHandler);
+                powerShellFileDownloader.removeEventListener(Event.COMPLETE, 
powershellDownloadCompleteHandler);
+                
powerShellFileDownloader.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA, 
standardErrorDataHandler);
+                
powerShellFileDownloader.removeEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,
 ioErrorEventHandler);
+                powerShellFileDownloader = null;
+            }
+        }
+
+        private function getDestFile():File
+        {
+            try {
+                var destFile:File = 
File.applicationDirectory.resolvePath(dest);
+            } 
+            catch (e:Error)
+            {
+                ant.output(dest);
+                ant.output(e.message);
+                if (failonerror)
+                               {
+                                       ant.project.failureMessage = 
ant.formatOutput("get", e.message);
+                    ant.project.status = false;
+                               }
+                return null;                                                   
+            }
+            
+            if (destFile.isDirectory)
+            {
+                var fileName:String = src;
+                var c:int = fileName.indexOf("?");
+                if (c != -1)
+                    fileName = fileName.substring(0, c);
+                c = fileName.lastIndexOf("/");
+                if (c != -1)
+                    fileName = fileName.substr(c + 1);
+                try {
+                    destFile = destFile.resolvePath(fileName);
+                } 
+                catch (e:Error)
+                {
+                    ant.output(fileName);
+                    ant.output(e.message);
+                    if (failonerror)
+                                       {
+                                               ant.project.failureMessage = 
ant.formatOutput("get", e.message);                                             
   
+                        ant.project.status = false;
+                                       }
+                    return null;                                               
        
+                }
+                
+            }
+            return destFile;
+        }
+    }
 }
\ No newline at end of file

Reply via email to