Merge remote-tracking branch 'origin/develop' into as3httpclient-work Conflicts: installer/src/InstallApacheFlex.mxml
diff --git a/installer/README b/installer/README index 7a403fd..5a56ba7 100644 --- a/installer/README +++ b/installer/README
@@ -135,8 +135,8 @@ 2. In the installer directory run: ant get-as3commons.swc - This step downloads the required as3commons library and saves it in the libs - directory. + ant get-as3httpdclient.swc + These step downloads the required libraries and saves it in the libs directory. 3. If using Adobe Flash Builder, add a linked resource called: APACHE_FLEX_UTILITIES_ROOT
diff --git a/installer/build.xml b/installer/build.xml index 24288dc..e052051 100644 --- a/installer/build.xml +++ b/installer/build.xml
@@ -296,7 +296,20 @@ --> </target> - <target name="compile" depends="get-as3commons.swc" + <target name="check-as3httpclient.swc"> + <available file="${LIBRARY_DIR}/as3httpclient.swc" property="as3httpclient.swc.present"/> + </target> + + <!-- This has a BSD license which is a reciprocal license with the Apache v2 license. --> + <target name="get-as3httpclient.swc" depends="check-as3commons.swc" unless="as3httpclient.swc.present" + description="Download as3httpclient.swc"> + <mkdir dir="${LIBRARY_DIR}"/> + <get src="https://github.com/quetwo/as3httpclient/releases/download/1.0/as3httpclient.swc" + dest="${LIBRARY_DIR}/as3httpclient.swc" + verbose="true"/> + </target> + + <target name="compile" depends="get-as3commons.swc, get-as3httpclient.swc" description="Compiles the AIR application to a SWF file and places SWF in a temp directory to be packaged."> <mxmlc file="${SOURCE_DIR}/${APP_NAME}.${APP_EXTENSION}" output="${BUILD_DIR}/${APP_NAME}.swf"
diff --git a/installer/src/InstallApacheFlex.mxml b/installer/src/InstallApacheFlex.mxml index 0fd98ac..6c91555 100644 --- a/installer/src/InstallApacheFlex.mxml +++ b/installer/src/InstallApacheFlex.mxml
@@ -51,38 +51,38 @@ <fx:Component className="CacheDialog" > <s:TitleWindow title="Download Cache Configuration" width="400" height="130" backgroundColor="0xDDDDDD" close="closeUp()"> - <fx:Script> - <![CDATA[ - import mx.managers.PopUpManager; - - private function browseFolders():void - { - var file:File; - if (folder.text.length > 0) - file = File.applicationStorageDirectory.resolvePath(folder.text); - else - file = File.applicationStorageDirectory; - file.browseForDirectory("Download Cache Folder"); - file.addEventListener(Event.SELECT, folderSelected); - } - - private function folderSelected(event:Event):void - { - folder.text = event.target.nativePath; - } - - private function closeUp():void - { - PopUpManager.removePopUp(this); - } - - private function updateCache():void - { - dispatchEvent(new Event(Event.COMPLETE)); - closeUp(); - } - ]]> - </fx:Script> + <fx:Script> + <![CDATA[ + import mx.managers.PopUpManager; + + private function browseFolders():void + { + var file:File; + if (folder.text.length > 0) + file = File.applicationStorageDirectory.resolvePath(folder.text); + else + file = File.applicationStorageDirectory; + file.browseForDirectory("Download Cache Folder"); + file.addEventListener(Event.SELECT, folderSelected); + } + + private function folderSelected(event:Event):void + { + folder.text = event.target.nativePath; + } + + private function closeUp():void + { + PopUpManager.removePopUp(this); + } + + private function updateCache():void + { + dispatchEvent(new Event(Event.COMPLETE)); + closeUp(); + } + ]]> + </fx:Script> <s:VGroup left="10" top="10" right="10"> <s:CheckBox id="cb" label="Cache Downloaded Files" /> <s:HGroup width="100%" verticalAlign="baseline"> @@ -98,3321 +98,3546 @@ </s:TitleWindow> </fx:Component> </fx:Declarations> - <fx:Script><![CDATA[ - import flash.globalization.LocaleID; - import flash.globalization.StringTools; + <fx:Script><![CDATA[ + import flash.globalization.LocaleID; + import flash.globalization.StringTools; - import mx.collections.ArrayCollection; - import mx.core.IFlexDisplayObject; - import mx.events.FlexEvent; - import mx.events.PropertyChangeEvent; - import mx.managers.CursorManager; - import mx.managers.PopUpManager; - import mx.resources.ResourceBundle; - import mx.rpc.events.FaultEvent; - import mx.rpc.events.ResultEvent; - import mx.rpc.http.HTTPService; - import mx.utils.StringUtil; + import mx.collections.ArrayCollection; + import mx.core.IFlexDisplayObject; + import mx.events.FlexEvent; + import mx.events.PropertyChangeEvent; + import mx.managers.CursorManager; + import mx.managers.PopUpManager; + import mx.resources.ResourceBundle; + import mx.rpc.events.FaultEvent; + import mx.rpc.events.ResultEvent; + import mx.rpc.http.HTTPService; + import mx.utils.StringUtil; - // This force-links all of the ant task handlers into the Installer. - // The Installer doesn't use most of them directly but some script - // it runs might. - import AntClasses; AntClasses; - import org.apache.flex.ant.Ant; - import org.apache.flex.packageflexsdk.model.InstallerComponentVO; - import org.apache.flex.packageflexsdk.model.OS; - import org.apache.flex.packageflexsdk.resource.ViewResourceConstants; - import org.apache.flex.packageflexsdk.util.CalcButtonWidth; - import org.apache.flex.packageflexsdk.util.MD5CompareUtil; - import org.apache.flex.packageflexsdk.view.UpdaterDialog; - import org.apache.flex.packageflexsdk.view.components.AdobeLicense; - import org.apache.flex.packageflexsdk.view.components.ConsoleWindow; - import org.apache.flex.packageflexsdk.view.components.MPLLicense; - import org.apache.flex.packageflexsdk.view.events.InstallItemSelectionEvent; - import org.apache.flex.utilities.common.Constants; - import org.apache.flex.utilities.common.MirrorURLUtil; - import org.apache.flex.utilities.common.interfaces.ILog; - import org.apache.flex.utilities.common.vo.LogMessagesVO; - import org.as3commons.zip.Zip; - import org.as3commons.zip.ZipEvent; - import org.as3commons.zip.ZipFile; + import org.apache.flex.packageflexsdk.util.ApacheURLLoader; - import spark.events.IndexChangeEvent; - import spark.events.TextOperationEvent; + import spark.events.IndexChangeEvent; + import spark.events.TextOperationEvent; - import ws.tink.spark.controls.StepItem; - import ws.tink.spark.skins.controls.InstallApacheFlexSkin; + // This force-links all of the ant task handlers into the Installer. + // The Installer doesn't use most of them directly but some script + // it runs might. + import AntClasses; - // embed us strings so we can always have them if we can't get to the locale files - [Embed(source="properties/en_US.properties", mimeType="application/octet-stream")] - private var en_US_Properties:Class; + AntClasses; - private var cleanedUp:Boolean; + import org.apache.flex.ant.Ant; + import org.apache.flex.ant.tags.Checksum; + import org.apache.flex.ant.tags.Copy; + import org.apache.flex.ant.tags.Get; + import org.apache.flex.packageflexsdk.model.InstallerComponentVO; + import org.apache.flex.packageflexsdk.model.OS; + import org.apache.flex.packageflexsdk.resource.ViewResourceConstants; + import org.apache.flex.packageflexsdk.util.CalcButtonWidth; + import org.apache.flex.packageflexsdk.util.MD5CompareUtil; + import org.apache.flex.packageflexsdk.view.UpdaterDialog; + import org.apache.flex.packageflexsdk.view.components.AdobeLicense; + import org.apache.flex.packageflexsdk.view.components.ConsoleWindow; + import org.apache.flex.packageflexsdk.view.components.MPLLicense; + import org.apache.flex.packageflexsdk.view.events.InstallItemSelectionEvent; + import org.apache.flex.utilities.common.Constants; + import org.apache.flex.utilities.common.MirrorURLUtil; + import org.apache.flex.utilities.common.interfaces.ILog; + import org.apache.flex.utilities.common.vo.LogMessagesVO; + import org.as3commons.zip.Zip; + import org.as3commons.zip.ZipEvent; + import org.as3commons.zip.ZipFile; + import org.osmf.utils.OSMFStrings; - private var _mirrorURLCGI:String; - private var _useMirror:Boolean = true; - private var _latestVersion:String; - private var loggedVersion:Boolean; - private var logFile:String; - private var debugMode:Boolean = false; - private var logProgressEvents:Boolean = false; - private var showDevBuilds:Boolean = false; - private var usingDownloadCache:Boolean; - private var downloadCacheFolder:String; - private var userDefaultLanguage:String; - private var firstTime:Boolean = true; - private var legacy:Boolean = true; - private var nocache:Boolean = true; - private var wasAborted:Boolean; + import ws.tink.spark.controls.StepItem; + import ws.tink.spark.skins.controls.InstallApacheFlexSkin; - public var installerAppPath:String; - public var installerAppFileName:String; + // embed us strings so we can always have them if we can't get to the locale files + [Embed(source="properties/en_US.properties", mimeType="application/octet-stream")] + private var en_US_Properties:Class; - // loader needs to be in instance var otherwise it can get GC'd. - // We only load one thing at a time, so we can all share this - // var - private var loader:URLLoader; + private var cleanedUp:Boolean; - /** - * Utility Singleton Instances - */ - private var _md5CompareUtil:MD5CompareUtil = MD5CompareUtil.instance; - private var _mirrorURLUtil:MirrorURLUtil = MirrorURLUtil.instance; + private var _mirrorURLCGI:String; + private var _useMirror:Boolean = true; + private var _latestVersion:String; + private var loggedVersion:Boolean; + private var logFile:String; + private var debugMode:Boolean = false; + private var logProgressEvents:Boolean = false; + private var showDevBuilds:Boolean = false; + private var usingDownloadCache:Boolean; + private var downloadCacheFolder:String; + private var userDefaultLanguage:String; + private var firstTime:Boolean = true; + private var legacy:Boolean = true; + private var nocache:Boolean = true; + private var wasAborted:Boolean; + private var newSDKSelected:Boolean = true; - /** - * Apache Flex binary distribution - * - * Values stored in sdk-installer-config.xml edit file to change - * - */ - private var APACHE_FLEX_BIN_DISTRO_PATH:String; - private var APACHE_FLEX_BIN_DISTRO_FILE:String; - private var APACHE_FLEX_BIN_INSTALLER_FILE:String; - private var APACHE_FLEX_BIN_DISTRO_FILE_SHORT:String; - private var APACHE_FLEX_BIN_DISTRO_URL:String; - private var APACHE_FLEX_BIN_INSTALLER_URL:String; - [Bindable] - private var APACHE_FLEX_BIN_DISTRO_VERSION:String = ""; - [Bindable] - private var APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY:String = ""; + public var installerAppPath:String; + public var installerAppFileName:String; - /** - * Adobe AIR SDK - * - * Values stored in sdk-installer-config.xml edit file to change - * - */ - [Bindable] - private var AIR_VERSIONS:ArrayCollection = new ArrayCollection(); - private var AIR_VERSION:String = "14.0"; - private var ADOBE_AIR_SDK_WIN_FILE:String; - private var ADOBE_AIR_SDK_WIN_URL:String; - private var ADOBE_AIR_SDK_MAC_FILE:String; - private var ADOBE_AIR_SDK_MAC_URL:String; - private var ADOBE_AIR_SDK_LINUX_FILE:String; - private var ADOBE_AIR_SDK_LINUX_URL:String; + // loader needs to be in instance var otherwise it can get GC'd. + // We only load one thing at a time, so we can all share this + // var + private var loader:ApacheURLLoader; - /** - * Adobe Flash Player - * - * Values stored in sdk-installer-config.xml edit file to change - * - */ - [Bindable] - private var FLASH_PLAYER_VERSIONS:ArrayCollection = new ArrayCollection(); - private var FLASH_PLAYER_VERSION:String = "11.1"; - private var FLASH_PLAYER_SWF_VERSION:String = "14"; - private var ADOBE_FB_GLOBALPLAYER_SWC_FILE:String; - private var ADOBE_FB_GLOBALPLAYER_SWC_URL:String; + /** + * Utility Singleton Instances + */ + private var _md5CompareUtil:MD5CompareUtil = MD5CompareUtil.instance; + private var _mirrorURLUtil:MirrorURLUtil = MirrorURLUtil.instance; - /** - * Apache Flex - * - * Values stored in sdk-installer-config.xml edit file to change - * - */ - [Bindable] - private var FLEX_VERSIONS:ArrayCollection = new ArrayCollection(); + /** + * Apache Flex binary distribution + * + * Values stored in sdk-installer-config.xml edit file to change + * + */ + private var APACHE_FLEX_BIN_DISTRO_PATH:String; + private var APACHE_FLEX_BIN_DISTRO_FILE:String; + private var APACHE_FLEX_BIN_INSTALLER_FILE:String; + private var APACHE_FLEX_BIN_DISTRO_FILE_SHORT:String; + private var APACHE_FLEX_BIN_DISTRO_URL:String; + private var APACHE_FLEX_BIN_INSTALLER_URL:String; + [Bindable] + private var APACHE_FLEX_BIN_DISTRO_VERSION:String = ""; + [Bindable] + private var APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY:String = ""; - /** - * - * SwfObject - * - */ - private var SWF_OBJECT_FILE:String; - private var SWF_OBJECT_URL:String; + /** + * Adobe AIR SDK + * + * Values stored in sdk-installer-config.xml edit file to change + * + */ + [Bindable] + private var AIR_VERSIONS:ArrayCollection = new ArrayCollection(); + private var AIR_VERSION:String = "14.0"; + private var ADOBE_AIR_SDK_WIN_FILE:String; + private var ADOBE_AIR_SDK_WIN_URL:String; + private var ADOBE_AIR_SDK_MAC_FILE:String; + private var ADOBE_AIR_SDK_MAC_URL:String; + private var ADOBE_AIR_SDK_LINUX_FILE:String; + private var ADOBE_AIR_SDK_LINUX_URL:String; - /** - * Optional installs - * - */ - private var OSMF_SWC_FILE:String; - private var OSMF_SWC_URL:String; - private var OSMF_SWF_FILE:String = "osmf.swf"; + /** + * Adobe Flash Player + * + * Values stored in sdk-installer-config.xml edit file to change + * + */ + [Bindable] + private var FLASH_PLAYER_VERSIONS:ArrayCollection = new ArrayCollection(); + private var FLASH_PLAYER_VERSION:String = "11.1"; + private var FLASH_PLAYER_SWF_VERSION:String = "14"; + private var ADOBE_FB_GLOBALPLAYER_SWC_FILE:String; + private var ADOBE_FB_GLOBALPLAYER_SWC_URL:String; - private var BLAZEDS_FILE:String; - private var BLAZEDS_URL:String; + /** + * Apache Flex + * + * Values stored in sdk-installer-config.xml edit file to change + * + */ + [Bindable] + private var FLEX_VERSIONS:ArrayCollection = new ArrayCollection(); - private var AFE_FILE:String; - private var AFE_URL:String; - private var AGLJ40_FILE:String; - private var AGLJ40_URL:String; - private var FLEX_FONTKIT_FILE:String; - private var FLEX_FONTKIT_URL:String; - private var RIDEAU_FILE:String; - private var RIDEAU_URL:String; + /** + * + * SwfObject + * + */ + private var SWF_OBJECT_FILE:String; + private var SWF_OBJECT_URL:String; - [Bindable] - private var _flexHome:String; - private var _flexTemp:String; - private var _flexHomeDir:File; - private var _flexTempDir:File; - private var _apacheFlexSDKCompressedFile:File; - private var _adobeAIRSDKZipFile:File; - private var _fbGlobalPlayerDir:File; - private var _fbGlobalPlayerFile:File; - private var _blazeDSJarFile:File; - private var _afeJarFile:File; - private var _aglj40JarFile:File; - private var _flexFontKitJarFile:File; - private var _rideauJarFile:File; - private var _osmfSWCFile:File; - private var _osmfSWFFile:File; + /** + * Optional installs + * + */ + private var OSMF_SWC_FILE:String; + private var OSMF_SWC_URL:String; + private var OSMF_SWF_FILE:String = "osmf.swf"; - private var _os:OS = new OS(); - private var _loader:URLLoader; - private var _process:NativeProcess; - private var _previousDisplayedPercent:int = 0; - private var _fileUnzipErrorFunction:Function; - private var _numOptionalComponents:int = 4; - private var _numOptionalComponentsPermissions:int = 0; - private var _useOSMF2:Boolean = true; + private var BLAZEDS_FILE:String; + private var BLAZEDS_URL:String; - private var languageOverride:String; - private var configOverride:String = ""; - private var stepsOverride:String = ""; - private var installOverride:String = ""; + private var AFE_FILE:String; + private var AFE_URL:String; + private var AGLJ40_FILE:String; + private var AGLJ40_URL:String; + private var FLEX_FONTKIT_FILE:String; + private var FLEX_FONTKIT_URL:String; + private var RIDEAU_FILE:String; + private var RIDEAU_URL:String; - private var overlaying:Boolean; - private var usingXML:Object; - private var additionalProps:Object = {}; - private var licensePropertyMap:Object = {}; - private var progressLabels:XML; - private var installStepsData:XMLList; - private var stepIDs:Vector.<String> = new Vector.<String>(); - private var stepLabels:Vector.<String> = new Vector.<String>(); - private var currentStep:int = 0; + [Bindable] + private var _flexHome:String; + private var _flexTemp:String; + private var _flexHomeDir:File; + private var _flexTempDir:File; + private var _apacheFlexSDKCompressedFile:File; + private var _adobeAIRSDKZipFile:File; + private var _fbGlobalPlayerDir:File; + private var _fbGlobalPlayerFile:File; + private var _blazeDSJarFile:File; + private var _afeJarFile:File; + private var _aglj40JarFile:File; + private var _flexFontKitJarFile:File; + private var _rideauJarFile:File; + private var _osmfSWCFile:File; + private var _osmfSWFFile:File; - private var customMenuItem1:ContextMenuItem = new ContextMenuItem("Show Dev Builds"); - private var customMenuItem2:ContextMenuItem = new ContextMenuItem("Configure Download Cache..."); - private var customMenuItem3:ContextMenuItem = new ContextMenuItem("Enable Verbose Logging"); - private var customMenuItem4:ContextMenuItem = new ContextMenuItem("Enable Progress Logging"); + private var _os:OS = new OS(); + private var _loader:ApacheURLLoader; + private var _process:NativeProcess; + private var _previousDisplayedPercent:int = 0; + private var _fileUnzipErrorFunction:Function; + private var _numOptionalComponents:int = 4; + private var _numOptionalComponentsPermissions:int = 0; + private var _useOSMF2:Boolean = true; - [Bindable] - private var _viewResourceConstants:ViewResourceConstants; - [Bindable] - private var supportedLanguages:ArrayCollection = new ArrayCollection(); - [Bindable] - private var _installationSteps:ArrayCollection = new ArrayCollection(); - [Bindable] - private var _installerComponentsDataProvider:ArrayCollection = new ArrayCollection(); - [Bindable] - private var _currentLicenseURL:String; - [Bindable] - private var _currentLicenseLabel:String; - [Bindable] - public var _messages:ArrayCollection = new ArrayCollection(); + private var languageOverride:String; + private var configOverride:String = ""; + private var stepsOverride:String = ""; + private var installOverride:String = ""; - private var _lastTag:String; - private var _lastPublicMessage:String; - public function set lastPublicMessage(s:String):void - { - var tag:String; - var c:int; + private var overlaying:Boolean; + private var usingXML:Object; + private var additionalProps:Object = {}; + private var licensePropertyMap:Object = {}; + private var progressLabels:XML; + private var installStepsData:XMLList; + private var compList:XMLList; + private var stepIDs:Vector.<String> = new Vector.<String>(); + private var stepLabels:Vector.<String> = new Vector.<String>(); + private var currentStep:int = 0; - c = s.indexOf("["); - if (c != -1) - { - var c2:int = s.indexOf("] "); - if (c2 != -1) - { - tag = s.substring(c + 1, c2); - s = s.substr(c2 + 2); - } - } - if (tag && tag == _lastTag && tag == "get") - _lastPublicMessage += "\n" + s; - else - _lastPublicMessage = s; - _lastTag = tag; - dispatchEvent(new Event("messageChanged")); - } + private var lastLicenseItemSelected:int = 0; - [Bindable("messageChanged")] - public function get lastFilteredPublicMessage():String - { - return _lastPublicMessage; - } + private var customMenuItem1:ContextMenuItem = new ContextMenuItem("Show Dev Builds"); + private var customMenuItem2:ContextMenuItem = new ContextMenuItem("Configure Download Cache..."); + private var customMenuItem3:ContextMenuItem = new ContextMenuItem("Enable Verbose Logging"); + private var customMenuItem4:ContextMenuItem = new ContextMenuItem("Enable Progress Logging"); - private function getInvoke():void - { - var nativeApplication:NativeApplication = NativeApplication.nativeApplication; - nativeApplication.addEventListener(InvokeEvent.INVOKE, parseArgs); - } + [Bindable] + private var _viewResourceConstants:ViewResourceConstants; + [Bindable] + private var supportedLanguages:ArrayCollection = new ArrayCollection(); + [Bindable] + private var _installationSteps:ArrayCollection = new ArrayCollection(); + [Bindable] + private var _installerComponentsDataProvider:ArrayCollection = new ArrayCollection(); + [Bindable] + private var _currentLicenseURL:String; + [Bindable] + private var _currentLicenseLabel:String; + [Bindable] + public var _messages:ArrayCollection = new ArrayCollection(); - [Bindable] - private var _standardButtonWidth:Number = 88; + private var _lastTag:String; + private var _lastPublicMessage:String; + public function set lastPublicMessage(s:String):void + { + var tag:String; + var c:int; - public function setButtonWidths():void - { - var calc:CalcButtonWidth = new CalcButtonWidth(hiddenButton); + c = s.indexOf("["); + if (c != -1) + { + var c2:int = s.indexOf("] "); + if (c2 != -1) + { + tag = s.substring(c + 1, c2); + s = s.substr(c2 + 2); + } + } + if (tag && tag == _lastTag && tag == "get") + { + _lastPublicMessage += "\n" + s; + } + else + { + _lastPublicMessage = s; + } + _lastTag = tag; + dispatchEvent(new Event("messageChanged")); + } - calc.buttonWidth(installLogBtn); - calc.buttonWidth(openApacheFlexFolderBtn); + [Bindable("messageChanged")] + public function get lastFilteredPublicMessage():String + { + return _lastPublicMessage; + } - _standardButtonWidth = calc.maxButtonWidth([installBtn, browseBtn, closeBtn, nextBtn, firstStepBackBtn, secondStepBackBtn]); - } + private function getInvoke():void + { + var nativeApplication:NativeApplication = NativeApplication.nativeApplication; + nativeApplication.addEventListener(InvokeEvent.INVOKE, parseArgs); + } - private function parseArgs(event:InvokeEvent):void - { - for each (var s:String in event.arguments) - { - if (s.indexOf("-language=") == 0) - { - languageOverride = s.substring(10); - } - if (s.indexOf("-config=") == 0) - { - configOverride = s.substring(8); - } - if (s.indexOf("-install=") == 0) - { - installOverride = s.substring(9); - } - if (s.indexOf("-steps=") == 0) - { - stepsOverride = s.substring(7); - } - if (s.indexOf("-debug") == 0) - { - debugMode = true; - } - if (s.indexOf("-log=") == 0) - { - debugMode = true; - logFile = s.substring(5); - } - } - var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); - usingDownloadCache = so.data.usingDownloadCache; - downloadCacheFolder = so.data.downloadCacheFolder; - userDefaultLanguage = so.data.userDefaultLanguage; - } + [Bindable] + private var _standardButtonWidth:Number = 88; - protected function handleApplicationComplete(event:FlexEvent):void - { - CursorManager.setBusyCursor(); - loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); - addEventListener(Event.CLOSING, closeApplication); - updateWindow(); - var hasInternet:Boolean = false; - var networkAdapters:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces(); - for each (var networkAdapter:NetworkInterface in networkAdapters) - { - if (networkAdapter.active) - { - hasInternet = true; - break; - } - } - if (hasInternet) - { - loadXML(); - } + public function setButtonWidths():void + { + var calc:CalcButtonWidth = new CalcButtonWidth(hiddenButton); - else - { - log("Internet connection unavailable"); - abortInstallation("Internet connection unavailable."); - } - logVersion(); - } + calc.buttonWidth(installLogBtn); + calc.buttonWidth(openApacheFlexFolderBtn); - private function uncaughtErrorHandler(event:UncaughtErrorEvent):void - { - if (currentStep > 0) - updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR); - if (event.error is Error) - { - var error:Error = event.error as Error; - log(error.message); - log(error.getStackTrace(), -1, false); - abortInstallation(error.message + "\n" + error.getStackTrace()); - } - else if (event.error is ErrorEvent) - { - var errorEvent:ErrorEvent = event.error as ErrorEvent; - log(errorEvent.text); - abortInstallation(errorEvent.text); - } - else - { - // a non-Error, non-ErrorEvent type was thrown and uncaught - log(event.toString()); - abortInstallation(event.toString()); - } - } + _standardButtonWidth = calc.maxButtonWidth([installBtn, browseBtn, closeBtn, nextBtn, firstStepBackBtn, secondStepBackBtn]); + } - /** - * Define on ResourceManager all keys for translation. - * If some key is not present on any other language selected by user, the default value will be displayed - * on the screen - */ - private function defineResourceManagerDefaultLanguage():void - { - selectDefaultLanguage(); - } + private function parseArgs(event:InvokeEvent):void + { + for each (var s:String in event.arguments) + { + if (s.indexOf("-language=") == 0) + { + languageOverride = s.substring(10); + } + if (s.indexOf("-config=") == 0) + { + configOverride = s.substring(8); + } + if (s.indexOf("-install=") == 0) + { + installOverride = s.substring(9); + } + if (s.indexOf("-steps=") == 0) + { + stepsOverride = s.substring(7); + } + if (s.indexOf("-debug") == 0) + { + debugMode = true; + } + if (s.indexOf("-log=") == 0) + { + debugMode = true; + logFile = s.substring(5); + } + } + var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); + usingDownloadCache = so.data.usingDownloadCache; + downloadCacheFolder = so.data.downloadCacheFolder; + userDefaultLanguage = so.data.userDefaultLanguage; + } - private function getIndexOfEnUS():int - { - for (var i:int = 0; i < _langSelect.dataProvider.length; i++) - { - if (_langSelect.dataProvider.getItemAt(i).data == "en_US") - { - return i; - } - } - return -1; - } + protected function handleApplicationComplete(event:FlexEvent):void + { + CursorManager.setBusyCursor(); + loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); + addEventListener(Event.CLOSING, closeApplication); + updateWindow(); + var hasInternet:Boolean = false; + var networkAdapters:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces(); + for each (var networkAdapter:NetworkInterface in networkAdapters) + { + if (networkAdapter.active) + { + hasInternet = true; + break; + } + } + if (hasInternet) + { + loadXML(); + } + logVersion(); + if (!hasInternet) + { + log("Internet connection unavailable"); + abortInstallation("Internet connection unavailable."); + } + } - private function updateWindowTitle():void - { - if (_viewResourceConstants) - this.nativeWindow.title = StringUtil.substitute(_viewResourceConstants.INFO_WINDOW_TITLE, [APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY]); - } + private function uncaughtErrorHandler(event:UncaughtErrorEvent):void + { + if (currentStep > 0) + { + updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR); + } + if (event.error is Error) + { + var error:Error = event.error as Error; + log(error.message); + log(error.getStackTrace(), -1, false); + abortInstallation(error.message + "\n" + error.getStackTrace()); + } + else if (event.error is ErrorEvent) + { + var errorEvent:ErrorEvent = event.error as ErrorEvent; + log(errorEvent.text); + abortInstallation(errorEvent.text); + } + else + { + // a non-Error, non-ErrorEvent type was thrown and uncaught + log(event.toString()); + abortInstallation(event.toString()); + } + } - protected function selectDefaultLanguageInEmergency():void - { - loadLanguage("en_US", loadUSInEmergencyComplete); - } + /** + * Define on ResourceManager all keys for translation. + * If some key is not present on any other language selected by user, the default value will be displayed + * on the screen + */ + private function defineResourceManagerDefaultLanguage():void + { + selectDefaultLanguage(); + } - private function loadUSInEmergencyComplete():void - { - _viewResourceConstants = ViewResourceConstants.instance; - _viewResourceConstants.update(); - } + private function getIndexOfEnUS():int + { + for (var i:int = 0; i < _langSelect.dataProvider.length; i++) + { + if (_langSelect.dataProvider.getItemAt(i).data == "en_US") + { + return i; + } + } + return -1; + } - protected function selectDefaultLanguage():void - { - loadLanguage("en_US", loadUSComplete); - } + private function updateWindowTitle():void + { + if (_viewResourceConstants) + { + this.nativeWindow.title = StringUtil.substitute(_viewResourceConstants.INFO_WINDOW_TITLE, [APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY]); + } + } - private function loadUSComplete():void - { - var userLocale:String; + protected function selectDefaultLanguageInEmergency():void + { + loadLanguage("en_US", loadUSInEmergencyComplete); + } - if (userDefaultLanguage) - { - userLocale = userDefaultLanguage; - } - else - { - userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); - } + private function loadUSInEmergencyComplete():void + { + _viewResourceConstants = ViewResourceConstants.instance; + _viewResourceConstants.update(); + } - if (languageOverride) - { - userLocale = languageOverride; - } + protected function selectDefaultLanguage():void + { + loadLanguage("en_US", loadUSComplete); + } - loadDefaultLanguage(userLocale); - } + private function loadUSComplete():void + { + var userLocale:String; - private function loadDefaultLanguage(userLocale:String):void - { - loadLanguage(userLocale, defaultLanguageLoaded); - } + if (userDefaultLanguage) + { + userLocale = userDefaultLanguage; + } + else + { + userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); + } - private var languageURL:String; - private var languageID:String; + if (languageOverride) + { + userLocale = languageOverride; + } - private function loadLanguage(userLocale:String, completeFunction:Function):void - { - if (languageURL && loader) // busy loading another language - loader.close(); + loadDefaultLanguage(userLocale); + } - if (userLocale == "en_US") - { - var ba:ByteArray = new en_US_Properties() as ByteArray; - var data:String = ba.readUTFBytes(ba.bytesAvailable); - installLanguage(userLocale, data); - completeFunction(); - return; - } - var n:int = supportedLanguages.length; - for (var i:int = 0; i < n; i++) - { - if (supportedLanguages[i].data == userLocale) - { - languageID = userLocale; - languageURL = supportedLanguages[i].path; - var url:URLRequest = new URLRequest(languageURL); - loader = new URLLoader(); - loader.dataFormat = URLLoaderDataFormat.TEXT; - loader.addEventListener(IOErrorEvent.IO_ERROR, languageLoadErrorHandler); - loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, languageLoadErrorHandler); - loader.addEventListener(Event.COMPLETE, function (e:Event):void - { - languageURL = null; - installLanguage(userLocale, loader.data); - completeFunction(); - }); - loader.load(url); - return; - } - } - completeFunction(); - } + private function loadDefaultLanguage(userLocale:String):void + { + loadLanguage(userLocale, defaultLanguageLoaded); + } - private function installLanguage(userLocale:String, data:String):void - { - var resource:ResourceBundle = new ResourceBundle(userLocale, ViewResourceConstants.BUNDLE_NAME); - var variables:Array; - if (data.indexOf("\r\n") != -1) - variables = data.split("\r\n"); - else - variables = data.split("\n"); - for each (var p:String in variables) - { - if (p.charAt(0) == "#") - continue; + private var languageURL:String; + private var languageID:String; - var c:int = p.indexOf("="); - if (c != -1) - { - var key:String = p.substr(0, c); - var value:String = p.substr(c + 1); - while (value.indexOf("\\n") != -1) - value = value.replace("\\n", "\n"); - resource.content[key] = value; - } - } + private function loadLanguage(userLocale:String, completeFunction:Function):void + { + if (languageURL && loader) // busy loading another language + { + loader.close(); + } - resourceManager.addResourceBundle(resource); - } + if (userLocale == "en_US") + { + var ba:ByteArray = new en_US_Properties() as ByteArray; + var data:String = ba.readUTFBytes(ba.bytesAvailable); + installLanguage(userLocale, data); + completeFunction(); + return; + } + var n:int = supportedLanguages.length; + for (var i:int = 0; i < n; i++) + { + if (supportedLanguages[i].data == userLocale) + { + languageID = userLocale; + languageURL = supportedLanguages[i].path; + var url:URLRequest = new URLRequest(languageURL); + loader = new ApacheURLLoader(); + loader.dataFormat = URLLoaderDataFormat.TEXT; + loader.addEventListener(IOErrorEvent.IO_ERROR, languageLoadErrorHandler); + loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, languageLoadErrorHandler); + loader.addEventListener(Event.COMPLETE, function (e:Event):void + { + languageURL = null; + installLanguage(userLocale, loader.data); + completeFunction(); + }); + loader.load(url); + return; + } + } + completeFunction(); + } - private function languageLoadErrorHandler(event:Event):void - { - log("Unable to load language file " + languageURL); - log(event.toString()); - abortInstallation("Unable to load language file " + languageURL); - } + private function installLanguage(userLocale:String, data:String):void + { + var resource:ResourceBundle = new ResourceBundle(userLocale, ViewResourceConstants.BUNDLE_NAME); + var variables:Array; + if (data.indexOf("\r\n") != -1) + { + variables = data.split("\r\n"); + } + else + { + variables = data.split("\n"); + } + for each (var p:String in variables) + { + if (p.charAt(0) == "#") + { + continue; + } - private function defaultLanguageLoaded():void - { - resourceManager.localeChain = [ViewResourceConstants.DEFAULT_LANGUAGE]; + var c:int = p.indexOf("="); + if (c != -1) + { + var key:String = p.substr(0, c); + var value:String = p.substr(c + 1); + while (value.indexOf("\\n") != -1) + { + value = value.replace("\\n", "\n"); + } + resource.content[key] = value; + } + } - var userLocale:String; + resourceManager.addResourceBundle(resource); + } - if (userDefaultLanguage) - { - userLocale = userDefaultLanguage; - } - else - { - userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); - } + private function languageLoadErrorHandler(event:Event):void + { + log("Unable to load language file " + languageURL); + log(event.toString()); + abortInstallation("Unable to load language file " + languageURL); + } - if (languageOverride) - { - userLocale = languageOverride; - } - log("Using Locale: " + userLocale); + private function defaultLanguageLoaded():void + { + resourceManager.localeChain = [ViewResourceConstants.DEFAULT_LANGUAGE]; - var n:int = supportedLanguages.length; - for (var i:int = 0; i < n; i++) - { - if (supportedLanguages[i].data == userLocale) - { - _langSelect.selectedIndex = i; + var userLocale:String; - resourceManager.localeChain = [userLocale, "en_US"]; + if (userDefaultLanguage) + { + userLocale = userDefaultLanguage; + } + else + { + userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); + } - break; - } - } - _viewResourceConstants = ViewResourceConstants.instance; + if (languageOverride) + { + userLocale = languageOverride; + } + log("Using Locale: " + userLocale); - resourceManager.addEventListener(Event.CHANGE, _viewResourceConstants.update); + var n:int = supportedLanguages.length; + for (var i:int = 0; i < n; i++) + { + if (supportedLanguages[i].data == userLocale) + { + _langSelect.selectedIndex = i; - _viewResourceConstants.update(); - setButtonWidths(); - directoryBtn.enabled = true; + resourceManager.localeChain = [userLocale, "en_US"]; - updateWindow(); + break; + } + } + _viewResourceConstants = ViewResourceConstants.instance; - _mirrorURLUtil.logMessages = new LogMessagesVO(_viewResourceConstants.FETCH_MIRROR_CGI, _viewResourceConstants.FETCH_MIRROR_CGI_DONE, - _viewResourceConstants.FETCH_MIRROR_CGI_ERROR); + resourceManager.addEventListener(Event.CHANGE, _viewResourceConstants.update); - _mirrorURLUtil.getMirrorURL(Constants.APACHE_FLEX_URL + _mirrorURLCGI, getMirrorURLResultHandler); - CursorManager.removeBusyCursor(); + _viewResourceConstants.update(); + setButtonWidths(); + directoryBtn.enabled = true; - checkValidOS(); - } + updateWindow(); - protected function updateWindow():void - { - updateWindowTitle(); + _mirrorURLUtil.logMessages = new LogMessagesVO(_viewResourceConstants.FETCH_MIRROR_CGI, _viewResourceConstants.FETCH_MIRROR_CGI_DONE, + _viewResourceConstants.FETCH_MIRROR_CGI_ERROR); - this.nativeWindow.x = Screen.mainScreen.bounds.width / 2 - this.nativeWindow.width / 2; - this.nativeWindow.y = Screen.mainScreen.bounds.height / 2 - this.nativeWindow.height / 2; - } + _mirrorURLUtil.getMirrorURL(Constants.APACHE_FLEX_URL + _mirrorURLCGI, getMirrorURLResultHandler); + CursorManager.removeBusyCursor(); - protected function loadXML():void - { - var request:URLRequest; + checkValidOS(); + } - if (configOverride != "") - { - request = new URLRequest(configOverride); - } - else - { - request = new URLRequest(Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); - } + protected function updateWindow():void + { + updateWindowTitle(); - _loader = new URLLoader(); + this.nativeWindow.x = Screen.mainScreen.bounds.width / 2 - this.nativeWindow.width / 2; + this.nativeWindow.y = Screen.mainScreen.bounds.height / 2 - this.nativeWindow.height / 2; + } - try - { - _loader.load(request); - } - catch (error:Error) - { - selectDefaultLanguageInEmergency(); - log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); - log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + error.errorID + " " + error.message); - abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); - } + protected function loadXML():void + { + var request:URLRequest; - _loader.addEventListener(IOErrorEvent.IO_ERROR, xmlError, false, 0, true); - _loader.addEventListener(Event.COMPLETE, xmlLoaded, false, 0, true); - } + if (configOverride != "") + { + request = new URLRequest(configOverride); + } + else + { + request = new URLRequest(Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); + //request = new URLRequest(Constants.CONFIG_XML_NAME); + } - protected function xmlError(event:IOErrorEvent):void - { - selectDefaultLanguageInEmergency(); - log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); - log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + event.errorID); - abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME + " " + event.toString()); - } + _loader = new ApacheURLLoader(); - protected function xmlLoaded(event:Event):void - { - if (setXMLVariables()) - { - _langSelect.dataProvider = supportedLanguages; - _langSelect.selectedIndex = getIndexOfEnUS(); - _langSelect.enabled = true; - defineResourceManagerDefaultLanguage(); - } - } + try + { + _loader.load(request); + } + catch (error:Error) + { + selectDefaultLanguageInEmergency(); + log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); + log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + error.errorID + " " + error.message); + abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); + } - protected function checkValidOS():void - { - if (_os.isOther()) - log(_viewResourceConstants.ERROR_UNSUPPORTED_OPERATING_SYSTEM); - } + _loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, xmlLoadStatus, false, 0, true); + _loader.addEventListener(IOErrorEvent.IO_ERROR, xmlError, false, 0, true); + _loader.addEventListener(Event.COMPLETE, xmlLoaded, false, 0, true); + } - private function devBuildFilterFunction(o:Object):Boolean - { - return !o.devBuild; - } + protected function xmlLoadStatus(event:HTTPStatusEvent):void + { + if (event.status >= 400) + { + log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); + log("\tServer Status: " + event.status); + } + } - private function debugModeHandler(event:Event):void - { - debugMode = true; - customMenuItem3.caption = "Verbose Logging Enabled"; - } + protected function xmlError(event:IOErrorEvent):void + { + selectDefaultLanguageInEmergency(); + log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); + log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + event.errorID); + abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME + " " + event.toString()); + } - private function debugProgressHandler(event:Event):void - { - logProgressEvents = true; - customMenuItem4.caption = "Logging Progress Events"; - } + protected function xmlLoaded(event:Event):void + { + if (setXMLVariables()) + { + _langSelect.dataProvider = supportedLanguages; + _langSelect.selectedIndex = getIndexOfEnUS(); + _langSelect.enabled = true; + defineResourceManagerDefaultLanguage(); + } + } - private function devBuildShowHandler(event:Event):void - { - var item:Object = flexVersion.selectedItem; - FLEX_VERSIONS.filterFunction = null; - FLEX_VERSIONS.refresh(); - flexVersion.selectedItem = item; - customMenuItem1.caption = "Showing Dev Builds"; - } + protected function checkValidOS():void + { + if (_os.isOther()) + { + log(_viewResourceConstants.ERROR_UNSUPPORTED_OPERATING_SYSTEM); + } + } - private function downloadCacheHandler(event:Event):void - { - var dlg:CacheDialog = new CacheDialog(); - dlg.addEventListener(Event.COMPLETE, updateDownloadCache); - PopUpManager.addPopUp(dlg, this, true); - PopUpManager.centerPopUp(dlg); - dlg.cb.selected = usingDownloadCache; - dlg.folder.text = downloadCacheFolder; - } + private function devBuildFilterFunction(o:Object):Boolean + { + return !o.devBuild; + } - private function updateDownloadCache(event:Event):void - { - downloadCacheFolder = event.target.folder.text; - usingDownloadCache = event.target.cb.selected; - var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); - so.data.usingDownloadCache = usingDownloadCache; - so.data.downloadCacheFolder = downloadCacheFolder; - so.flush(); - } + private function debugModeHandler(event:Event):void + { + debugMode = true; + customMenuItem3.caption = "Verbose Logging Enabled"; + } - protected function setXMLVariables():Boolean - { - try - { - var data:XML = XML(_loader.data); - } - catch (e:Error) - { - log("Error parsing configuration file"); - abortInstallation("Error parsing configuration file"); - return false; - } - var keepGoing:Boolean = true; - if (firstTime) - { - firstTime = false; + private function debugProgressHandler(event:Event):void + { + logProgressEvents = true; + customMenuItem4.caption = "Logging Progress Events"; + } - _latestVersion = data.version.latest.toString(); + private function devBuildShowHandler(event:Event):void + { + var item:Object = flexVersion.selectedItem; + FLEX_VERSIONS.filterFunction = null; + FLEX_VERSIONS.refresh(); + flexVersion.selectedItem = item; + customMenuItem1.caption = "Showing Dev Builds"; + } - installerAppPath = data.installer.(@name == 'SDKInstallerApp').@path.toString(); - installerAppFileName = data.installer.(@name == 'SDKInstallerApp').@file.toString(); + private function downloadCacheHandler(event:Event):void + { + var dlg:CacheDialog = new CacheDialog(); + dlg.addEventListener(Event.COMPLETE, updateDownloadCache); + PopUpManager.addPopUp(dlg, this, true); + PopUpManager.centerPopUp(dlg); + dlg.cb.selected = usingDownloadCache; + dlg.folder.text = downloadCacheFolder; + } - _mirrorURLCGI = data.mirror.(@name == 'MirrorURLCGI').@file.toString(); + private function updateDownloadCache(event:Event):void + { + downloadCacheFolder = event.target.folder.text; + usingDownloadCache = event.target.cb.selected; + var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); + so.data.usingDownloadCache = usingDownloadCache; + so.data.downloadCacheFolder = downloadCacheFolder; + so.flush(); + } - customMenuItem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, devBuildShowHandler); - customMenuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, downloadCacheHandler); - customMenuItem3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugModeHandler); - customMenuItem4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugProgressHandler); + protected function setXMLVariables():Boolean + { + try + { + var data:XML = XML(_loader.data); + } + catch (e:Error) + { + log("Error parsing configuration file"); + abortInstallation("Error parsing configuration file"); + return false; + } + var keepGoing:Boolean = true; + if (firstTime) + { + firstTime = false; - var contextMenuCustomItems:Array = ContextMenu(contextMenu).customItems; - contextMenuCustomItems.push(customMenuItem1); - contextMenuCustomItems.push(customMenuItem2); - contextMenuCustomItems.push(customMenuItem3); - contextMenuCustomItems.push(customMenuItem4); + _latestVersion = data.version.latest.toString(); - var name:String; - var versionString:String; - var versionID:String; + installerAppPath = data.installer.(@name == 'SDKInstallerApp').@path.toString(); + installerAppFileName = data.installer.(@name == 'SDKInstallerApp').@file.toString(); - var languages:XMLList = data.languages.children(); - for each (var lang:XML in languages) - { - var item:Object = { - label: lang.@name.toString(), - data: lang.@id.toString(), - path: lang.@path.toString() - }; - supportedLanguages.addItem(item); - } + _mirrorURLCGI = data.mirror.(@name == 'MirrorURLCGI').@file.toString(); - var airData:XMLList = data.airsdk[_os.os].versions; - var airVersionList:XMLList = airData[0].children(); - var airVersions:Array = []; - var selected:String = airData[0]["@default"].toString(); - for each (var airVersion:XML in airVersionList) - { - var displayVersion:String = airVersion.@displayVersion.toString(); - versionString = airVersion.@version.toString(); - versionID = null; - if (airVersion.@versionID.length() > 0) - versionID = airVersion.@versionID.toString(); - airVersions.push(versionString); - var airPath:String = airVersion.path.toString(); - var airFile:String = airVersion.file.toString(); - AIR_VERSIONS.addItem({ - label: "AIR " + displayVersion, version: versionString, versionID: versionID, - path: airPath, file: airFile - }); - } + customMenuItem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, devBuildShowHandler); + customMenuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, downloadCacheHandler); + customMenuItem3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugModeHandler); + customMenuItem4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugProgressHandler); - if (this.airVersion.selectedIndex == -1) - { - this.airVersion.selectedIndex = airVersions.indexOf(selected); - } + var contextMenuCustomItems:Array = ContextMenu(contextMenu).customItems; + contextMenuCustomItems.push(customMenuItem1); + contextMenuCustomItems.push(customMenuItem2); + contextMenuCustomItems.push(customMenuItem3); + contextMenuCustomItems.push(customMenuItem4); - var flexData:XMLList = data.products.children(); - var selectedFlexVersion:int; - for each (var productData:XML in flexData) - { - var productName:String = productData.@name.toString(); - var productPrefix:String = productData.@prefix.toString(); - var productVersionList:XMLList = productData.versions.children(); - var isOverlay:Boolean = productData.@overlay.toString() == "true"; - var needsAIR:Boolean = productData.@needsAIR.toString() != "false"; - var needsFlash:Boolean = productData.@needsFlash.toString() != "false"; - var icon:String = productData.@icon.toString(); - for each (var productVersion:XML in productVersionList) - { - var shortName:String = productVersion.@file.toString(); - var fileName:String = shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC); - versionString = productVersion.@version.toString(); - var label:String = productName + " " + versionString; - var ver:String = fileName.substr(productPrefix.length).split("-")[0]; - var path:String = productVersion.@path.toString(); - var devBuild:Boolean = productVersion.@dev.toString() == "true"; - var legacy:Boolean = productVersion.@legacy.toString() == "true"; - var nocache:Boolean = productVersion.@nocache.toString() == "true"; - if (productVersion["@default"].length() == 1) - selectedFlexVersion = FLEX_VERSIONS.length; - FLEX_VERSIONS.addItem({ - shortName: shortName, fileName: fileName, label: label, version: ver, - path: path, overlay: isOverlay, prefix: productPrefix, legacy: legacy, nocache: nocache, - needsAIR: needsAIR, needsFlash: needsFlash, devBuild: devBuild, icon: icon - }); - } - } + var name:String; + var versionString:String; + var versionID:String; - FLEX_VERSIONS.filterFunction = devBuildFilterFunction; - FLEX_VERSIONS.refresh(); - flexVersion.validateNow(); + var languages:XMLList = data.languages.children(); + for each (var lang:XML in languages) + { + var item:Object = { + label: lang.@name.toString(), + data: lang.@id.toString(), + path: lang.@path.toString() + }; + supportedLanguages.addItem(item); + } - if (this.flexVersion.selectedIndex == -1) - { - this.flexVersion.selectedIndex = selectedFlexVersion; - } + var airData:XMLList = data.airsdk[_os.os].versions; + var airVersionList:XMLList = airData[0].children(); + var airVersions:Array = []; + var selected:String = airData[0]["@default"].toString(); + for each (var airVersion:XML in airVersionList) + { + var displayVersion:String = airVersion.@displayVersion.toString(); + versionString = airVersion.@version.toString(); + versionID = null; + if (airVersion.@versionID.length() > 0) + { + versionID = airVersion.@versionID.toString(); + } + airVersions.push(versionString); + var airPath:String = airVersion.path.toString(); + var airFile:String = airVersion.file.toString(); + AIR_VERSIONS.addItem({ + label: "AIR " + displayVersion, version: versionString, versionID: versionID, + path: airPath, file: airFile + }); + } - var selectedFlexVersionObject:Object = this.flexVersion.selectedItem; - updateFlexVersionStrings(selectedFlexVersionObject); + if (this.airVersion.selectedIndex == -1) + { + this.airVersion.selectedIndex = airVersions.indexOf(selected); + } - if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH) - { - log(_viewResourceConstants.ERROR_INVALID_SDK_URL); - keepGoing = false; - } + var flexData:XMLList = data.products.children(); + var selectedFlexVersion:int; + for each (var productData:XML in flexData) + { + var productName:String = productData.@name.toString(); + var productPrefix:String = productData.@prefix.toString(); + var productVersionList:XMLList = productData.versions.children(); + var isOverlay:Boolean = productData.@overlay.toString() == "true"; + var needsAIR:Boolean = productData.@needsAIR.toString() != "false"; + var needsFlash:Boolean = productData.@needsFlash.toString() != "false"; + var icon:String = productData.@icon.toString(); + for each (var productVersion:XML in productVersionList) + { + var shortName:String = productVersion.@file.toString(); + var fileName:String = shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC); + versionString = productVersion.@version.toString(); + var label:String = productName + " " + versionString; + var ver:String = fileName.substr(productPrefix.length).split("-")[0]; + var path:String = productVersion.@path.toString(); + var devBuild:Boolean = productVersion.@dev.toString() == "true"; + var legacy:Boolean = productVersion.@legacy.toString() == "true"; + var nocache:Boolean = productVersion.@nocache.toString() == "true"; + if (productVersion["@default"].length() == 1) + { + selectedFlexVersion = FLEX_VERSIONS.length; + } + FLEX_VERSIONS.addItem({ + shortName: shortName, fileName: fileName, label: label, version: ver, + path: path, overlay: isOverlay, prefix: productPrefix, legacy: legacy, nocache: nocache, + needsAIR: needsAIR, needsFlash: needsFlash, devBuild: devBuild, icon: icon + }); + } + } - var flashData:XMLList = data.flashsdk.versions; - var flashVersionList:XMLList = flashData[0].children(); - var flashPlayerVersions:Array = []; - selected = flashData[0]["@default"].toString(); - for each (var flashVersion:XML in flashVersionList) - { - displayVersion = flashVersion.@displayVersion.toString(); - versionString = flashVersion.@version.toString(); - versionID = null; - if (flashVersion.@versionID.length() > 0) - versionID = flashVersion.@versionID.toString(); - flashPlayerVersions.push(versionString); - if (!_os.isLinux() || Number(versionString) <= 11.2) - { - var swfVersion:String = flashVersion.swfversion.toString(); - var flashPath:String = flashVersion.path.toString(); - var flashFile:String = flashVersion.file.toString(); - FLASH_PLAYER_VERSIONS.addItem({ - label: "Flash Player " + displayVersion, version: versionString, swfVersion: swfVersion, - versionID: versionID, path: flashPath, file: flashFile - }); - } - } + FLEX_VERSIONS.filterFunction = devBuildFilterFunction; + FLEX_VERSIONS.refresh(); + flexVersion.validateNow(); - if (this.flashPlayerVersion.selectedIndex == -1) - { - this.flashPlayerVersion.selectedIndex = flashPlayerVersions.indexOf(selected); - } - } + if (this.flexVersion.selectedIndex == -1) + { + this.flexVersion.selectedIndex = selectedFlexVersion; + } - ADOBE_AIR_SDK_WIN_FILE = data.airsdk.windows.versions.children().(@version == AIR_VERSION).file.toString(); - ADOBE_AIR_SDK_WIN_URL = data.airsdk.windows.versions.children().(@version == AIR_VERSION).path.toString(); - if (_os.isWindows() && (!ADOBE_AIR_SDK_WIN_FILE || !ADOBE_AIR_SDK_WIN_URL)) - { - log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_WINDOWS); - keepGoing = false; - } - ADOBE_AIR_SDK_WIN_URL += ADOBE_AIR_SDK_WIN_FILE; + var selectedFlexVersionObject:Object = this.flexVersion.selectedItem; + updateFlexVersionStrings(selectedFlexVersionObject); - ADOBE_AIR_SDK_MAC_FILE = data.airsdk.mac.versions.children().(@version == AIR_VERSION).file.toString(); - ADOBE_AIR_SDK_MAC_URL = data.airsdk.mac.versions.children().(@version == AIR_VERSION).path.toString(); - if (_os.isMac() && (!ADOBE_AIR_SDK_MAC_FILE || !ADOBE_AIR_SDK_MAC_URL)) - { - log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_MAC); - keepGoing = false; - } - ADOBE_AIR_SDK_MAC_URL += ADOBE_AIR_SDK_MAC_FILE; + if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH) + { + log(_viewResourceConstants.ERROR_INVALID_SDK_URL); + keepGoing = false; + } - ADOBE_AIR_SDK_LINUX_FILE = data.airsdk.linux.versions.children().(@version == AIR_VERSION).file.toString(); - ADOBE_AIR_SDK_LINUX_URL = data.airsdk.linux.versions.children().(@version == AIR_VERSION).path.toString(); - if (_os.isLinux() && (!ADOBE_AIR_SDK_LINUX_FILE || !ADOBE_AIR_SDK_LINUX_URL)) - { - log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_LINUX); - keepGoing = false; - } - ADOBE_AIR_SDK_LINUX_URL += ADOBE_AIR_SDK_LINUX_FILE; + var flashData:XMLList = data.flashsdk.versions; + var flashVersionList:XMLList = flashData[0].children(); + var flashPlayerVersions:Array = []; + selected = flashData[0]["@default"].toString(); + for each (var flashVersion:XML in flashVersionList) + { + displayVersion = flashVersion.@displayVersion.toString(); + versionString = flashVersion.@version.toString(); + versionID = null; + if (flashVersion.@versionID.length() > 0) + { + versionID = flashVersion.@versionID.toString(); + } + flashPlayerVersions.push(versionString); + if (!_os.isLinux() || Number(versionString) <= 11.2) + { + var swfVersion:String = flashVersion.swfversion.toString(); + var flashPath:String = flashVersion.path.toString(); + var flashFile:String = flashVersion.file.toString(); + FLASH_PLAYER_VERSIONS.addItem({ + label: "Flash Player " + displayVersion, version: versionString, swfVersion: swfVersion, + versionID: versionID, path: flashPath, file: flashFile + }); + } + } - ADOBE_FB_GLOBALPLAYER_SWC_FILE = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).file.toString(); - ADOBE_FB_GLOBALPLAYER_SWC_URL = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).path.toString(); - FLASH_PLAYER_SWF_VERSION = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).swfversion.toString(); - if (!ADOBE_FB_GLOBALPLAYER_SWC_FILE || !ADOBE_FB_GLOBALPLAYER_SWC_URL) - { - log(_viewResourceConstants.ERROR_INVALID_FLASH_PLAYER_SWC_URL); - keepGoing = false; - } - ADOBE_FB_GLOBALPLAYER_SWC_URL += ADOBE_FB_GLOBALPLAYER_SWC_FILE; + if (this.flashPlayerVersion.selectedIndex == -1) + { + this.flashPlayerVersion.selectedIndex = flashPlayerVersions.indexOf(selected); + } + } - SWF_OBJECT_FILE = data.swfobject.@file.toString(); - SWF_OBJECT_URL = data.swfobject.@path.toString(); + ADOBE_AIR_SDK_WIN_FILE = data.airsdk.windows.versions.children().(@version == AIR_VERSION).file.toString(); + ADOBE_AIR_SDK_WIN_URL = data.airsdk.windows.versions.children().(@version == AIR_VERSION).path.toString(); + if (_os.isWindows() && (!ADOBE_AIR_SDK_WIN_FILE || !ADOBE_AIR_SDK_WIN_URL)) + { + log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_WINDOWS); + keepGoing = false; + } + ADOBE_AIR_SDK_WIN_URL += ADOBE_AIR_SDK_WIN_FILE; - //Supporting OSMF 2.0 from 4.11 onwards. - if (APACHE_FLEX_BIN_DISTRO_VERSION == "4.9.1" || APACHE_FLEX_BIN_DISTRO_VERSION == "4.10.0") - { - OSMF_SWC_FILE = data.OSMF_SWC.@file.toString(); - OSMF_SWC_URL = data.OSMF_SWC.@path.toString(); - _useOSMF2 = false; - } - else - { - OSMF_SWC_FILE = data["OSMF_SWC_2.0"].@file.toString(); - OSMF_SWC_URL = data["OSMF_SWC_2.0"].@path.toString(); - _useOSMF2 = true; - } + ADOBE_AIR_SDK_MAC_FILE = data.airsdk.mac.versions.children().(@version == AIR_VERSION).file.toString(); + ADOBE_AIR_SDK_MAC_URL = data.airsdk.mac.versions.children().(@version == AIR_VERSION).path.toString(); + if (_os.isMac() && (!ADOBE_AIR_SDK_MAC_FILE || !ADOBE_AIR_SDK_MAC_URL)) + { + log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_MAC); + keepGoing = false; + } + ADOBE_AIR_SDK_MAC_URL += ADOBE_AIR_SDK_MAC_FILE; - BLAZEDS_FILE = data.BlazeDS.@file.toString(); - BLAZEDS_URL = data.BlazeDS.@path.toString(); + ADOBE_AIR_SDK_LINUX_FILE = data.airsdk.linux.versions.children().(@version == AIR_VERSION).file.toString(); + ADOBE_AIR_SDK_LINUX_URL = data.airsdk.linux.versions.children().(@version == AIR_VERSION).path.toString(); + if (_os.isLinux() && (!ADOBE_AIR_SDK_LINUX_FILE || !ADOBE_AIR_SDK_LINUX_URL)) + { + log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_LINUX); + keepGoing = false; + } + ADOBE_AIR_SDK_LINUX_URL += ADOBE_AIR_SDK_LINUX_FILE; - AFE_FILE = data.fontswf.afe.@file.toString(); - AFE_URL = data.fontswf.afe.@path.toString(); + ADOBE_FB_GLOBALPLAYER_SWC_FILE = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).file.toString(); + ADOBE_FB_GLOBALPLAYER_SWC_URL = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).path.toString(); + FLASH_PLAYER_SWF_VERSION = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).swfversion.toString(); + if (!ADOBE_FB_GLOBALPLAYER_SWC_FILE || !ADOBE_FB_GLOBALPLAYER_SWC_URL) + { + log(_viewResourceConstants.ERROR_INVALID_FLASH_PLAYER_SWC_URL); + keepGoing = false; + } + ADOBE_FB_GLOBALPLAYER_SWC_URL += ADOBE_FB_GLOBALPLAYER_SWC_FILE; - AGLJ40_FILE = data.fontswf.aglj40.@file.toString(); - AGLJ40_URL = data.fontswf.aglj40.@path.toString(); + SWF_OBJECT_FILE = data.swfobject.@file.toString(); + SWF_OBJECT_URL = data.swfobject.@path.toString(); - FLEX_FONTKIT_FILE = data.fontswf["flex-fontkit"].@file.toString(); - FLEX_FONTKIT_URL = data.fontswf["flex-fontkit"].@path.toString(); + //Supporting OSMF 2.0 from 4.11 onwards. + if (APACHE_FLEX_BIN_DISTRO_VERSION == "4.9.1" || APACHE_FLEX_BIN_DISTRO_VERSION == "4.10.0") + { + OSMF_SWC_FILE = data.OSMF_SWC.@file.toString(); + OSMF_SWC_URL = data.OSMF_SWC.@path.toString(); + _useOSMF2 = false; + } + else + { + OSMF_SWC_FILE = data["OSMF_SWC_2.0"].@file.toString(); + OSMF_SWC_URL = data["OSMF_SWC_2.0"].@path.toString(); + _useOSMF2 = true; + } - RIDEAU_FILE = data.fontswf.rideau.@file.toString(); - RIDEAU_URL = data.fontswf.rideau.@path.toString(); + BLAZEDS_FILE = data.BlazeDS.@file.toString(); + BLAZEDS_URL = data.BlazeDS.@path.toString(); + AFE_FILE = data.fontswf.afe.@file.toString(); + AFE_URL = data.fontswf.afe.@path.toString(); - return keepGoing; - } + AGLJ40_FILE = data.fontswf.aglj40.@file.toString(); + AGLJ40_URL = data.fontswf.aglj40.@path.toString(); - protected function updateFlexVersionStrings(selectedFlexVersionObject:Object):void - { - APACHE_FLEX_BIN_DISTRO_FILE_SHORT = selectedFlexVersionObject.shortName; - APACHE_FLEX_BIN_DISTRO_VERSION = selectedFlexVersionObject.version; - APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = selectedFlexVersionObject.label; + FLEX_FONTKIT_FILE = data.fontswf["flex-fontkit"].@file.toString(); + FLEX_FONTKIT_URL = data.fontswf["flex-fontkit"].@path.toString(); - APACHE_FLEX_BIN_DISTRO_FILE = selectedFlexVersionObject.fileName; - APACHE_FLEX_BIN_DISTRO_PATH = selectedFlexVersionObject.path; - legacy = selectedFlexVersionObject.legacy; - nocache = selectedFlexVersionObject.nocache; - APACHE_FLEX_BIN_INSTALLER_FILE = selectedFlexVersionObject.prefix + "installer-config.xml"; + RIDEAU_FILE = data.fontswf.rideau.@file.toString(); + RIDEAU_URL = data.fontswf.rideau.@path.toString(); - // ApacheFlex is full URL so download directly and dont use mirror useful for testing release candidates - if (APACHE_FLEX_BIN_DISTRO_PATH.indexOf("http") == 0) - { - _useMirror = false; - } - else - { - _useMirror = true; - } - } - private function useMirrorPath(path:String):String - { - if (_useMirror) - { - return path; - } + return keepGoing; + } - return ""; - } + protected function updateFlexVersionStrings(selectedFlexVersionObject:Object):void + { + APACHE_FLEX_BIN_DISTRO_FILE_SHORT = selectedFlexVersionObject.shortName; + APACHE_FLEX_BIN_DISTRO_VERSION = selectedFlexVersionObject.version; + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = selectedFlexVersionObject.label; - private function getMirrorURLResultHandler():void - { - var logMessages:ArrayCollection = ILog(_mirrorURLUtil).log; - var i:int; - var n:int = logMessages.length; - for (i = 0; i < n; i++) - { - log(String(logMessages.getItemAt(i))); - } + APACHE_FLEX_BIN_DISTRO_FILE = selectedFlexVersionObject.fileName; + APACHE_FLEX_BIN_DISTRO_PATH = selectedFlexVersionObject.path; + legacy = selectedFlexVersionObject.legacy; + nocache = selectedFlexVersionObject.nocache; + APACHE_FLEX_BIN_INSTALLER_FILE = selectedFlexVersionObject.prefix + "installer-config.xml"; - if (_mirrorURLUtil.errorOccurred) - { - abortInstallation("mirrorURLUtil.errorOccurred"); - main(); - } - else - { - updatePaths(); - } + // ApacheFlex is full URL so download directly and dont use mirror useful for testing release candidates + if (APACHE_FLEX_BIN_DISTRO_PATH.indexOf("http") == 0) + { + _useMirror = false; + } + else + { + _useMirror = true; + } - } + newSDKSelected = true; + } - protected function updatePaths():void - { - if (APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.URL_PREFIX.length) == Constants.URL_PREFIX - || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.FILE_PREFIX.length) == Constants.FILE_PREFIX - || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.HTTPS_PREFIX.length) == Constants.HTTPS_PREFIX) - { - APACHE_FLEX_BIN_DISTRO_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE; - if (stepsOverride != "") - { - APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; - } - else - { - APACHE_FLEX_BIN_INSTALLER_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; - } - } - else - { - APACHE_FLEX_BIN_DISTRO_URL = useMirrorPath(_mirrorURLUtil.mirrorURL) + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE; - if (stepsOverride != "") - { - APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; - } - else - { - APACHE_FLEX_BIN_INSTALLER_URL = MD5CompareUtil.MD5_DOMAIN + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; - } - } + private function useMirrorPath(path:String):String + { + if (_useMirror) + { + return path; + } - if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX) - { - installerAppPath = useMirrorPath(_mirrorURLUtil.mirrorURL) + installerAppPath; - } + return ""; + } - main(); - } + private function getMirrorURLResultHandler():void + { + var logMessages:ArrayCollection = ILog(_mirrorURLUtil).log; + var i:int; + var n:int = logMessages.length; + for (i = 0; i < n; i++) + { + log(String(logMessages.getItemAt(i))); + } - protected function main():void - { + if (_mirrorURLUtil.errorOccurred) + { + abortInstallation("mirrorURLUtil.errorOccurred"); + main(); + } + else + { + updatePaths(); + } - if (shouldUpdate()) - { - doUpdate(); - } - } + } - private function logVersion():void - { - if (!loggedVersion) - { - //Current version - var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; - var xmlns:Namespace = new Namespace(applicationDescriptor.namespace()); - var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString(); + protected function updatePaths():void + { + if (APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.URL_PREFIX.length) == Constants.URL_PREFIX + || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.FILE_PREFIX.length) == Constants.FILE_PREFIX + || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.HTTPS_PREFIX.length) == Constants.HTTPS_PREFIX) + { + APACHE_FLEX_BIN_DISTRO_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE; + if (stepsOverride != "") + { + APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; + } + else + { + APACHE_FLEX_BIN_INSTALLER_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; + } + } + else + { + APACHE_FLEX_BIN_DISTRO_URL = useMirrorPath(_mirrorURLUtil.mirrorURL) + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE; + if (stepsOverride != "") + { + APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; + } + else + { + APACHE_FLEX_BIN_INSTALLER_URL = MD5CompareUtil.MD5_DOMAIN + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; + } + } - // Log the Installer version to help with any support issues that arise. - log("Installer version " + currentVersion + " (" + _os.os + ")", 0); - loggedVersion = true; - } - } + if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX) + { + installerAppPath = useMirrorPath(_mirrorURLUtil.mirrorURL) + installerAppPath; + } - protected function shouldUpdate():Boolean - { - var shouldUpdate:Boolean = false; - //Current version - var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; - var xmlns:Namespace = new Namespace(applicationDescriptor.namespace()); - var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString(); + main(); + } - logVersion(); + protected function main():void + { - var availBuildNumbers:Array = _latestVersion.split("."); - var currentBuildNumbers:Array = currentVersion.split("."); + if (shouldUpdate()) + { + doUpdate(); + } + } - if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0])) - { - return true; - } - else if (parseInt(availBuildNumbers[0]) == parseInt(currentBuildNumbers[0])) - { - if (parseInt(availBuildNumbers[1]) > parseInt(currentBuildNumbers[1])) - { - return true; - } - else if (parseInt(availBuildNumbers[1]) == parseInt(currentBuildNumbers[1])) - { - if (parseInt(availBuildNumbers[2]) > parseInt(currentBuildNumbers[2])) - { - return true; - } - } - } - return false; + private function logVersion():void + { + if (!loggedVersion) + { + //Current version + var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; + var xmlns:Namespace = new Namespace(applicationDescriptor.namespace()); + var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString(); - } + // Log the Installer version to help with any support issues that arise. + log("Installer version " + currentVersion + " (" + _os.os + ")", 0); + loggedVersion = true; + } + } - protected function doUpdate():void - { - var updaterDialog:UpdaterDialog = UpdaterDialog(PopUpManager.createPopUp(this, UpdaterDialog, true)); - updaterDialog.addEventListener("close", handleUpdaterDialogClose); - updaterDialog.latestVersion = _latestVersion; - PopUpManager.centerPopUp(updaterDialog); - } + protected function shouldUpdate():Boolean + { + var shouldUpdate:Boolean = false; + //Current version + var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; + var xmlns:Namespace = new Namespace(applicationDescriptor.namespace()); + var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString(); - protected function handleUpdaterDialogClose(event:Event):void - { - PopUpManager.removePopUp(IFlexDisplayObject(event.target)); - } + logVersion(); - protected function handleInstallBtnClick(event:MouseEvent):void - { - var airVersionID:String = airVersion.selectedItem.versionID; - var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; + var availBuildNumbers:Array = _latestVersion.split("."); + var currentBuildNumbers:Array = currentVersion.split("."); - log("SDK version " + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY); + if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0])) + { + return true; + } + else if (parseInt(availBuildNumbers[0]) == parseInt(currentBuildNumbers[0])) + { + if (parseInt(availBuildNumbers[1]) > parseInt(currentBuildNumbers[1])) + { + return true; + } + else if (parseInt(availBuildNumbers[1]) == parseInt(currentBuildNumbers[1])) + { + if (parseInt(availBuildNumbers[2]) > parseInt(currentBuildNumbers[2])) + { + return true; + } + } + } + return false; - if (flexVersion.selectedItem.needsAIR) - { - if (airVersionID) - log("AIR version " + airVersionID); - else - log("AIR version " + AIR_VERSION); - } + } - if (flexVersion.selectedItem.needsFlash) - { - if (flashVersionID) - log("Flash Player version " + flashVersionID); - else - log("Flash Player version " + FLASH_PLAYER_VERSION); - } + protected function doUpdate():void + { + var updaterDialog:UpdaterDialog = UpdaterDialog(PopUpManager.createPopUp(this, UpdaterDialog, true)); + updaterDialog.addEventListener("close", handleUpdaterDialogClose); + updaterDialog.latestVersion = _latestVersion; + PopUpManager.centerPopUp(updaterDialog); + } - if (flexSDKTxtInput.text == "") - { - log(_viewResourceConstants.INFO_ENTER_VALID_FLEX_SDK_PATH); - } - else - { - _langSelect.enabled = false; - _flexHome = flexSDKTxtInput.text; - resetInstallStepsActivity(); - addOptionalComponentsToInstallSteps(); - this.currentState = "installState"; - install(); - } - } + protected function handleUpdaterDialogClose(event:Event):void + { + PopUpManager.removePopUp(IFlexDisplayObject(event.target)); + } - protected function handleZeroStepNextBtnClick(event:MouseEvent):void - { - directoryBtn.enabled = false; + protected function handleInstallBtnClick(event:MouseEvent):void + { + var airVersionID:String = airVersion.selectedItem.versionID; + var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; - AIR_VERSION = airVersion.selectedItem.version; - var airVersionID:String = airVersion.selectedItem.versionID; - FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; - var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; + log("SDK version " + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY); - setXMLVariables(); // as AIR and Flash version may of changed + if (flexVersion.selectedItem.needsAIR) + { + if (airVersionID) + { + log("AIR version " + airVersionID); + } + else + { + log("AIR version " + AIR_VERSION); + } + } - if (!legacy) - { - var req:URLRequest = new URLRequest(APACHE_FLEX_BIN_INSTALLER_URL); - loader = new URLLoader(); - loader.dataFormat = URLLoaderDataFormat.TEXT; - loader.addEventListener(Event.COMPLETE, handleInstallerXMLLoaded); - loader.addEventListener(ErrorEvent.ERROR, handleInstallerXMLError); - loader.addEventListener(IOErrorEvent.IO_ERROR, handleInstallIOXMLError); + if (flexVersion.selectedItem.needsFlash) + { + if (flashVersionID) + { + log("Flash Player version " + flashVersionID); + } + else + { + log("Flash Player version " + FLASH_PLAYER_VERSION); + } + } - loader.load(req); - } - else - { - showDirectoryState(); - } - } + if (flexSDKTxtInput.text == "") + { + log(_viewResourceConstants.INFO_ENTER_VALID_FLEX_SDK_PATH); + } + else + { + _langSelect.enabled = false; + _flexHome = flexSDKTxtInput.text; + resetInstallStepsActivity(); + addOptionalComponentsToInstallSteps(); + this.currentState = "installState"; + install(); + } + } - protected function handleFirstStepBackBtnClick(event:MouseEvent):void - { - showDefaultState(); - } + protected function handleZeroStepNextBtnClick(event:MouseEvent):void + { + directoryBtn.enabled = false; - protected function handleSecondStepBackBtnClick(event:MouseEvent):void - { - showDirectoryState(); - } + AIR_VERSION = airVersion.selectedItem.version; + var airVersionID:String = airVersion.selectedItem.versionID; + FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; + var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; - protected function handleFirstStepNextBtnClick(event:MouseEvent):void - { - // Quick check to see if the selected directory is writable - try - { - var f:File = new File(_flexHome + File.separator + "flex.txt"); - checkDirWritable(f); - } - catch (e:Error) - { - log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); - flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; - flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; - updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); - return; - } + setXMLVariables(); // as AIR and Flash version may of changed - showOptionsState(); - } + if (!legacy) + { + if (newSDKSelected) + { + var req:URLRequest = new URLRequest(APACHE_FLEX_BIN_INSTALLER_URL); + loader = new ApacheURLLoader(); + loader.dataFormat = URLLoaderDataFormat.TEXT; + loader.addEventListener(Event.COMPLETE, handleInstallerXMLLoaded); + loader.addEventListener(ErrorEvent.ERROR, handleInstallerXMLError); + loader.addEventListener(IOErrorEvent.IO_ERROR, handleInstallerXMLError); - protected function handleInstallerXMLLoaded(event:Event):void - { - var data:XML = XML(event.target.data); - var localeList:Array = resourceManager.localeChain; - _installerComponentsDataProvider = new ArrayCollection(); - var compList:XMLList = data.component; - for each (var comp:XML in compList) - { - var vo:InstallerComponentVO = new InstallerComponentVO(getLocalizedString(comp, "label"), - getLocalizedString(comp, "message"), getLocalizedString(comp, "license"), - getLocalizedString(comp, "licenseURL"), - comp.@id.toString(), comp.@required.toString() == "true"); - licensePropertyMap[comp.@property.toString()] = vo; - _installerComponentsDataProvider.addItem(vo); - } - usingXML = true; - installStepsData = data.steps.step; - var strings:XMLList = data.strings.string; - for each (var x:XML in strings) - { - var id:String = x.@id.toString(); - if (id in _viewResourceConstants) - { - var val:String = getLocalizedString(x, null); - _viewResourceConstants[id] = val; - var pce:PropertyChangeEvent = PropertyChangeEvent.createUpdateEvent(this, id, "", val); - _viewResourceConstants.dispatchEvent(pce); - } - } - var props:XMLList = data.properties.property; - for each (x in props) - { - additionalProps[x.@name.toString()] = x.@value.toString(); - } - currentState = "directoryState"; - } + loader.load(req); + } + } + else + { + showDirectoryState(); + } + } - private function getLocalizedString(xml:XML, propName:String):String - { - var compBundle:XMLList; - for each (var locale:String in resourceManager.localeChain) - { - compBundle = xml[locale]; - if (compBundle.length() == 1) - { - if (propName) - { - var xmlList:XMLList = compBundle[0][propName]; - if (xmlList.length() == 1) - { - return xmlList[0].toString(); - } - } - else - { - var s:String = compBundle[0].toString(); - if (s.length > 0) - return s; - } - } - } - return ""; - } + protected function handleFirstStepBackBtnClick(event:MouseEvent):void + { + showDefaultState(); + } - protected function handleInstallerXMLError(event:Event):void - { - log("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL); - abortInstallation("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL); - } + protected function handleSecondStepBackBtnClick(event:MouseEvent):void + { + showDirectoryState(); + } - protected function handleInstallIOXMLError(event:IOErrorEvent):void - { - // Stream Error 2032 here means that the SSL connection can't be created. TLS/SSL error? - log("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL + " with " + event.text); - abortInstallation("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL); - } + protected function handleFirstStepNextBtnClick(event:MouseEvent):void + { + // Quick check to see if the selected directory is writable + try + { + var f:File = new File(_flexHome + File.separator + "flex.txt"); + checkDirWritable(f); + } + catch (e:Error) + { + log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); + flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; + flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; + updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); + return; + } - protected function showDefaultState():void - { - zeroStepGroup.visible = true; - directoryBtn.enabled = true; - currentState = "default"; - } + showOptionsState(); + } - protected function showDirectoryState():void - { - initiateInstallStepsActivity(); - if (currentState != "optionsState") - { - initializeInstallerComponentsDataProvider(); - } - currentState = "directoryState"; - } + protected function handleInstallerXMLLoaded(event:Event):void + { + var data:XML = XML(event.target.data); + var localeList:Array = resourceManager.localeChain; + _installerComponentsDataProvider = new ArrayCollection(); + compList = data.component.copy(); + for each (var comp:XML in compList) + { + var vo:InstallerComponentVO = new InstallerComponentVO(getLocalizedString(comp, "label"), + getLocalizedString(comp, "message"), getLocalizedString(comp, "license"), + getLocalizedString(comp, "licenseURL"), + comp.@id.toString(), comp.@required.toString() == "true"); + licensePropertyMap[comp.@property.toString()] = vo; + _installerComponentsDataProvider.addItem(vo); + } + usingXML = true; + // progressLabels = data.progressLabels[0]; + installStepsData = data.steps.step; + var strings:XMLList = data.strings.string; + for each (var x:XML in strings) + { + var id:String = x.@id.toString(); + if (id in _viewResourceConstants) + { + var val:String = getLocalizedString(x, null); + _viewResourceConstants[id] = val; + var pce:PropertyChangeEvent = PropertyChangeEvent.createUpdateEvent(this, id, "", val); + _viewResourceConstants.dispatchEvent(pce); + } + } + var props:XMLList = data.properties.property; + for each (x in props) + { + additionalProps[x.@name.toString()] = x.@value.toString(); + } + currentState = "directoryState"; + System.disposeXML(data); + } - protected function showOptionsState():void - { - currentState = "optionsState"; - checkIfAllRequiredComponentsPromptsAnswered(); - } + private function getLocalizedString(xml:XML, propName:String):String + { + var compBundle:XMLList; + for each (var locale:String in resourceManager.localeChain) + { + compBundle = xml[locale]; + if (compBundle.length() == 1) + { + if (propName) + { + var xmlList:XMLList = compBundle[0][propName]; + if (xmlList.length() == 1) + { + return xmlList[0].toString(); + } + } + else + { + var s:String = compBundle[0].toString(); + if (s.length > 0) + { + return s; + } + } + } + } + return ""; + } - protected function initiateInstallStepsActivity():void - { - _installationSteps = new ArrayCollection(); + protected function handleInstallerXMLError(event:Event):void + { + log("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL); + abortInstallation("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL); + } - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_FLEX_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF)); - } + protected function showDefaultState():void + { + zeroStepGroup.visible = true; + directoryBtn.enabled = true; + currentState = "default"; + } - protected function resetInstallStepsActivity():void - { - for each(var step:StepItem in _installationSteps) - { - step.status = StepItem.NORMAL; - } - } + protected function showDirectoryState():void + { + initiateInstallStepsActivity(); + if (currentState != "optionsState") + { + initializeInstallerComponentsDataProvider(); + } + currentState = "directoryState"; + } - protected function addOptionalComponentsToInstallSteps():void - { - if (usingXML) - { - _installationSteps = new ArrayCollection(); + protected function showOptionsState():void + { + currentState = "optionsState"; + checkIfAllRequiredComponentsPromptsAnswered(); + } - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK)); - _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_FLEX_SDK)); + protected function initiateInstallStepsActivity():void + { + _installationSteps = new ArrayCollection(); - for each (var stepData:XML in installStepsData) - { - var propName:String = stepData.@property.toString(); - if (!propName || InstallerComponentVO(licensePropertyMap[propName]).selected) - { - var si:StepItem = new StepItem(getLocalizedString(stepData, null)); - _installationSteps.addItem(si); - stepIDs.push(stepData.@id.toString()); - stepLabels.push(si.label); - } - } - return; - } - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (!obj.required && obj.selected) - { - _installationSteps.addItem(new StepItem(obj.label)); - } - } - } + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_FLEX_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF)); + } - protected function initializeInstallerComponentsDataProvider():void - { - _installerComponentsDataProvider = new ArrayCollection(); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, - _viewResourceConstants.ASK_APACHE_FLEX, _viewResourceConstants.LICENSE_APACHE_V2, - _viewResourceConstants.LICENSE_URL_APACHE_V2, - "STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK", true)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, - _viewResourceConstants.ASK_ADOBE_AIR_SDK, - _viewResourceConstants.LICENSE_ADOBE_AIR_SDK, - _viewResourceConstants.LICENSE_URL_ADOBE_AIR_SDK, - "STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK", true)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, - _viewResourceConstants.ASK_ADOBE_FLASH_PLAYER_GLOBAL_SWC, - _viewResourceConstants.LICENSE_ADOBE_SDK, - _viewResourceConstants.LICENSE_URL_ADOBE_SDK, - "STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC", true)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, - _viewResourceConstants.ASK_SWFOBJECT, _viewResourceConstants.LICENSE_SWFOBJECT, - _viewResourceConstants.LICENSE_URL_SWFOBJECT, "STEP_REQUIRED_INSTALL_SWFOBJECT", - true)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, - _viewResourceConstants.ASK_OSMF, _viewResourceConstants.LICENSE_OSMF, - _viewResourceConstants.LICENSE_URL_OSMF, "STEP_REQUIRED_INSTALL_OSMF", true)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, - _viewResourceConstants.ASK_FONTSWF, _viewResourceConstants.LICENSE_FONTSWF, - _viewResourceConstants.LICENSE_URL_FONTSWF, "STEP_OPTIONAL_INSTALL_FONTSWF", - false)); - _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, - _viewResourceConstants.ASK_BLAZEDS, _viewResourceConstants.LICENSE_BLAZEDS, - _viewResourceConstants.LICENSE_URL_BLAZEDS, "STEP_OPTIONAL_INSTALL_BLAZEDS", - false)); - } + protected function resetInstallStepsActivity():void + { + for each(var step:StepItem in _installationSteps) + { + step.status = StepItem.NORMAL; + } + } - protected function install():void - { - createDirectories(); - } + protected function addOptionalComponentsToInstallSteps():void + { + if (usingXML) + { + _installationSteps = new ArrayCollection(); - protected function handleAirVersionChange(event:Event):void - { - AIR_VERSION = airVersion.selectedItem.version; + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK)); + _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_FLEX_SDK)); - // Match AIR and Flash versions - if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex) - { - flashPlayerVersion.selectedIndex = airVersion.selectedIndex; - FLASH_PLAYER_VERSION = FLASH_PLAYER_VERSIONS[airVersion.selectedIndex].version; - } - } + for each (var stepData:XML in installStepsData) + { + var propName:String = stepData.@property.toString(); + if (!propName || InstallerComponentVO(licensePropertyMap[propName]).selected) + { + var si:StepItem = new StepItem(getLocalizedString(stepData, null)); + _installationSteps.addItem(si); + stepIDs.push(stepData.@id.toString()); + stepLabels.push(si.label); + } + } + return; + } + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (!obj.required && obj.selected) + { + _installationSteps.addItem(new StepItem(obj.label)); + } + } + } - protected function handleFlashPlayerVersionChange(event:Event):void - { - FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; + protected function initializeInstallerComponentsDataProvider():void + { + var versionNum:int = int(APACHE_FLEX_BIN_DISTRO_VERSION.split('.').join('')); + _installerComponentsDataProvider = new ArrayCollection(); + /** + * version 4.13.0 of the SDK is when the installer started using the new xml based + * way of displaying/updating required or optional components of the installer + */ + if (usingXML && (versionNum >= 4130)) + { + for each (var comp:XML in compList) + { + var vo:InstallerComponentVO = new InstallerComponentVO(getLocalizedString(comp, "label"), + getLocalizedString(comp, "message"), getLocalizedString(comp, "license"), + getLocalizedString(comp, "licenseURL"), + comp.@id.toString(), comp.@required.toString() == "true"); + licensePropertyMap[comp.@property.toString()] = vo; + _installerComponentsDataProvider.addItem(vo); + } + } + else + { + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, + _viewResourceConstants.ASK_APACHE_FLEX, _viewResourceConstants.LICENSE_APACHE_V2, + _viewResourceConstants.LICENSE_URL_APACHE_V2, + "STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK", true)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, + _viewResourceConstants.ASK_ADOBE_AIR_SDK, + _viewResourceConstants.LICENSE_ADOBE_AIR_SDK, + _viewResourceConstants.LICENSE_URL_ADOBE_AIR_SDK, + "STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK", true)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, + _viewResourceConstants.ASK_ADOBE_FLASH_PLAYER_GLOBAL_SWC, + _viewResourceConstants.LICENSE_ADOBE_SDK, + _viewResourceConstants.LICENSE_URL_ADOBE_SDK, + "STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC", true)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, + _viewResourceConstants.ASK_SWFOBJECT, + _viewResourceConstants.LICENSE_SWFOBJECT, + _viewResourceConstants.LICENSE_URL_SWFOBJECT, + "STEP_REQUIRED_INSTALL_SWFOBJECT", true)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, + _viewResourceConstants.ASK_OSMF, + _viewResourceConstants.LICENSE_OSMF, + _viewResourceConstants.LICENSE_URL_OSMF, + "STEP_REQUIRED_INSTALL_OSMF", true)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, + _viewResourceConstants.ASK_BLAZEDS, + _viewResourceConstants.LICENSE_BLAZEDS, + _viewResourceConstants.LICENSE_URL_BLAZEDS, + "STEP_OPTIONAL_INSTALL_BLAZEDS", false)); + _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, + _viewResourceConstants.ASK_FONTSWF, + _viewResourceConstants.LICENSE_FONTSWF, + _viewResourceConstants.LICENSE_URL_FONTSWF, + "STEP_OPTIONAL_INSTALL_FONTSWF", false)); +// _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OFL_FONTS, +// _viewResourceConstants.ASK_OFL_FONTS, +// _viewResourceConstants.LICENSE_OFL_FONTS, +// _viewResourceConstants.LICENSE_URL_OFL_FONTS, +// "STEP_REQUIRED_INSTALL_OFL_FONTS", true)); + } + } - // Match AIR and Flash versions - if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex) - { - airVersion.selectedIndex = flashPlayerVersion.selectedIndex; - AIR_VERSION = AIR_VERSIONS[flashPlayerVersion.selectedIndex].version; - } - } + protected function install():void + { + createDirectories(); + } - protected function handleFlexVersionChange(event:Event):void - { - var item:Object = flexVersion.selectedItem; - airVersion.enabled = item.needsAIR; - flashPlayerVersion.enabled = item.needsFlash; - updateFlexVersionStrings(item); - updatePaths(); - updateWindowTitle(); - InstallApacheFlexSkin(skin).textIcon.source = item.icon; - } + protected function handleAirVersionChange(event:Event):void + { + AIR_VERSION = airVersion.selectedItem.version; - protected function browseForSDK(event:MouseEvent):void - { - var file:File = new File(); + // Match AIR and Flash versions + if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex) + { + flashPlayerVersion.selectedIndex = airVersion.selectedIndex; + FLASH_PLAYER_VERSION = FLASH_PLAYER_VERSIONS[airVersion.selectedIndex].version; + } + } - file.addEventListener(Event.SELECT, flexSDKDirSelected, false, 0, true); - file.browseForDirectory(_viewResourceConstants.INFO_SELECT_DIRECTORY); - } + protected function handleFlashPlayerVersionChange(event:Event):void + { + FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; - protected function checkDirWritable(file:File):void - { - var ba:ByteArray = new ByteArray(); - ba.writeUTFBytes("1"); - writeFileToDirectory(file, ba); - file.deleteFile(); - } + // Match AIR and Flash versions + if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex) + { + airVersion.selectedIndex = flashPlayerVersion.selectedIndex; + AIR_VERSION = AIR_VERSIONS[flashPlayerVersion.selectedIndex].version; + } + } - protected function flexSDKDirSelected(event:Event):void - { - var selectedDir:File = File(event.target); - var overlay:Boolean = flexVersion.selectedItem.overlay; + protected function handleFlexVersionChange(event:Event):void + { + /*APACHE_FLEX_BIN_DISTRO_VERSION = flexVersion.selectedItem.version; + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/ + var item:Object = flexVersion.selectedItem; + airVersion.enabled = item.needsAIR; + flashPlayerVersion.enabled = item.needsFlash; + updateFlexVersionStrings(item); + updatePaths(); + updateWindowTitle(); + InstallApacheFlexSkin(skin).textIcon.source = item.icon; + } - // Quick check to see if the selected directory is writable - try - { - var f:File = new File(selectedDir.nativePath + File.separator + "flex.txt"); - checkDirWritable(f); - } - catch (e:Error) - { - log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); - log(_viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS); - flexSDKTxtInput.text = selectedDir.nativePath; - flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS + " : " + selectedDir.nativePath; // tooltip - flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; // field - updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); - return; - } + protected function browseForSDK(event:MouseEvent):void + { + var file:File = new File(); - overlaying = overlay; - if (!overlay) - { - if (isDirectoryEmpty(selectedDir)) - { - _flexHome = selectedDir.nativePath; - flexSDKTxtInput.text = _flexHome; - nextBtn.enabled = true; - _langSelect.enabled = true; - flexSDKTxtInput.errorString = ""; - flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; - } - else - { - nextBtn.enabled = false; - flexSDKTxtInput.text = selectedDir.nativePath; - flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_NOT_EMPTY + " : " + selectedDir.nativePath; - flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_NOT_EMPTY; - } - } - else - { - _flexHome = selectedDir.nativePath; - flexSDKTxtInput.text = _flexHome; - nextBtn.enabled = true; - _langSelect.enabled = true; - flexSDKTxtInput.errorString = ""; - flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; - } - } + file.addEventListener(Event.SELECT, flexSDKDirSelected, false, 0, true); + file.browseForDirectory(_viewResourceConstants.INFO_SELECT_DIRECTORY); + } - protected function handleFlexSDXTxtInputChange(event:TextOperationEvent):void - { - var tempDir:File; - var path:String = flexSDKTxtInput.text; + protected function checkDirWritable(file:File):void + { + var ba:ByteArray = new ByteArray(); + ba.writeUTFBytes("1"); + writeFileToDirectory(file, ba); + file.deleteFile(); + } - try - { - tempDir = new File(path); + protected function flexSDKDirSelected(event:Event):void + { + var selectedDir:File = File(event.target); + var overlay:Boolean = flexVersion.selectedItem.overlay; - if (isDirectoryEmpty(tempDir)) - { - flexSDKTxtInput.errorString = ""; - _flexHome = path; - nextBtn.enabled = true; - _langSelect.enabled = true; - } - else - { - flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY; - nextBtn.enabled = false; - } - } - catch (e:Error) - { - flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY; - nextBtn.enabled = false; - } - } + // Quick check to see if the selected directory is writable + try + { + var f:File = new File(selectedDir.nativePath + File.separator + "flex.txt"); + checkDirWritable(f); + } + catch (e:Error) + { + log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); + log(_viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS); + flexSDKTxtInput.text = selectedDir.nativePath; + flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS + " : " + selectedDir.nativePath; // tooltip + flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS; // field + updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); + return; + } - protected function createDirectories():void - { - updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ACTIVE); + overlaying = overlay; + if (!overlay) + { + if (isDirectoryEmpty(selectedDir)) + { + _flexHome = selectedDir.nativePath; + flexSDKTxtInput.text = _flexHome; + nextBtn.enabled = true; + _langSelect.enabled = true; + flexSDKTxtInput.errorString = ""; + flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; + } + else + { + nextBtn.enabled = false; + flexSDKTxtInput.text = selectedDir.nativePath; + flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_NOT_EMPTY + " : " + selectedDir.nativePath; + flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_NOT_EMPTY; + } + } + else + { + _flexHome = selectedDir.nativePath; + flexSDKTxtInput.text = _flexHome; + nextBtn.enabled = true; + _langSelect.enabled = true; + flexSDKTxtInput.errorString = ""; + flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; + } + } - try - { - if (!overlaying) - log(_viewResourceConstants.INFO_CREATING_FLEX_HOME); - _flexHomeDir = createFolder(_flexHome); - log(_viewResourceConstants.INFO_CREATING_TEMP_DIR); - _flexTemp = _flexHome + File.separator + "temp"; - _flexTempDir = createFolder(_flexTemp); - updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.COMPLETE); - downloadApacheFlexSDK(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); - abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); - } - } + protected function handleFlexSDXTxtInputChange(event:TextOperationEvent):void + { + var tempDir:File; + var path:String = flexSDKTxtInput.text; - protected function downloadApacheFlexSDK():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ACTIVE); + try + { + tempDir = new File(path); - try - { - log(_viewResourceConstants.INFO_DOWNLOADING_FLEX_SDK + APACHE_FLEX_BIN_DISTRO_URL); - _apacheFlexSDKCompressedFile = File.userDirectory.resolvePath(_flexTemp + File.separator + APACHE_FLEX_BIN_DISTRO_FILE); - copyOrDownload(APACHE_FLEX_BIN_DISTRO_URL, handleApacheFlexSDKDownload, _apacheFlexSDKCompressedFile, handleApacheFlexSDKDownloadError, nocache); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message); - abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message); - } + if (isDirectoryEmpty(tempDir)) + { + flexSDKTxtInput.errorString = ""; + _flexHome = path; + nextBtn.enabled = true; + _langSelect.enabled = true; + } + else + { + flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY; + nextBtn.enabled = false; + } + } + catch (e:Error) + { + flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY; + nextBtn.enabled = false; + } + } - } + protected function createDirectories():void + { + updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ACTIVE); - protected function handleApacheFlexSDKDownload(event:Event):void - { - try - { - writeFileToDirectory(_apacheFlexSDKCompressedFile, event.target.data); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); - abortInstallation("handleApacheFlexSDKDownload " + e.message); - } + try + { + if (!overlaying) + { + log(_viewResourceConstants.INFO_CREATING_FLEX_HOME); + } + _flexHomeDir = createFolder(_flexHome); + log(_viewResourceConstants.INFO_CREATING_TEMP_DIR); + _flexTemp = _flexHome + File.separator + "temp"; + _flexTempDir = createFolder(_flexTemp); + updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.COMPLETE); + downloadApacheFlexSDK(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); + abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); + } + } - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.COMPLETE); + protected function downloadApacheFlexSDK():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ACTIVE); - updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ACTIVE); + try + { + log(_viewResourceConstants.INFO_DOWNLOADING_FLEX_SDK + APACHE_FLEX_BIN_DISTRO_URL); + _apacheFlexSDKCompressedFile = File.userDirectory.resolvePath(_flexTemp + File.separator + APACHE_FLEX_BIN_DISTRO_FILE); + copyOrDownload(APACHE_FLEX_BIN_DISTRO_URL, handleApacheFlexSDKDownload, _apacheFlexSDKCompressedFile, handleApacheFlexSDKDownloadError, nocache); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message); + abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message); + } - log(_viewResourceConstants.STEP_VERIFY_FLEX_SDK); + } - _md5CompareUtil.addEventListener(ProgressEvent.PROGRESS, md5VerificationProgressHandler); - _md5CompareUtil.verifyMD5(_apacheFlexSDKCompressedFile, APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE, uncompressApacheFlexSDK); - } + protected function handleApacheFlexSDKDownload(event:Event):void + { + try + { + writeFileToDirectory(_apacheFlexSDKCompressedFile, event.target.data); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); + abortInstallation("handleApacheFlexSDKDownload " + e.message); + } - protected function md5VerificationProgressHandler(event:ProgressEvent):void - { - if (logProgressEvents) - log("md5 progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); - if (event.bytesTotal > 0) - progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100); - } + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.COMPLETE); - protected function handleApacheFlexSDKDownloadError(event:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK); - abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK); - } + updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ACTIVE); - protected function uncompressApacheFlexSDK():void - { - if (!_md5CompareUtil.fileIsVerified) - { - updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ERROR); + log(_viewResourceConstants.STEP_VERIFY_FLEX_SDK); - log(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); + _md5CompareUtil.addEventListener(ProgressEvent.PROGRESS, md5VerificationProgressHandler); + _md5CompareUtil.verifyMD5(_apacheFlexSDKCompressedFile, APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE, uncompressApacheFlexSDK); + } - abortInstallation(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); - return; - } - else - { - updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE); + protected function md5VerificationProgressHandler(event:ProgressEvent):void + { + if (logProgressEvents) + { + log("md5 progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); + } + if (event.bytesTotal > 0) + { + progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100); + } + } - log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE); - } + protected function handleApacheFlexSDKDownloadError(event:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK); + abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK); + } - updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ACTIVE); + protected function uncompressApacheFlexSDK():void + { + if (_md5CompareUtil.validMD5) + { + if (!_md5CompareUtil.fileIsVerified) + { + updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ERROR); - try - { - log(_viewResourceConstants.INFO_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath); + log(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); - if (_os.isWindows()) - { - unzip(_apacheFlexSDKCompressedFile, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); - } - else - { - untar(_apacheFlexSDKCompressedFile, _flexTempDir, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); - } - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR); - abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + e.message); - } - } + abortInstallation(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); + return; + } + else + { + updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE); + log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE); + } + } + else + { + updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE); - protected function handleApacheFlexSDKZipFileUnzipComplete(event:Event):void - { - log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath); - updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.COMPLETE); + log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE); + } - if (_os.isWindows()) - { - if (usingXML) - runInstallerScript(); - else - downloadAIRRuntimeKitForWindows(); - } - else - { - if (!overlaying) - { - /* Copy all files from the unarchived directory to the root */ - var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT); - var files:Array = directory.getDirectoryListing(); - for each(var file:File in files) - { - file.copyTo(_flexHomeDir.resolvePath(file.name)); - } - } - if (usingXML) - { - runInstallerScript(); - } - else - { - if (_os.isMac()) - { - downloadAIRRuntimeKitForMac(); - } - else - { - downloadAIRRuntimeKitForLinux(); - } - } - } - } + updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ACTIVE); + + try + { + log(_viewResourceConstants.INFO_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath); + + if (_os.isWindows()) + { + unzip(_apacheFlexSDKCompressedFile, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); + } + else + { + untar(_apacheFlexSDKCompressedFile, _flexTempDir, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); + } + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR); + abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + e.message); + } + } + + protected function handleApacheFlexSDKZipFileUnzipComplete(event:Event):void + { + log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath); + updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.COMPLETE); + + if (_os.isWindows()) + { + if (usingXML) + { + runInstallerScript(); + } + else + { + downloadAIRRuntimeKitForWindows(); + } + } + else + { + if (!overlaying) + { + /* Copy all files from the unarchived directory to the root */ + var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT); + var files:Array = directory.getDirectoryListing(); + for each(var file:File in files) + { + file.copyTo(_flexHomeDir.resolvePath(file.name)); + } + } + if (usingXML) + { + runInstallerScript(); + } + else + { + if (_os.isMac()) + { + downloadAIRRuntimeKitForMac(); + } + else + { + downloadAIRRuntimeKitForLinux(); + } + } + } + } + + protected function handleApacheFlexSDKZipFileUnzipError(error:ErrorEvent = null):void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR); + abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + error.toString()); + } + + protected function runInstallerScript():void + { + ant = new Ant(); + ant.output = output; + + var file:File; + if (installOverride != "") + { + file = new File(installOverride); + } + else if (overlaying) + { + var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT); + if (_os.isWindows()) + { + file = _flexTempDir.resolvePath("installer.xml"); + } + else + { + file = directory.resolvePath("installer.xml"); + } + } + else + { + file = _flexHomeDir.resolvePath("installer.xml"); + } + addEventListener(Event.ENTER_FRAME, enterFrameHandler); + var context:Object = {installer: true}; + if (usingDownloadCache) + { + context["usingDownloadCache"] = usingDownloadCache; + context["downloadCacheFolder"] = downloadCacheFolder; + } + if (configOverride != "") + { + context["xml.properties"] = configOverride; + } + if (resourceManager.localeChain.length > 1) + { + context["bundle"] = resourceManager.localeChain[0]; + } + for (var p:String in licensePropertyMap) + { + if (InstallerComponentVO(licensePropertyMap[p]).selected) + { + context[p] = true; + } + } + for (p in additionalProps) + { + context[p] = additionalProps[p]; + } - protected function handleApacheFlexSDKZipFileUnzipError(error:ErrorEvent = null):void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR); - abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + error.toString()); - } + context["air.sdk.version"] = AIR_VERSION; + if (airVersion.selectedItem.versionID) + { + context["air.sdk.versionID"] = airVersion.selectedItem.versionID; + } + context["air.sdk.url.path"] = airVersion.selectedItem.path; + context["air.sdk.url.file"] = airVersion.selectedItem.file; + context["flash.sdk.version"] = FLASH_PLAYER_VERSION; + if (flashPlayerVersion.selectedItem.versionID) + { + context["flash.sdk.versionID"] = flashPlayerVersion.selectedItem.versionID; + } + if (debugMode) + { + context["verbose"] = true; + } + if (flashPlayerVersion.selectedItem.path) + { + context["flash.sdk.url.path"] = flashPlayerVersion.selectedItem.path; + context["flash.sdk.url.file"] = flashPlayerVersion.selectedItem.file; + } - protected function runInstallerScript():void - { - ant = new Ant(); - ant.output = output; + if (file.exists && !ant.processXMLFile(file, context, true)) + { + ant.addEventListener(Event.COMPLETE, completeHandler); + ant.addEventListener(ProgressEvent.PROGRESS, progressEventHandler); + } + else + { + completeHandler(null); + } + } - var file:File; - if (installOverride != "") + private function progressEventHandler(event:ProgressEvent):void + { + if (logProgressEvents) + { + log("progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); + } + if (event.bytesTotal > 0) + { + progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100); + } + /* + if (ant.progressClass is Copy) { - file = new File(installOverride); + progressBar.label = getLocalizedString(progressLabels, "Copy"); } - else if (overlaying) + else if (ant.progressClass is Get) { - var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT); - if (_os.isWindows()) - { - file = _flexTempDir.resolvePath("installer.xml"); - } - else - { - file = directory.resolvePath("installer.xml"); - } + progressBar.label = getLocalizedString(progressLabels, "Get"); } - else + else if (ant.progressClass is Checksum) { - file = _flexHomeDir.resolvePath("installer.xml"); + progressBar.label = getLocalizedString(progressLabels, "Checksum"); } - addEventListener(Event.ENTER_FRAME, enterFrameHandler); - var context:Object = {installer: true}; - if (usingDownloadCache) - { - context["usingDownloadCache"] = usingDownloadCache; - context["downloadCacheFolder"] = downloadCacheFolder; - } - if (configOverride != "") - { - context["xml.properties"] = configOverride; - } - if (resourceManager.localeChain.length > 1) - { - context["bundle"] = resourceManager.localeChain[0]; - } - for (var p:String in licensePropertyMap) - { - if (InstallerComponentVO(licensePropertyMap[p]).selected) - context[p] = true; - } - for (p in additionalProps) - context[p] = additionalProps[p]; + */ + } - context["air.sdk.version"] = AIR_VERSION; - if (airVersion.selectedItem.versionID) - context["air.sdk.versionID"] = airVersion.selectedItem.versionID; - context["air.sdk.url.path"] = airVersion.selectedItem.path; - context["air.sdk.url.file"] = airVersion.selectedItem.file; - context["flash.sdk.version"] = FLASH_PLAYER_VERSION; - if (flashPlayerVersion.selectedItem.versionID) - context["flash.sdk.versionID"] = flashPlayerVersion.selectedItem.versionID; - if (debugMode) - context["verbose"] = true; - if (flashPlayerVersion.selectedItem.path) - { - context["flash.sdk.url.path"] = flashPlayerVersion.selectedItem.path; - context["flash.sdk.url.file"] = flashPlayerVersion.selectedItem.file; - } + private function completeHandler(event:Event):void + { + if (Ant.currentAnt && !Ant.currentAnt.project.status) + { + var msg:String = Ant.currentAnt.project.failureMessage; + log(msg ? msg : "no failure message provided"); + if (currentStep > 0) + { + updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR); + } + } + else if (currentStep == stepLabels.length && currentStep > 0) + { + updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE); + } - if (file.exists && !ant.processXMLFile(file, context, true)) - { - ant.addEventListener(Event.COMPLETE, completeHandler); - ant.addEventListener(ProgressEvent.PROGRESS, progressEventHandler); - } - else - completeHandler(null); - } + if (Ant.currentAnt) + { + if (Ant.currentAnt.project.status) + { + tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os); + } + if (Ant.currentAnt.project.failureMessage) + { + cleanup(!Ant.currentAnt.project.status, "&info=" + escape(Ant.currentAnt.project.failureMessage)); + } + else + { + cleanup(!Ant.currentAnt.project.status); + } + } + else + { + cleanup(); + } + } - private function progressEventHandler(event:ProgressEvent):void - { - if (logProgressEvents) - log("progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); - if (event.bytesTotal > 0) - progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100); - /* - if (ant.progressClass is Copy) - { - progressBar.label = getLocalizedString(progressLabels, "Copy"); - } - else if (ant.progressClass is Get) - { - progressBar.label = getLocalizedString(progressLabels, "Get"); - } - else if (ant.progressClass is Checksum) - { - progressBar.label = getLocalizedString(progressLabels, "Checksum"); - } - */ - } + private var ant:Ant; - private function completeHandler(event:Event):void - { - if (Ant.currentAnt && !Ant.currentAnt.project.status) - { - var msg:String = Ant.currentAnt.project.failureMessage; - log(msg ? msg : "no failure message provided"); - if (currentStep > 0) - updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR); - } - else if (currentStep == stepLabels.length && currentStep > 0) - updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE); + private function output(s:String):void + { + var isPublic:Boolean = false; + var skipLog:Boolean = !debugMode; + if (s.indexOf(":") != -1 && s.charAt(0) == "\n") + { + // target output is a newline then the target name then a colon + if (currentStep < stepLabels.length && "\n" + stepIDs[currentStep] + ":" == s) + { + if (currentStep > 0) + { + updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE); + } + if (currentStep < stepLabels.length) + { + updateActivityStep(stepLabels[currentStep++], StepItem.ACTIVE); + } + } + isPublic = false; + } + else if (s.indexOf("[echo] ") != -1) + { + s = s.substr(s.indexOf("[echo] ") + 7); + isPublic = true; + skipLog = false; + } + else if (s.indexOf("[fail] ") != -1) + { + s = s.substr(s.indexOf("[fail] ") + 7); + isPublic = true; + skipLog = false; + } + log(s, -1, isPublic, skipLog); + } - if (Ant.currentAnt) - { - if (Ant.currentAnt.project.status) - tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os); - if (Ant.currentAnt.project.failureMessage) - cleanup(!Ant.currentAnt.project.status, "&info=" + escape(Ant.currentAnt.project.failureMessage)); - else - cleanup(!Ant.currentAnt.project.status); - } - else - { - cleanup(); - } - } + private function enterFrameHandler(event:Event):void + { + ant.doCallback(); + } - private var ant:Ant; + protected function downloadAIRRuntimeKitForWindows():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); - private function output(s:String):void - { - var isPublic:Boolean = false; - var skipLog:Boolean = !debugMode; - if (s.indexOf(":") != -1 && s.charAt(0) == "\n") - { - // target output is a newline then the target name then a colon - if (currentStep < stepLabels.length && "\n" + stepIDs[currentStep] + ":" == s) - { - if (currentStep > 0) - updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE); - if (currentStep < stepLabels.length) - updateActivityStep(stepLabels[currentStep++], StepItem.ACTIVE); - } - isPublic = false; - } - else if (s.indexOf("[echo] ") != -1) - { - s = s.substr(s.indexOf("[echo] ") + 7); - isPublic = true; - skipLog = false; - } - else if (s.indexOf("[fail] ") != -1) - { - s = s.substr(s.indexOf("[fail] ") + 7); - isPublic = true; - skipLog = false; - } - log(s, -1, isPublic, skipLog); - } + try + { + log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS + ADOBE_AIR_SDK_WIN_URL); + _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_WIN_FILE); + copyOrDownload(ADOBE_AIR_SDK_WIN_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); + abortInstallation(); + } + } - private function enterFrameHandler(event:Event):void - { - ant.doCallback(); - } + protected function downloadAIRRuntimeKitForMac():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); - protected function downloadAIRRuntimeKitForWindows():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); + try + { + log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_MAC_URL); + _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_MAC_FILE); + copyOrDownload(ADOBE_AIR_SDK_MAC_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); + abortInstallation(); + } + } - try - { - log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS + ADOBE_AIR_SDK_WIN_URL); - _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_WIN_FILE); - copyOrDownload(ADOBE_AIR_SDK_WIN_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); - abortInstallation(); - } - } + protected function downloadAIRRuntimeKitForLinux():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); - protected function downloadAIRRuntimeKitForMac():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); + try + { + log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_LINUX_URL); + _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_LINUX_FILE); + copyOrDownload(ADOBE_AIR_SDK_LINUX_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); + abortInstallation(); + } + } - try - { - log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_MAC_URL); - _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_MAC_FILE); - copyOrDownload(ADOBE_AIR_SDK_MAC_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); - abortInstallation(); - } - } + protected function handleAIRSDKDownload(event:Event):void + { + try + { + writeFileToDirectory(_adobeAIRSDKZipFile, event.target.data); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); + abortInstallation(); + } - protected function downloadAIRRuntimeKitForLinux():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.COMPLETE); - try - { - log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_LINUX_URL); - _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_LINUX_FILE); - copyOrDownload(ADOBE_AIR_SDK_LINUX_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); - abortInstallation(); - } - } + unzipAdobeAIRSDK(); + } - protected function handleAIRSDKDownload(event:Event):void - { - try - { - writeFileToDirectory(_adobeAIRSDKZipFile, event.target.data); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); - abortInstallation(); - } + protected function handleAIRSDKDownloadError(error:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_AIR_SDK); + abortInstallation(); + } - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.COMPLETE); + protected function unzipAdobeAIRSDK():void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ACTIVE); - unzipAdobeAIRSDK(); - } + try + { + if (_os.isWindows()) + { + unzipAdobeAIRSDKWindows() + } + else + { + unzipAdobeAIRSDKMac(); + } + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); + abortInstallation(); + } + } - protected function handleAIRSDKDownloadError(error:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_AIR_SDK); - abortInstallation(); - } + protected function unzipAdobeAIRSDKWindows():void + { + log(_viewResourceConstants.INFO_UNZIPPING + _adobeAIRSDKZipFile.nativePath); + unzip(_adobeAIRSDKZipFile, handleAdobeAIRSDKWinZipFileUnzipComplete, handleAdobeAIRSDKWinZipFileUnzipError); + } - protected function unzipAdobeAIRSDK():void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ACTIVE); + protected function unzipAdobeAIRSDKMac():void + { + if (NativeProcess.isSupported) + { + untar(_adobeAIRSDKZipFile, _flexHomeDir, handleAdobeAIRSDKMacUntarComplete, handleAdobeAIRSDKMacUntarError); + } + else + { + log(_viewResourceConstants.ERROR_NATIVE_PROCESS_NOT_SUPPORTED); + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); + } + } - try - { - if (_os.isWindows()) - { - unzipAdobeAIRSDKWindows() - } - else - { - unzipAdobeAIRSDKMac(); - } - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); - abortInstallation(); - } - } + protected function handleAdobeAIRSDKMacUntarError(error:ProgressEvent = null):void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); + abortInstallation(); + } - protected function unzipAdobeAIRSDKWindows():void - { - log(_viewResourceConstants.INFO_UNZIPPING + _adobeAIRSDKZipFile.nativePath); - unzip(_adobeAIRSDKZipFile, handleAdobeAIRSDKWinZipFileUnzipComplete, handleAdobeAIRSDKWinZipFileUnzipError); - } + protected function handleAdobeAIRSDKMacUntarComplete(event:Event):void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE); + log(_viewResourceConstants.INFO_FINISHED_UNTARING + _adobeAIRSDKZipFile.nativePath); + downloadPlayerGlobalSWC(); + } - protected function unzipAdobeAIRSDKMac():void - { - if (NativeProcess.isSupported) - { - untar(_adobeAIRSDKZipFile, _flexHomeDir, handleAdobeAIRSDKMacUntarComplete, handleAdobeAIRSDKMacUntarError); - } - else - { - log(_viewResourceConstants.ERROR_NATIVE_PROCESS_NOT_SUPPORTED); - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); - } - } + protected function handleAdobeAIRSDKWinZipFileUnzipComplete(event:Event):void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE); + log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _adobeAIRSDKZipFile.nativePath); + downloadPlayerGlobalSWC(); + } - protected function handleAdobeAIRSDKMacUntarError(error:ProgressEvent = null):void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); - abortInstallation(); - } + protected function handleAdobeAIRSDKWinZipFileUnzipError(error:ErrorEvent = null):void + { + updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); + } - protected function handleAdobeAIRSDKMacUntarComplete(event:Event):void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE); - log(_viewResourceConstants.INFO_FINISHED_UNTARING + _adobeAIRSDKZipFile.nativePath); - downloadPlayerGlobalSWC(); - } + protected function downloadPlayerGlobalSWC():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ACTIVE); - protected function handleAdobeAIRSDKWinZipFileUnzipComplete(event:Event):void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE); - log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _adobeAIRSDKZipFile.nativePath); - downloadPlayerGlobalSWC(); - } + try + { + log(_viewResourceConstants.INFO_INSTALLING_PLAYERGLOBAL_SWC + ADOBE_FB_GLOBALPLAYER_SWC_URL); + _fbGlobalPlayerDir = createFolder(_flexHome + File.separator + "frameworks" + File.separator + "libs" + File.separator + "player" + + File.separator + FLASH_PLAYER_VERSION); + _fbGlobalPlayerFile = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc"); + copyOrDownload(ADOBE_FB_GLOBALPLAYER_SWC_URL, handlePlayerGlobalDownload, _fbGlobalPlayerFile, handlePlayerGlobalDownloadError); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); + abortInstallation(); + } + } - protected function handleAdobeAIRSDKWinZipFileUnzipError(error:ErrorEvent = null):void - { - updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR); - } + protected function handlePlayerGlobalDownload(event:Event):void + { + try + { + var playerGlobalFile:File = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc"); + writeFileToDirectory(playerGlobalFile, event.target.data); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); + abortInstallation(); + } + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.COMPLETE); + copyConfigFiles(); + } - protected function downloadPlayerGlobalSWC():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ACTIVE); + protected function handlePlayerGlobalDownloadError(event:ErrorEvent = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLASH_PLAYER_SWC); + abortInstallation(); + } - try - { - log(_viewResourceConstants.INFO_INSTALLING_PLAYERGLOBAL_SWC + ADOBE_FB_GLOBALPLAYER_SWC_URL); - _fbGlobalPlayerDir = createFolder(_flexHome + File.separator + "frameworks" + File.separator + "libs" + File.separator + "player" - + File.separator + FLASH_PLAYER_VERSION); - _fbGlobalPlayerFile = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc"); - copyOrDownload(ADOBE_FB_GLOBALPLAYER_SWC_URL, handlePlayerGlobalDownload, _fbGlobalPlayerFile, handlePlayerGlobalDownloadError); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); - abortInstallation(); - } - } + protected function changeConfig(frameworksDir:File, file:File, flashPlayerVersion:String, swfVersion:String):void + { + if (isValidConfigFile(file)) + { + var configFile:FileStream = new FileStream(); + configFile.open(file, FileMode.READ); + var contents:String = configFile.readMultiByte(configFile.bytesAvailable, "utf-8"); + var playerVersion:RegExp = /<target-player>\d\d\.\d<\/target-player>/; + contents = contents.replace(playerVersion, "<target-player>" + flashPlayerVersion + "<\/target-player>"); + var playerSwfVersion:RegExp = /<swf-version>\d\d<\/swf-version>/; + contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>"); + configFile.close(); + configFile.open(file, FileMode.WRITE); + configFile.writeMultiByte(contents, "utf-8"); + var copyToFile:File = frameworksDir.resolvePath(file.name); + configFile.close(); + file.copyTo(copyToFile, true); + } + } - protected function handlePlayerGlobalDownload(event:Event):void - { - try - { - var playerGlobalFile:File = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc"); - writeFileToDirectory(playerGlobalFile, event.target.data); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); - abortInstallation(); - } - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.COMPLETE); - copyConfigFiles(); - } + protected function copyConfigFiles():void + { + var aborted:Boolean = false; - protected function handlePlayerGlobalDownloadError(event:ErrorEvent = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLASH_PLAYER_SWC); - abortInstallation(); - } + updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ACTIVE); - protected function changeConfig(frameworksDir:File, file:File, flashPlayerVersion:String, swfVersion:String):void - { - if (isValidConfigFile(file)) - { - var configFile:FileStream = new FileStream(); - configFile.open(file, FileMode.READ); - var contents:String = configFile.readMultiByte(configFile.bytesAvailable, "utf-8"); - var playerVersion:RegExp = /<target-player>\d\d\.\d<\/target-player>/; - contents = contents.replace(playerVersion, "<target-player>" + flashPlayerVersion + "<\/target-player>"); - var playerSwfVersion:RegExp = /<swf-version>\d\d<\/swf-version>/; - contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>"); - configFile.close(); - configFile.open(file, FileMode.WRITE); - configFile.writeMultiByte(contents, "utf-8"); - var copyToFile:File = frameworksDir.resolvePath(file.name); - configFile.close(); - file.copyTo(copyToFile, true); - } - } + try + { + //Config files + var configFilesDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "ide" + File.separator + "flashbuilder" + File.separator + + "config"); + var configFiles:Array = configFilesDir.getDirectoryListing(); + var flexHomeFrameworksDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "frameworks"); + log(_viewResourceConstants.INFO_INSTALLING_CONFIG_FILES); - protected function copyConfigFiles():void - { - var aborted:Boolean = false; + for each (var file:File in configFiles) + { + changeConfig(flexHomeFrameworksDir, file, FLASH_PLAYER_VERSION, FLASH_PLAYER_SWF_VERSION); + } - updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ACTIVE); + file = File.userDirectory.resolvePath(_flexHome + File.separator + "flex-sdk-description.xml"); + var descriptionFile:FileStream = new FileStream(); + descriptionFile.open(file, FileMode.READ); + var contents:String = descriptionFile.readMultiByte(descriptionFile.bytesAvailable, "utf-8"); + var description:RegExp = /<name>[^<]*<\/name>/; + contents = contents.replace(description, "<name>Apache Flex " + APACHE_FLEX_BIN_DISTRO_VERSION + " FP " + FLASH_PLAYER_VERSION + " AIR " + AIR_VERSION + " en_US</name>"); + descriptionFile.close(); + descriptionFile.open(file, FileMode.WRITE); + descriptionFile.writeMultiByte(contents, "utf-8"); + descriptionFile.close(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_INSTALL_CONFIG_FILES); + abortInstallation(); + aborted = true; + } - try - { - //Config files - var configFilesDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "ide" + File.separator + "flashbuilder" + File.separator - + "config"); - var configFiles:Array = configFilesDir.getDirectoryListing(); - var flexHomeFrameworksDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "frameworks"); - log(_viewResourceConstants.INFO_INSTALLING_CONFIG_FILES); + if (!aborted) + { + updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.COMPLETE); + downloadSwfObject(); + } + } - for each (var file:File in configFiles) - { - changeConfig(flexHomeFrameworksDir, file, FLASH_PLAYER_VERSION, FLASH_PLAYER_SWF_VERSION); - } + protected function downloadSwfObject():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ACTIVE); - file = File.userDirectory.resolvePath(_flexHome + File.separator + "flex-sdk-description.xml"); - var descriptionFile:FileStream = new FileStream(); - descriptionFile.open(file, FileMode.READ); - var contents:String = descriptionFile.readMultiByte(descriptionFile.bytesAvailable, "utf-8"); - var description:RegExp = /<name>[^<]*<\/name>/; - contents = contents.replace(description, "<name>Apache Flex " + APACHE_FLEX_BIN_DISTRO_VERSION + " FP " + FLASH_PLAYER_VERSION + " AIR " + AIR_VERSION + " en_US</name>"); - descriptionFile.close(); - descriptionFile.open(file, FileMode.WRITE); - descriptionFile.writeMultiByte(contents, "utf-8"); - descriptionFile.close(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_INSTALL_CONFIG_FILES); - abortInstallation(); - aborted = true; - } + try + { + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [SWF_OBJECT_FILE, SWF_OBJECT_URL])); + copyOrDownload(SWF_OBJECT_URL + SWF_OBJECT_FILE, handlSWFObjectDownload, null, handleSWFObjectDownloadError); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); + abortInstallation(); + } + } - if (!aborted) - { - updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.COMPLETE); - downloadSwfObject(); - } - } + protected function handlSWFObjectDownload(event:Event):void + { + log(_viewResourceConstants.INFO_DOWNLOADED); + var swfObjectZipFile:File = File.userDirectory.resolvePath(_flexTemp + File.separator + SWF_OBJECT_FILE); + writeFileToDirectory(swfObjectZipFile, event.target.data); + unzip(swfObjectZipFile, handleSWFObjectUnzipComplete, handleSWFObjectZipFileUnzipError); + } - protected function downloadSwfObject():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ACTIVE); + protected function handleSWFObjectDownloadError(event:ErrorEvent = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); + abortInstallation(); + } - try - { - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [SWF_OBJECT_FILE, SWF_OBJECT_URL])); - copyOrDownload(SWF_OBJECT_URL + SWF_OBJECT_FILE, handlSWFObjectDownload, null, handleSWFObjectDownloadError); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); - abortInstallation(); - } - } + protected function handleSWFObjectUnzipComplete(event:Event):void + { + try + { + var expressInstallFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "expressInstall.swf"); + expressInstallFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "expressInstall.swf")); - protected function handlSWFObjectDownload(event:Event):void - { - log(_viewResourceConstants.INFO_DOWNLOADED); - var swfObjectZipFile:File = File.userDirectory.resolvePath(_flexTemp + File.separator + SWF_OBJECT_FILE); - writeFileToDirectory(swfObjectZipFile, event.target.data); - unzip(swfObjectZipFile, handleSWFObjectUnzipComplete, handleSWFObjectZipFileUnzipError); - } + var swfObjectJSFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "swfobject.js"); + swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "swfobject.js")); - protected function handleSWFObjectDownloadError(event:ErrorEvent = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); - abortInstallation(); - } + swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("javascript" + File.separator + "FABridge" + File.separator + "samples" + File.separator + + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js")); - protected function handleSWFObjectUnzipComplete(event:Event):void - { - try - { - var expressInstallFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "expressInstall.swf"); - expressInstallFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "expressInstall.swf")); + var swfObjectDir:File = _flexHomeDir.resolvePath("swfobject"); + swfObjectDir.deleteDirectory(true); - var swfObjectJSFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "swfobject.js"); - swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "swfobject.js")); + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.COMPLETE); + installOSMF(); - swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("javascript" + File.separator + "FABridge" + File.separator + "samples" + File.separator - + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js")); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); + abortInstallation(); + } - var swfObjectDir:File = _flexHomeDir.resolvePath("swfobject"); - swfObjectDir.deleteDirectory(true); + } - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.COMPLETE); - installOSMF(); + protected function handleSWFObjectZipFileUnzipError(event:Event):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); + log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); + abortInstallation(); + } - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); - abortInstallation(); - } + protected function installNextOptionalComponent():void + { + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (obj.selected && !obj.installed && !obj.aborted) + { + switch (obj.label) + { + case _viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS: + { + installBlazeDS(); + return; + break; + } + case _viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF: + { + installFontSwf(); + return; + break; + } + default: + { + break; + } + } + } + } + checkAndHandleAllOptionalComponentsInstalled(); + } - } + protected function installBlazeDS():void + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ACTIVE); + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [BLAZEDS_FILE, BLAZEDS_URL])); + _blazeDSJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + BLAZEDS_FILE); + copyOrDownload(BLAZEDS_URL + BLAZEDS_FILE, handleBlazeDSDownloadComplete, null, handleBlazeDSInstallError); + } - protected function handleSWFObjectZipFileUnzipError(event:Event):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR); - log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT); - abortInstallation(); - } + protected function handleBlazeDSDownloadComplete(event:Event):void + { + try + { + writeFileToDirectory(_blazeDSJarFile, event.target.data); + copyFileToOptionalLibDir(_blazeDSJarFile); + updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, false); + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.COMPLETE); + clearData(ApacheURLLoader(event.target)); + installNextOptionalComponent(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); + installNextOptionalComponent(); + } + } - protected function installNextOptionalComponent():void - { - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (obj.selected && !obj.installed && !obj.aborted) - { - switch (obj.label) - { - case _viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS: - { - installBlazeDS(); - return; - break; - } - case _viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF: - { - installFontSwf(); - return; - break; - } - default: - { - break; - } - } - } - } - checkAndHandleAllOptionalComponentsInstalled(); - } + protected function installFontSwf():void + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ACTIVE); + downloadFontSwfAFEFile(); + } - protected function installBlazeDS():void - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ACTIVE); - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [BLAZEDS_FILE, BLAZEDS_URL])); - _blazeDSJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + BLAZEDS_FILE); - copyOrDownload(BLAZEDS_URL + BLAZEDS_FILE, handleBlazeDSDownloadComplete, null, handleBlazeDSInstallError); - } + protected function downloadFontSwfAFEFile():void + { + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AFE_FILE, AFE_URL])); + _afeJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AFE_FILE); + copyOrDownload(AFE_URL + AFE_FILE, handleFontSWFAFEFileDownloaded, null, handleFontSWFInstallError); + } - protected function handleBlazeDSDownloadComplete(event:Event):void - { - try - { - writeFileToDirectory(_blazeDSJarFile, event.target.data); - copyFileToOptionalLibDir(_blazeDSJarFile); - updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, false); - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.COMPLETE); - clearData(URLLoader(event.target)); - installNextOptionalComponent(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); - installNextOptionalComponent(); - } - } + protected function handleFontSWFAFEFileDownloaded(event:Event):void + { + try + { + writeFileToDirectory(_afeJarFile, event.target.data); + copyFileToOptionalLibDir(_afeJarFile); + clearData(ApacheURLLoader(event.target)); - protected function installFontSwf():void - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ACTIVE); - downloadFontSwfAFEFile(); - } + downloadFontSwfAGLFile(); - protected function downloadFontSwfAFEFile():void - { - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AFE_FILE, AFE_URL])); - _afeJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AFE_FILE); - copyOrDownload(AFE_URL + AFE_FILE, handleFontSWFAFEFileDownloaded, null, handleFontSWFInstallError); - } + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + installNextOptionalComponent(); + } + } - protected function handleFontSWFAFEFileDownloaded(event:Event):void - { - try - { - writeFileToDirectory(_afeJarFile, event.target.data); - copyFileToOptionalLibDir(_afeJarFile); - clearData(URLLoader(event.target)); + protected function downloadFontSwfAGLFile():void + { + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AGLJ40_FILE, AGLJ40_URL])); + _aglj40JarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AGLJ40_FILE); + copyOrDownload(AGLJ40_URL + AGLJ40_FILE, handleFontSWFAGLFileDownloaded, null, handleFontSWFInstallError); + } - downloadFontSwfAGLFile(); + protected function handleFontSWFAGLFileDownloaded(event:Event):void + { + try + { + writeFileToDirectory(_aglj40JarFile, event.target.data); + copyFileToOptionalLibDir(_aglj40JarFile); + clearData(ApacheURLLoader(event.target)); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - installNextOptionalComponent(); - } - } + downloadFontSwfFlexFontKitFile(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + installNextOptionalComponent(); + } + } - protected function downloadFontSwfAGLFile():void - { - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AGLJ40_FILE, AGLJ40_URL])); - _aglj40JarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AGLJ40_FILE); - copyOrDownload(AGLJ40_URL + AGLJ40_FILE, handleFontSWFAGLFileDownloaded, null, handleFontSWFInstallError); - } + protected function downloadFontSwfFlexFontKitFile():void + { + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [FLEX_FONTKIT_FILE, FLEX_FONTKIT_URL])); + _flexFontKitJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + FLEX_FONTKIT_FILE); + copyOrDownload(FLEX_FONTKIT_URL + FLEX_FONTKIT_FILE, handleFontSWFFlexFontKitFileDownloaded, null, handleFontSWFInstallError); + } - protected function handleFontSWFAGLFileDownloaded(event:Event):void - { - try - { - writeFileToDirectory(_aglj40JarFile, event.target.data); - copyFileToOptionalLibDir(_aglj40JarFile); - clearData(URLLoader(event.target)); + protected function handleFontSWFFlexFontKitFileDownloaded(event:Event):void + { + try + { + writeFileToDirectory(_flexFontKitJarFile, event.target.data); + copyFileToOptionalLibDir(_flexFontKitJarFile); + clearData(ApacheURLLoader(event.target)); - downloadFontSwfFlexFontKitFile(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - installNextOptionalComponent(); - } - } + downloadFontSwfRideauKitFile(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + installNextOptionalComponent(); + } + } - protected function downloadFontSwfFlexFontKitFile():void - { - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [FLEX_FONTKIT_FILE, FLEX_FONTKIT_URL])); - _flexFontKitJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + FLEX_FONTKIT_FILE); - copyOrDownload(FLEX_FONTKIT_URL + FLEX_FONTKIT_FILE, handleFontSWFFlexFontKitFileDownloaded, null, handleFontSWFInstallError); - } + protected function downloadFontSwfRideauKitFile():void + { + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [RIDEAU_FILE, RIDEAU_URL])); + _rideauJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + RIDEAU_FILE); + copyOrDownload(RIDEAU_URL + RIDEAU_FILE, handleFontSWFRideauFileDownloaded, null, handleFontSWFInstallError); + } - protected function handleFontSWFFlexFontKitFileDownloaded(event:Event):void - { - try - { - writeFileToDirectory(_flexFontKitJarFile, event.target.data); - copyFileToOptionalLibDir(_flexFontKitJarFile); - clearData(URLLoader(event.target)); + protected function handleFontSWFRideauFileDownloaded(event:Event):void + { + try + { + writeFileToDirectory(_rideauJarFile, event.target.data); + copyFileToOptionalLibDir(_rideauJarFile); + clearData(ApacheURLLoader(event.target)); - downloadFontSwfRideauKitFile(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - installNextOptionalComponent(); - } - } + updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, false); + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.COMPLETE); + installNextOptionalComponent(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + installNextOptionalComponent(); + } + } - protected function downloadFontSwfRideauKitFile():void - { - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [RIDEAU_FILE, RIDEAU_URL])); - _rideauJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + RIDEAU_FILE); - copyOrDownload(RIDEAU_URL + RIDEAU_FILE, handleFontSWFRideauFileDownloaded, null, handleFontSWFInstallError); - } + protected function installOSMF():void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ACTIVE); + downloadOSMFFile(); + } - protected function handleFontSWFRideauFileDownloaded(event:Event):void - { - try - { - writeFileToDirectory(_rideauJarFile, event.target.data); - copyFileToOptionalLibDir(_rideauJarFile); - clearData(URLLoader(event.target)); + protected function downloadOSMFFile():void + { + _osmfSWFFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWF_FILE.toLowerCase()); - updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, false); - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.COMPLETE); - installNextOptionalComponent(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - installNextOptionalComponent(); - } - } + log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [OSMF_SWC_FILE, OSMF_SWC_URL])); + _osmfSWCFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWC_FILE.toLowerCase()); + if (_useOSMF2) + { + downloadOSMF2SWC(); + } + else + { + copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE, handleOSMFSWCFileDownloaded, null, handleOSMFSWCInstallError); + } + } - protected function installOSMF():void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ACTIVE); - downloadOSMFFile(); - } + protected function downloadOSMF2SWC():void + { + var url:String; + var httpService:HTTPService = new HTTPService(); + httpService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; + url = httpService.url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE; + if (usingDownloadCache) + { + var cacheURL:String; + if (url.indexOf("http") == 0) + { + var c:int = url.indexOf("/"); + c = url.indexOf("/", c + 1); + c = url.indexOf("/", c + 1); + // that should find the slash after the server. + cacheURL = url.substr(c + 1); + if (debugMode) + { + log("http caching. url = " + cacheURL); + } + } + var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); + cacheFile = cacheFile.resolvePath(escape(cacheURL)); + if (debugMode) + { + log("searching cache for " + cacheFile.url); + } + if (cacheFile.exists) + { + if (debugMode) + { + log("found file in cache"); + } + url = cacheFile.url; + actuallyDownloadOSMF2SWC(new URLRequest(url)); + return; + } + } + httpService.addEventListener(ResultEvent.RESULT, getMirrorInfo); + httpService.addEventListener(FaultEvent.FAULT, handleOSMFSWCUnzipError); + httpService.send(); + } - protected function downloadOSMFFile():void - { - _osmfSWFFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWF_FILE.toLowerCase()); + protected function getMirrorInfo(event:ResultEvent):void + { + var mirror:String = String(event.result); + mirror = mirror.substr(mirror.indexOf('use_mirror=') + 'use_mirror='.length, mirror.length); + mirror = mirror.substring(0, mirror.indexOf('">')); - log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [OSMF_SWC_FILE, OSMF_SWC_URL])); - _osmfSWCFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWC_FILE.toLowerCase()); - if (_useOSMF2) - { - downloadOSMF2SWC(); - } - else - { - copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE, handleOSMFSWCFileDownloaded, null, handleOSMFSWCInstallError); - } - } + var mirrorURL:String = 'http://' + mirror + Constants.SOURCEFORGE_DL_URL + OSMF_SWC_URL + OSMF_SWC_FILE; + var refererURL:String = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + '/download?use_mirror=' + mirror; - protected function downloadOSMF2SWC():void - { - var url:String; - var httpService:HTTPService = new HTTPService(); - httpService.resultFormat = HTTPService.RESULT_FORMAT_TEXT; - url = httpService.url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE; - if (usingDownloadCache) - { - var cacheURL:String; - if (url.indexOf("http") == 0) - { - var c:int = url.indexOf("/"); - c = url.indexOf("/", c + 1); - c = url.indexOf("/", c + 1); - // that should find the slash after the server. - cacheURL = url.substr(c + 1); - if (debugMode) - log("http caching. url = " + cacheURL); - } - var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); - cacheFile = cacheFile.resolvePath(escape(cacheURL)); - if (debugMode) - log("searching cache for " + cacheFile.url); - if (cacheFile.exists) - { - if (debugMode) - log("found file in cache"); - url = cacheFile.url; - actuallyDownloadOSMF2SWC(new URLRequest(url)); - return; - } - } - httpService.addEventListener(ResultEvent.RESULT, getMirrorInfo); - httpService.addEventListener(FaultEvent.FAULT, handleOSMFSWCUnzipError); - httpService.send(); - } + var req:URLRequest = new URLRequest(mirrorURL); + req.requestHeaders = [new URLRequestHeader('Referer', refererURL)]; - protected function getMirrorInfo(event:ResultEvent):void - { - var mirror:String = String(event.result); - mirror = mirror.substr(mirror.indexOf('use_mirror=') + 'use_mirror='.length, mirror.length); - mirror = mirror.substring(0, mirror.indexOf('">')); + actuallyDownloadOSMF2SWC(req); + } - var mirrorURL:String = 'http://' + mirror + Constants.SOURCEFORGE_DL_URL + OSMF_SWC_URL + OSMF_SWC_FILE; - var refererURL:String = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + '/download?use_mirror=' + mirror; + protected function actuallyDownloadOSMF2SWC(req:URLRequest):void + { + loader = new ApacheURLLoader(); + loader.dataFormat = URLLoaderDataFormat.BINARY; + if (usingDownloadCache) + { + loader.addEventListener(Event.COMPLETE, cacheOSMF2SWC); + } + loader.addEventListener(Event.COMPLETE, handleOSMFSWCFileDownloaded); + loader.addEventListener(ErrorEvent.ERROR, handleOSMFSWCInstallError); + loader.addEventListener(IOErrorEvent.IO_ERROR, handleOSMFSWCInstallError); - var req:URLRequest = new URLRequest(mirrorURL); - req.requestHeaders = [new URLRequestHeader('Referer', refererURL)]; + loader.load(req); + } - actuallyDownloadOSMF2SWC(req); - } + protected function cacheOSMF2SWC(event:Event):void + { + var url:String; + url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE; + var cacheURL:String; + if (url.indexOf("http") == 0) + { + var c:int = url.indexOf("/"); + c = url.indexOf("/", c + 1); + c = url.indexOf("/", c + 1); + // that should find the slash after the server. + cacheURL = url.substr(c + 1); + if (debugMode) + { + log("http caching. url = " + cacheURL); + } + } + if (cacheURL) + { + var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); + cacheFile = cacheFile.resolvePath(escape(cacheURL)); + if (debugMode) + { + log("caching " + cacheFile.url); + } + if (!cacheFile.exists) + { + var fs:FileStream = new FileStream(); + fs.open(cacheFile, FileMode.WRITE); + var srcData:ByteArray = ByteArray(loader.data); + srcData.position = 0; + var ba:ByteArray = new ByteArray(); + srcData.readBytes(ba, 0, srcData.length); + ba.position = 0; + fs.writeBytes(ba, 0, ba.length); + fs.close(); + } + else + { + if (debugMode) + { + log("file was already in cache"); + } + } + } + } - protected function actuallyDownloadOSMF2SWC(req:URLRequest):void - { - loader = new URLLoader(); - loader.dataFormat = URLLoaderDataFormat.BINARY; - if (usingDownloadCache) - loader.addEventListener(Event.COMPLETE, cacheOSMF2SWC); - loader.addEventListener(Event.COMPLETE, handleOSMFSWCFileDownloaded); - loader.addEventListener(ErrorEvent.ERROR, handleOSMFSWCInstallError); - loader.addEventListener(IOErrorEvent.IO_ERROR, handleOSMFSWCInstallError); + protected function handleOSMFSWCFileDownloaded(event:Event):void + { + try + { + writeFileToDirectory(_osmfSWCFile, event.target.data); + copyFileToLibDir(_osmfSWCFile); + unzip(_osmfSWCFile, handleOSMFSWCUnzipped, handleOSMFSWCUnzipError); + clearData(ApacheURLLoader(event.target)); - loader.load(req); - } + updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, false); + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.COMPLETE); + installNextOptionalComponent(); + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + abortInstallation(); + } + } - protected function cacheOSMF2SWC(event:Event):void - { - var url:String; - url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE; - var cacheURL:String; - if (url.indexOf("http") == 0) - { - var c:int = url.indexOf("/"); - c = url.indexOf("/", c + 1); - c = url.indexOf("/", c + 1); - // that should find the slash after the server. - cacheURL = url.substr(c + 1); - if (debugMode) - log("http caching. url = " + cacheURL); - } - if (cacheURL) - { - var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); - cacheFile = cacheFile.resolvePath(escape(cacheURL)); - if (debugMode) - log("caching " + cacheFile.url); - if (!cacheFile.exists) - { - var fs:FileStream = new FileStream(); - fs.open(cacheFile, FileMode.WRITE); - var srcData:ByteArray = ByteArray(loader.data); - srcData.position = 0; - var ba:ByteArray = new ByteArray(); - srcData.readBytes(ba, 0, srcData.length); - ba.position = 0; - fs.writeBytes(ba, 0, ba.length); - fs.close(); - } - else - { - if (debugMode) - log("file was already in cache"); - } - } - } + /** + * Unzip osmf.swc, extract library.swf from it and copy it into frameworks/rsls/osmf_<flexversion>.<buildnumber> + * Delete other files extracted from osmf.swc + */ + protected function handleOSMFSWCUnzipped(event:Event):void + { + try + { + var osmfFileName:String = "osmf_" + getFlexVersionBuildString() + ".swf"; + var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "rsls" + File.separator + osmfFileName); + var osmfLibrarySwfFile:File = _flexHomeDir.resolvePath("library.swf"); + osmfLibrarySwfFile.moveTo(copyToFile); + var catalogXMLFile:File = _flexHomeDir.resolvePath("catalog.xml"); + if (catalogXMLFile.exists) + { + catalogXMLFile.deleteFile(); + } + var manifestXMLFile:File = _flexHomeDir.resolvePath("manifest.xml"); + if (manifestXMLFile.exists) + { + manifestXMLFile.deleteFile(); + } + } + catch (e:Error) + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + abortInstallation(); + } + } - protected function handleOSMFSWCFileDownloaded(event:Event):void - { - try - { - writeFileToDirectory(_osmfSWCFile, event.target.data); - copyFileToLibDir(_osmfSWCFile); - unzip(_osmfSWCFile, handleOSMFSWCUnzipped, handleOSMFSWCUnzipError); - clearData(URLLoader(event.target)); + protected function handleOSMFSWCUnzipError(event:Event):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + abortInstallation(); + } - updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, false); - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.COMPLETE); - installNextOptionalComponent(); - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - abortInstallation(); - } - } + protected function copyFileToOptionalLibDir(file:File):void + { + //Copy to "${FLEX_HOME}/lib/external/optional" + var copyToFile:File = _flexHomeDir.resolvePath("lib" + File.separator + "external" + File.separator + "optional" + File.separator + file.name); + file.copyTo(copyToFile, true); + } - /** - * Unzip osmf.swc, extract library.swf from it and copy it into frameworks/rsls/osmf_<flexversion>.<buildnumber> - * Delete other files extracted from osmf.swc - */ - protected function handleOSMFSWCUnzipped(event:Event):void - { - try - { - var osmfFileName:String = "osmf_" + getFlexVersionBuildString() + ".swf"; - var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "rsls" + File.separator + osmfFileName); - var osmfLibrarySwfFile:File = _flexHomeDir.resolvePath("library.swf"); - osmfLibrarySwfFile.moveTo(copyToFile); - var catalogXMLFile:File = _flexHomeDir.resolvePath("catalog.xml"); - if (catalogXMLFile.exists) - { - catalogXMLFile.deleteFile(); - } - var manifestXMLFile:File = _flexHomeDir.resolvePath("manifest.xml"); - if (manifestXMLFile.exists) - { - manifestXMLFile.deleteFile(); - } - } - catch (e:Error) - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - abortInstallation(); - } - } + protected function copyFileToLibDir(file:File):void + { + //Copy to "${FLEX_HOME}/frameworks/libs/" + var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "libs" + File.separator + file.name); + file.copyTo(copyToFile, true); + } - protected function handleOSMFSWCUnzipError(event:Event):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - abortInstallation(); - } + protected function handleBlazeDSInstallError(event:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); + log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["BlazeDS"])); + installNextOptionalComponent(); + } + + protected function handleFontSWFInstallError(event:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); + log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["FontSwf Utility"])); + installNextOptionalComponent(); + } - protected function copyFileToOptionalLibDir(file:File):void - { - //Copy to "${FLEX_HOME}/lib/external/optional" - var copyToFile:File = _flexHomeDir.resolvePath("lib" + File.separator + "external" + File.separator + "optional" + File.separator + file.name); - file.copyTo(copyToFile, true); - } + protected function handleOSMFSWFInstallError(event:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWF"])); + installNextOptionalComponent(); + } - protected function copyFileToLibDir(file:File):void - { - //Copy to "${FLEX_HOME}/frameworks/libs/" - var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "libs" + File.separator + file.name); - file.copyTo(copyToFile, true); - } + protected function handleOSMFSWCInstallError(event:* = null):void + { + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); + updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); + log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWC"])); + installNextOptionalComponent(); + } - protected function handleBlazeDSInstallError(event:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true); - log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["BlazeDS"])); - installNextOptionalComponent(); - } + protected function updateOptionalComponentInstallStatus(label:String, isInstalled:Boolean):void + { + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (obj.label == label) + { + obj.installed = isInstalled; + } + } + } - protected function handleFontSWFInstallError(event:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true); - log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["FontSwf Utility"])); - installNextOptionalComponent(); - } + protected function updateOptionalComponentInstallStatusAborted(label:String, isAborted:Boolean):void + { + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (obj.label == label) + { + obj.aborted = isAborted; + } + } + } - protected function handleOSMFSWFInstallError(event:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWF"])); - installNextOptionalComponent(); - } + protected function checkAndHandleAllOptionalComponentsInstalled():void + { + var allComponentsInstalled:Boolean = true; + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (!obj.required && obj.selected && !(obj.installed || obj.aborted)) + { + allComponentsInstalled = false; + } + } + if (allComponentsInstalled) + { + tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os); + cleanup(false); + } + } - protected function handleOSMFSWCInstallError(event:* = null):void - { - updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR); - updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true); - log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWC"])); - installNextOptionalComponent(); - } + protected function cleanup(isAbort:Boolean = false, abortInfo:String = ""):void + { + if (cleanedUp) + { + return; + } - protected function updateOptionalComponentInstallStatus(label:String, isInstalled:Boolean):void - { - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (obj.label == label) - { - obj.installed = isInstalled; - } - } - } + cleanedUp = true; - protected function updateOptionalComponentInstallStatusAborted(label:String, isAborted:Boolean):void - { - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (obj.label == label) - { - obj.aborted = isAborted; - } - } - } + CursorManager.removeBusyCursor(); + if (!_viewResourceConstants) + { + selectDefaultLanguageInEmergency(); + } + try + { + if (_flexTempDir) + { + _flexTempDir.deleteDirectory(true); + } + } + catch (e:Error) + { + log(_viewResourceConstants.ERROR_UNABLE_TO_DELETE_TEMP_DIRECTORY); + } - protected function checkAndHandleAllOptionalComponentsInstalled():void - { - var allComponentsInstalled:Boolean = true; - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (!obj.required && obj.selected && !(obj.installed || obj.aborted)) - { - allComponentsInstalled = false; - } - } - if (allComponentsInstalled) - { - tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os); - cleanup(false); - } - } + if (isAbort) + { + tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, + _os.os + "&info=" + abortInfo); + } + else if (!wasAborted) + { + log(_viewResourceConstants.INFO_INSTALLATION_COMPLETE); + updateUIHandleInstallationComplete(); + } - protected function cleanup(isAbort:Boolean = false, abortInfo:String = ""):void - { - if (cleanedUp) - return; + saveLogToDisk(); + } - cleanedUp = true; + protected function saveLogToDisk():void + { + if (!_flexHomeDir) + { + return; + } - CursorManager.removeBusyCursor(); - if (!_viewResourceConstants) - { - selectDefaultLanguageInEmergency(); - } - try - { - if (_flexTempDir) - { - _flexTempDir.deleteDirectory(true); - } - } - catch (e:Error) - { - log(_viewResourceConstants.ERROR_UNABLE_TO_DELETE_TEMP_DIRECTORY); - } + var file:File = _flexHomeDir.resolvePath("installer.log"); + var fs:FileStream = new FileStream(); - if (isAbort) - { - tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, - _os.os + "&info=" + abortInfo); - } - else if (!wasAborted) - { - log(_viewResourceConstants.INFO_INSTALLATION_COMPLETE); - updateUIHandleInstallationComplete(); - } + try + { + fs.open(file, FileMode.WRITE); + for each (var message:String in _messages) + { + fs.writeUTFBytes(message); + fs.writeUTFBytes("\n"); + } + fs.close(); + } + catch (e:Error) + { + // TODO log error? + } + } - saveLogToDisk(); - } + protected function updateUIHandleInstallationComplete():void + { + browseBtn.enabled = true; + openApacheFlexFolderBtn.visible = true; + openApacheFlexFolderBtn.includeInLayout = true; + progressBar.visible = false; + progressBar.includeInLayout = false; + thirdStepGroup.title = _viewResourceConstants.INFO_INSTALLATION_COMPLETE; + } - protected function saveLogToDisk():void - { - if (!_flexHomeDir) - { - return; - } + protected function abortInstallation(reason:String = ""):void + { + if (currentState != "installState") + { + showConsole(null); + } - var file:File = _flexHomeDir.resolvePath("installer.log"); - var fs:FileStream = new FileStream(); + directoryBtn.enabled = false; + browseBtn.enabled = false; + installBtn.enabled = false; + wasAborted = true; + if (_viewResourceConstants) + { + log(_viewResourceConstants.INFO_ABORT_INSTALLATION); + } + cleanup(true, reason); + if (_viewResourceConstants) + { + firstStepGroup.title = secondStepGroup.title = thirdStepGroup.title = _viewResourceConstants.INFO_ABORT_INSTALLATION; + } + } - try - { - fs.open(file, FileMode.WRITE); - for each (var message:String in _messages) - { - fs.writeUTFBytes(message); - fs.writeUTFBytes("\n"); - } - fs.close(); - } - catch (e:Error) - { - // TODO log error? - } - } + protected function _langSelect_changeHandler(event:IndexChangeEvent):void + { + var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE; - protected function updateUIHandleInstallationComplete():void - { - browseBtn.enabled = true; - openApacheFlexFolderBtn.visible = true; - openApacheFlexFolderBtn.includeInLayout = true; - progressBar.visible = false; - progressBar.includeInLayout = false; - thirdStepGroup.title = _viewResourceConstants.INFO_INSTALLATION_COMPLETE; - } + var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); + so.data.userDefaultLanguage = _langSelect.selectedItem["data"]; + so.flush(); - protected function abortInstallation(reason:String = ""):void - { - if (currentState != "installState") - showConsole(null); + if (_langSelect.selectedItem["data"] == defaultLanguage) + { + resourceManager.localeChain = [defaultLanguage]; + resourceManager.update(); + setButtonWidths(); + } + else + { + loadLanguage(_langSelect.selectedItem["data"], _langSelect_changeCompleteHandler); + } + } - directoryBtn.enabled = false; - browseBtn.enabled = false; - installBtn.enabled = false; - wasAborted = true; - if (_viewResourceConstants) - log(_viewResourceConstants.INFO_ABORT_INSTALLATION); - cleanup(true, reason); - if (_viewResourceConstants) - firstStepGroup.title = secondStepGroup.title = thirdStepGroup.title = _viewResourceConstants.INFO_ABORT_INSTALLATION; - } + private function _langSelect_changeCompleteHandler():void + { + var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE; + resourceManager.localeChain = [languageID, defaultLanguage]; + resourceManager.update(); + log("Using Locale: " + languageID); + setButtonWidths(); + } - protected function _langSelect_changeHandler(event:IndexChangeEvent):void - { - var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE; + override protected function resourcesChanged():void + { + super.resourcesChanged(); - var so:SharedObject = SharedObject.getLocal("InstallApacheFlex"); - so.data.userDefaultLanguage = _langSelect.selectedItem["data"]; - so.flush(); + if (_viewResourceConstants) + { + rememberInstallerComponents(); + updateWindowTitle(); + initiateInstallStepsActivity(); + initializeInstallerComponentsDataProvider(); + recallInstallerComponents(); - if (_langSelect.selectedItem["data"] == defaultLanguage) - { - resourceManager.localeChain = [defaultLanguage]; - resourceManager.update(); - setButtonWidths(); - } - else - { - loadLanguage(_langSelect.selectedItem["data"], _langSelect_changeCompleteHandler); - } - } + // This makes sure to update the Title of the license being displayed if the user changes languages + _currentLicenseLabel = _installerComponentsDataProvider.getItemAt(lastLicenseItemSelected).licenseName; - private function _langSelect_changeCompleteHandler():void - { - var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE; - resourceManager.localeChain = [languageID, defaultLanguage]; - resourceManager.update(); - log("Using Locale: " + languageID); - setButtonWidths(); - } + } + } - override protected function resourcesChanged():void - { - super.resourcesChanged(); + private var _selectedInstallerComponents:Vector.<InstallerComponentVO>; - if (_viewResourceConstants) - { - rememberInstallerComponents(); - updateWindowTitle(); - initiateInstallStepsActivity(); - initializeInstallerComponentsDataProvider(); - recallInstallerComponents(); - } - } + protected function rememberInstallerComponents():void + { + _selectedInstallerComponents = new Vector.<InstallerComponentVO>; + for each(var item:InstallerComponentVO in _installerComponentsDataProvider) + { + if (item.selected) + { + _selectedInstallerComponents.push(item); + } + } + } - private var _selectedInstallerComponents:Vector.<InstallerComponentVO>; + protected function recallInstallerComponents():void + { + for each(var item:InstallerComponentVO in _selectedInstallerComponents) + { + getInstallerComponentFromLabel(item.key).selected = true; + } + } - protected function rememberInstallerComponents():void - { - _selectedInstallerComponents = new Vector.<InstallerComponentVO>; - for each(var item:InstallerComponentVO in _installerComponentsDataProvider) - { - if (item.selected) - { - _selectedInstallerComponents.push(item); - } - } - } + protected function placeGroup(panel:Panel):void + { + panel.x = this.width / 2 - panel.width / 2; + } - protected function recallInstallerComponents():void - { - for each(var item:InstallerComponentVO in _selectedInstallerComponents) - { - getInstallerComponentFromLabel(item.key).selected = true; + protected function handleOptionalInstallsChange(event:IndexChangeEvent):void + { + var selectedItem:InstallerComponentVO = InstallerComponentVO(event.target.selectedItem); + optionalInstallsTxtArea.text = selectedItem.message; + /*installChkBx.label = _viewResourceConstants.INSTALL_AGREE; + if (selectedItem.answered) { + if (selectedItem.selected) { + installChkBx.selected = true; + } else { + installChkBx.selected = false; } - } + } else { + installChkBx.selected = false; + }*/ - protected function placeGroup(panel:Panel):void - { - panel.x = this.width / 2 - panel.width / 2; - } + // Store the current selected item in order to have the license title update if the language is changed + lastLicenseItemSelected = installComponentsList.selectedIndex; - protected function handleOptionalInstallsChange(event:IndexChangeEvent):void - { - var selectedItem:InstallerComponentVO = InstallerComponentVO(event.target.selectedItem); - optionalInstallsTxtArea.text = selectedItem.message; - licenseLinkBtn.includeInLayout = true; - _currentLicenseLabel = selectedItem.licenseName; - _currentLicenseURL = selectedItem.licenseURL; - checkIfAllRequiredComponentsPromptsAnswered(); + licenseLinkBtn.includeInLayout = true; + _currentLicenseLabel = selectedItem.licenseName; + _currentLicenseURL = selectedItem.licenseURL; + checkIfAllRequiredComponentsPromptsAnswered(); - } + } - protected function handleLicenceBtnClick(event:Event):void - { - navigateToURL(new URLRequest(_currentLicenseURL), "_blank"); - } + protected function handleLicenceBtnClick(event:Event):void + { + navigateToURL(new URLRequest(_currentLicenseURL), "_blank"); + } - protected function handleInstallPermissionChange(event:InstallItemSelectionEvent):void - { - if (installComponentsList.selectedItem != null) - { - installComponentsList.selectedItem.selected = (event.item.selected); - installComponentsList.selectedItem.answered = true; - } - else - { - for (var i:int = 0; i < _installerComponentsDataProvider.length; i++) - { - _installerComponentsDataProvider.getItemAt(i).selected = event.item.selected; - _installerComponentsDataProvider.getItemAt(i).answered = true; - } - } - checkIfAllRequiredComponentsPromptsAnswered(); - } + protected function handleInstallPermissionChange(event:InstallItemSelectionEvent):void + { + if (installComponentsList.selectedItem != null) + { + installComponentsList.selectedItem.selected = (event.item.selected); + installComponentsList.selectedItem.answered = true; + } + else + { + for (var i:int = 0; i < _installerComponentsDataProvider.length; i++) + { + _installerComponentsDataProvider.getItemAt(i).selected = event.item.selected; + _installerComponentsDataProvider.getItemAt(i).answered = true; + } + } + checkIfAllRequiredComponentsPromptsAnswered(); + } - protected function checkIfAllRequiredComponentsPromptsAnswered():void - { - var success:Boolean = true; - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) - { - if (obj.required && !obj.selected) - { - success = false; - } - } - installBtn.enabled = success; - } + protected function checkIfAllRequiredComponentsPromptsAnswered():void + { + var success:Boolean = true; + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (obj.required && !obj.selected) + { + success = false; + } + } + installBtn.enabled = success; + } - /************************ Utility methods *****************/ + /************************ Utility methods *****************/ - private function createFolder(path:String):File - { - var dir:File = new File(path); + private function createFolder(path:String):File + { + var dir:File = new File(path); - if (!dir.exists) - dir.createDirectory(); + if (!dir.exists) + { + dir.createDirectory(); + } - return dir; - } + return dir; + } - private function copyOrDownload(url:String, handlerFunction:Function, dest:File = null, errorFunction:Function = null, nocache:Boolean = false):void - { - if (url.search("http") == 0) - { - download(url, handlerFunction, errorFunction, nocache); - } - else if (url.search("file://") == 0) - { - download(url, handlerFunction, errorFunction, nocache); - } - else - { - var source:File = new File(url); + private function copyOrDownload(url:String, handlerFunction:Function, dest:File = null, errorFunction:Function = null, nocache:Boolean = false):void + { + if (url.search("http") == 0) + { + download(url, handlerFunction, errorFunction, nocache); + } + else if (url.search("file://") == 0) + { + download(url, handlerFunction, errorFunction, nocache); + } + else + { + var source:File = new File(url); - try - { - source.copyTo(dest, true); - } - catch (error:Error) - { - if (errorFunction != null) - { - errorFunction.call(null); - } - log(_viewResourceConstants.ERROR_UNABLE_TO_COPY_FILE + error.errorID + " " + error.message); - } - } - } + try + { + source.copyTo(dest, true); + } + catch (error:Error) + { + if (errorFunction != null) + { + errorFunction.call(null); + } + log(_viewResourceConstants.ERROR_UNABLE_TO_COPY_FILE + error.errorID + " " + error.message); + } + } + } - private function download(url:String, handlerFunction:Function, errorFunction:Function = null, nocache:Boolean = false):void - { - loader = new URLLoader(); - if (debugMode) - { - log("downloading " + url); - if (usingDownloadCache) - log("using download cache"); - if (nocache) - log("not caching this download"); - } - if (usingDownloadCache && !nocache) - { - var cacheURL:String; - if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1) - { - cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length); - if (debugMode) - log("mirror caching. url = " + cacheURL); - } - else - { - if (url.indexOf("http") == 0) - { - var c:int = url.indexOf("/"); - c = url.indexOf("/", c + 1); - c = url.indexOf("/", c + 1); - // that should find the slash after the server. - cacheURL = url.substr(c + 1); - if (debugMode) - log("http caching. url = " + cacheURL); - } - } - if (cacheURL) - { - var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); - cacheFile = cacheFile.resolvePath(escape(cacheURL)); - if (debugMode) - log("searching cache for " + cacheFile.url); - if (cacheFile.exists) - { - log(_viewResourceConstants.INFO_USING_CACHED_FILE + " " + cacheFile.url); - url = cacheFile.url; - } - } - } - var req:URLRequest = new URLRequest(url); - //Wait for 5 minutes before aborting download attempt. Adobe download sites as well as some Apache mirrors are extremely slow. - req.idleTimeout = 300000; + private function download(url:String, handlerFunction:Function, errorFunction:Function = null, nocache:Boolean = false):void + { + loader = new ApacheURLLoader(); + if (debugMode) + { + log("downloading " + url); + if (usingDownloadCache) + { + log("using download cache"); + } + if (nocache) + { + log("not caching this download"); + } + } + if (usingDownloadCache && !nocache) + { + var cacheURL:String; + if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1) + { + cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length); + if (debugMode) + { + log("mirror caching. url = " + cacheURL); + } + } + else + { + if (url.indexOf("http") == 0) + { + var c:int = url.indexOf("/"); + c = url.indexOf("/", c + 1); + c = url.indexOf("/", c + 1); + // that should find the slash after the server. + cacheURL = url.substr(c + 1); + if (debugMode) + { + log("http caching. url = " + cacheURL); + } + } + } + if (cacheURL) + { + var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); + cacheFile = cacheFile.resolvePath(escape(cacheURL)); + if (debugMode) + { + log("searching cache for " + cacheFile.url); + } + if (cacheFile.exists) + { + log(_viewResourceConstants.INFO_USING_CACHED_FILE + " " + cacheFile.url); + url = cacheFile.url; + } + } + } + var req:URLRequest = new URLRequest(url); + //Wait for 5 minutes before aborting download attempt. Adobe download sites as well as some Apache mirrors are extremely slow. + req.idleTimeout = 300000; - loader.dataFormat = URLLoaderDataFormat.BINARY; - if (usingDownloadCache) - loader.addEventListener(Event.COMPLETE, function (event:Event):void - { - if (debugMode) - log("download complete preparing to cache"); - var cacheURL:String; - if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1) - { - cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length); - if (debugMode) - log("mirror caching. url = " + cacheURL); - } - else - { - if (url.indexOf("http") == 0) - { - var c:int = url.indexOf("/"); - c = url.indexOf("/", c + 1); - c = url.indexOf("/", c + 1); - // that should find the slash after the server. - cacheURL = url.substr(c + 1); - if (debugMode) - log("http caching. url = " + cacheURL); - } - } - if (cacheURL && !nocache) - { - var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); - cacheFile = cacheFile.resolvePath(escape(cacheURL)); - if (debugMode) - log("caching " + cacheFile.url); - if (!cacheFile.exists) - { - var fs:FileStream = new FileStream(); - fs.open(cacheFile, FileMode.WRITE); - var srcData:ByteArray = ByteArray(loader.data); - srcData.position = 0; - var ba:ByteArray = new ByteArray(); - srcData.readBytes(ba, 0, srcData.length); - ba.position = 0; - fs.writeBytes(ba, 0, ba.length); - fs.close(); - } - else - { - if (debugMode) - log("file was already in cache"); - } - } + loader.dataFormat = URLLoaderDataFormat.BINARY; + if (usingDownloadCache) + { + loader.addEventListener(Event.COMPLETE, function (event:Event):void + { + if (debugMode) + { + log("download complete preparing to cache"); + } + var cacheURL:String; + if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1) + { + cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length); + if (debugMode) + { + log("mirror caching. url = " + cacheURL); + } + } + else + { + if (url.indexOf("http") == 0) + { + var c:int = url.indexOf("/"); + c = url.indexOf("/", c + 1); + c = url.indexOf("/", c + 1); + // that should find the slash after the server. + cacheURL = url.substr(c + 1); + if (debugMode) + { + log("http caching. url = " + cacheURL); + } + } + } + if (cacheURL && !nocache) + { + var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder); + cacheFile = cacheFile.resolvePath(escape(cacheURL)); + if (debugMode) + { + log("caching " + cacheFile.url); + } + if (!cacheFile.exists) + { + var fs:FileStream = new FileStream(); + fs.open(cacheFile, FileMode.WRITE); + var srcData:ByteArray = ByteArray(loader.data); + srcData.position = 0; + var ba:ByteArray = new ByteArray(); + srcData.readBytes(ba, 0, srcData.length); + ba.position = 0; + fs.writeBytes(ba, 0, ba.length); + fs.close(); + } + else + { + if (debugMode) + { + log("file was already in cache"); + } + } + } - }); - loader.addEventListener(Event.COMPLETE, handlerFunction, false, 0, true); - loader.addEventListener(Event.COMPLETE, handleDownloadComplete, false, 0, true); + }); + } + loader.addEventListener(Event.COMPLETE, handlerFunction, false, 0, true); + loader.addEventListener(Event.COMPLETE, handleDownloadComplete, false, 0, true); - progressBar.percent = 0; + progressBar.percent = 0; - if (errorFunction != null) - { - loader.addEventListener(ErrorEvent.ERROR, errorFunction, false, 0, true); - loader.addEventListener(IOErrorEvent.IO_ERROR, errorFunction, false, 0, true); - } - loader.addEventListener(ProgressEvent.PROGRESS, handleDownloadProgress, false, 0, true); + if (errorFunction != null) + { + loader.addEventListener(ErrorEvent.ERROR, errorFunction, false, 0, true); + loader.addEventListener(IOErrorEvent.IO_ERROR, errorFunction, false, 0, true); + } + loader.addEventListener(ProgressEvent.PROGRESS, handleDownloadProgress, false, 0, true); - loader.load(req); - } + loader.load(req); + } - private function handleDownloadProgress(event:ProgressEvent):void - { - var bytesTotal:int = event.bytesTotal; - var bytesLoaded:int = event.bytesLoaded; - if (event.bytesTotal > 0) - { - var percentLoaded:int = Math.round(bytesLoaded * 100 / bytesTotal); - if (logProgressEvents) - log("download progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); + private function handleDownloadProgress(event:ProgressEvent):void + { + var bytesTotal:int = event.bytesTotal; + var bytesLoaded:int = event.bytesLoaded; + if (event.bytesTotal > 0) + { + var percentLoaded:int = Math.round(bytesLoaded * 100 / bytesTotal); + if (logProgressEvents) + { + log("download progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); + } - progressBar.percent = percentLoaded; - } - } + progressBar.percent = percentLoaded; + } + } - private function handleDownloadComplete(event:Event):void - { - _previousDisplayedPercent = 0; - clearData(URLLoader(event.target)); - } + private function handleDownloadComplete(event:Event):void + { + _previousDisplayedPercent = 0; + clearData(ApacheURLLoader(event.target)); + } - private function clearData(v:URLLoader):void - { - ByteArray(v.data).clear(); - System.gc(); - } + private function clearData(v:ApacheURLLoader):void + { + ByteArray(v.data).clear(); + System.gc(); + } - private function unzip(fileToUnzip:File, unzipCompleteFunction:Function, unzipErrorFunction:Function = null):void - { - var zipFileBytes:ByteArray = new ByteArray(); - var fs:FileStream = new FileStream(); - var fzip:Zip = new Zip(); + private function unzip(fileToUnzip:File, unzipCompleteFunction:Function, unzipErrorFunction:Function = null):void + { + var zipFileBytes:ByteArray = new ByteArray(); + var fs:FileStream = new FileStream(); + var fzip:Zip = new Zip(); - fs.open(fileToUnzip, FileMode.READ); - fs.readBytes(zipFileBytes); - fs.close(); + fs.open(fileToUnzip, FileMode.READ); + fs.readBytes(zipFileBytes); + fs.close(); - fzip.addEventListener(ZipEvent.FILE_LOADED, onFileLoaded, false, 0, true); - fzip.addEventListener(Event.COMPLETE, unzipCompleteFunction, false, 0, true); - fzip.addEventListener(Event.COMPLETE, onUnzipComplete, false, 0, true); - if (unzipErrorFunction != null) - { - fzip.addEventListener(ErrorEvent.ERROR, unzipErrorFunction, false, 0, true); - _fileUnzipErrorFunction = unzipErrorFunction - } - fzip.loadBytes(zipFileBytes); - } + fzip.addEventListener(ZipEvent.FILE_LOADED, onFileLoaded, false, 0, true); + fzip.addEventListener(Event.COMPLETE, unzipCompleteFunction, false, 0, true); + fzip.addEventListener(Event.COMPLETE, onUnzipComplete, false, 0, true); + if (unzipErrorFunction != null) + { + fzip.addEventListener(ErrorEvent.ERROR, unzipErrorFunction, false, 0, true); + _fileUnzipErrorFunction = unzipErrorFunction + } + fzip.loadBytes(zipFileBytes); + } - private function onFileLoaded(e:ZipEvent):void - { - try - { - var fzf:ZipFile = e.file; - var f:File; - if (overlaying) - f = _flexTempDir.resolvePath(fzf.filename); - else - f = _flexHomeDir.resolvePath(fzf.filename); - var fs:FileStream = new FileStream(); + private function onFileLoaded(e:ZipEvent):void + { + try + { + var fzf:ZipFile = e.file; + var f:File; + if (overlaying) + { + f = _flexTempDir.resolvePath(fzf.filename); + } + else + { + f = _flexHomeDir.resolvePath(fzf.filename); + } + var fs:FileStream = new FileStream(); - if (isDirectory(fzf)) - { - // Is a directory, not a file. Dont try to write anything into it. - return; - } + if (isDirectory(fzf)) + { + // Is a directory, not a file. Dont try to write anything into it. + return; + } - fs.open(f, FileMode.WRITE); - fs.writeBytes(fzf.content); - fs.close(); + fs.open(f, FileMode.WRITE); + fs.writeBytes(fzf.content); + fs.close(); - } - catch (error:Error) - { - _fileUnzipErrorFunction.call(); - } - } + } + catch (error:Error) + { + _fileUnzipErrorFunction.call(); + } + } - private function isDirectory(f:ZipFile):Boolean - { - if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\") - { - return true; - } - return false; - } + private function isDirectory(f:ZipFile):Boolean + { + if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\") + { + return true; + } + return false; + } - private function onUnzipComplete(event:Event):void - { - var fzip:Zip = event.target as Zip; - fzip.close(); - fzip.removeEventListener(ZipEvent.FILE_LOADED, onFileLoaded); - fzip.removeEventListener(Event.COMPLETE, onUnzipComplete); - } + private function onUnzipComplete(event:Event):void + { + var fzip:Zip = event.target as Zip; + fzip.close(); + fzip.removeEventListener(ZipEvent.FILE_LOADED, onFileLoaded); + fzip.removeEventListener(Event.COMPLETE, onUnzipComplete); + } - private function untar(source:File, destination:File, unTarCompleteFunction:Function, unTarErrorFunction:Function):void - { - var tar:File; - var startupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); - var arguments:Vector.<String> = new Vector.<String>(); + private function untar(source:File, destination:File, unTarCompleteFunction:Function, unTarErrorFunction:Function):void + { + var tar:File; + var startupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); + var arguments:Vector.<String> = new Vector.<String>(); - if (_os.isLinux()) - { - tar = new File("/bin/tar"); - } - else - { - tar = new File("/usr/bin/tar"); - } + if (_os.isLinux()) + { + tar = new File("/bin/tar"); + } + else + { + tar = new File("/usr/bin/tar"); + } - arguments.push("xf"); - arguments.push(source.nativePath); - arguments.push("-C"); - arguments.push(destination.nativePath); + arguments.push("xf"); + arguments.push(source.nativePath); + arguments.push("-C"); + arguments.push(destination.nativePath); - startupInfo.executable = tar; - startupInfo.arguments = arguments; + startupInfo.executable = tar; + startupInfo.arguments = arguments; - _process = new NativeProcess(); - _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, unTarFileProgress, false, 0, true); - _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarErrorFunction, false, 0, true); - _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarError, false, 0, true); - _process.addEventListener(NativeProcessExitEvent.EXIT, unTarCompleteFunction, false, 0, true); - _process.addEventListener(NativeProcessExitEvent.EXIT, unTarComplete, false, 0, true); - _process.start(startupInfo); - } + _process = new NativeProcess(); + _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, unTarFileProgress, false, 0, true); + _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarErrorFunction, false, 0, true); + _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarError, false, 0, true); + _process.addEventListener(NativeProcessExitEvent.EXIT, unTarCompleteFunction, false, 0, true); + _process.addEventListener(NativeProcessExitEvent.EXIT, unTarComplete, false, 0, true); + _process.start(startupInfo); + } - private function unTarError(event:Event):void - { - var output:String = _process.standardError.readUTFBytes(_process.standardError.bytesAvailable); + private function unTarError(event:Event):void + { + var output:String = _process.standardError.readUTFBytes(_process.standardError.bytesAvailable); - log(_viewResourceConstants.ERROR_NATIVE_PROCESS_ERROR); - log(output); - } + log(_viewResourceConstants.ERROR_NATIVE_PROCESS_ERROR); + log(output); + } - private function unTarFileProgress(event:Event):void - { - var output:String = _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable); + private function unTarFileProgress(event:Event):void + { + var output:String = _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable); - log(output); - } + log(output); + } - private function unTarComplete(event:NativeProcessExitEvent):void - { - _process.closeInput(); - _process.exit(true); - } + private function unTarComplete(event:NativeProcessExitEvent):void + { + _process.closeInput(); + _process.exit(true); + } - private function writeFileToDirectory(file:File, data:ByteArray):void - { - var fs:FileStream = new FileStream(); - fs.open(file, FileMode.WRITE); - fs.writeBytes(data); - fs.close(); - } + private function writeFileToDirectory(file:File, data:ByteArray):void + { + var fs:FileStream = new FileStream(); + fs.open(file, FileMode.WRITE); + fs.writeBytes(data); + fs.close(); + } - private function isValidConfigFile(file:File):Boolean - { - var name:String = file.name; + private function isValidConfigFile(file:File):Boolean + { + var name:String = file.name; - if (name.search("-config.xml") == -1) - { - return false; - } - else - { - return true; - } - } + if (name.search("-config.xml") == -1) + { + return false; + } + else + { + return true; + } + } - private function isAirConfigFile(file:File):Boolean - { - var name:String = file.name; + private function isAirConfigFile(file:File):Boolean + { + var name:String = file.name; - if (name.search("air") == 0) - { - return true; - } - else - { - return false; - } - } + if (name.search("air") == 0) + { + return true; + } + else + { + return false; + } + } - private function log(text:String, position:int = -1, isPublic:Boolean = true, skipLog:Boolean = false):void - { - if (text == null) - text = ""; - if (position == -1) - { - if (!skipLog) - _messages.addItem(text); - if (isPublic) - lastPublicMessage = text; - } - else - { - _messages.addItemAt(text, position); - } - if (debugMode) - trace(text); - if (logFile) - { - var f:File = new File(logFile); - var fs:FileStream = new FileStream(); - fs.open(f, FileMode.APPEND); - fs.writeUTFBytes(text + "\n"); - fs.close(); - } - } + private function log(text:String, position:int = -1, isPublic:Boolean = true, skipLog:Boolean = false):void + { + if (text == null) + { + text = ""; + } + if (position == -1) + { + if (!skipLog) + { + _messages.addItem(text); + } + if (isPublic) + { + lastPublicMessage = text; + } + } + else + { + _messages.addItemAt(text, position); + } + if (debugMode) + { + trace(text); + } + if (logFile) + { + var f:File = new File(logFile); + var fs:FileStream = new FileStream(); + fs.open(f, FileMode.APPEND); + fs.writeUTFBytes(text + "\n"); + fs.close(); + } + } - private var console:ConsoleWindow; + private var console:ConsoleWindow; - private function showConsole(event:Event):void - { - if (!console || console.closed) - console = new ConsoleWindow(); - else if (console) - console.orderToFront(); + private function showConsole(event:Event):void + { + if (!console || console.closed) + { + console = new ConsoleWindow(); + } + else if (console) + { + console.orderToFront(); + } - console.messages = _messages; - console.open(); - console.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - console.nativeWindow.width / 2; - console.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - console.nativeWindow.height / 2; - } + console.messages = _messages; + console.open(); + console.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - console.nativeWindow.width / 2; + console.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - console.nativeWindow.height / 2; + } - private function showMPLLicense(event:Event):void - { - var licenseWindow:MPLLicense = new MPLLicense(); - licenseWindow.open(); - licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2; - licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2; - } + private function showMPLLicense(event:Event):void + { + var licenseWindow:MPLLicense = new MPLLicense(); + licenseWindow.open(); + licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2; + licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2; + } - private function showAdobeLicense(event:Event):void - { - var licenseWindow:AdobeLicense = new AdobeLicense(); - licenseWindow.open(); - licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2; - licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2; - } + private function showAdobeLicense(event:Event):void + { + var licenseWindow:AdobeLicense = new AdobeLicense(); + licenseWindow.open(); + licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2; + licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2; + } - private function openApacheFlexFolder(event:Event):void - { - _flexHomeDir.openWithDefaultApplication(); - } + private function openApacheFlexFolder(event:Event):void + { + _flexHomeDir.openWithDefaultApplication(); + } - private function closeApplication(event:Event):void - { - removeEventListener(Event.CLOSING, closeApplication); + private function closeApplication(event:Event):void + { + removeEventListener(Event.CLOSING, closeApplication); - if (currentState == "installState") - { - if (currentStep < stepLabels.length) - { - // User aborted the installation by closing the installer - var activeStep:StepItem = getActiveStepItem(); - if (_viewResourceConstants) - abortInstallation(_viewResourceConstants.INFO_USER_ABORT_INSTALLATION + activeStep.label); - } - } + if (currentState == "installState") + { + if (currentStep < stepLabels.length) + { + // User aborted the installation by closing the installer + var activeStep:StepItem = getActiveStepItem(); + if (_viewResourceConstants) + { + abortInstallation(_viewResourceConstants.INFO_USER_ABORT_INSTALLATION + activeStep.label); + } + } + } - // TODO only enable close button when finished or when an error occurs - // TODO anything we need to clean up? - if (console && !console.closed) - console.closeWindow(null); - cleanup(); - close(); - } + // TODO only enable close button when finished or when an error occurs + // TODO anything we need to clean up? + if (console && !console.closed) + { + console.closeWindow(null); + } + cleanup(); + close(); + } - protected function getActiveStepItem():StepItem - { - for each (var s:StepItem in _installationSteps) - { - if (s.status == StepItem.ACTIVE) - { - return s; - } - } - return null; - } + protected function getActiveStepItem():StepItem + { + for each (var s:StepItem in _installationSteps) + { + if (s.status == StepItem.ACTIVE) + { + return s; + } + } + return null; + } - protected function clickLogo(event:MouseEvent):void - { - navigateToURL(new URLRequest(Constants.APACHE_FLEX_URL)); - } + protected function clickLogo(event:MouseEvent):void + { + navigateToURL(new URLRequest(Constants.APACHE_FLEX_URL)); + } - protected function getStepItemFromStepLabel(stepLabel:String):StepItem - { - for each (var s:StepItem in _installationSteps) - { - if (s.label == stepLabel) - { - return s; - } - } + protected function getStepItemFromStepLabel(stepLabel:String):StepItem + { + for each (var s:StepItem in _installationSteps) + { + if (s.label == stepLabel) + { + return s; + } + } - return null; - } + return null; + } - protected function getInstallerComponentFromLabel(key:String):InstallerComponentVO - { - for each (var s:InstallerComponentVO in _installerComponentsDataProvider) - { - if (s.key == key) - { - return s; - } - } + protected function getInstallerComponentFromLabel(key:String):InstallerComponentVO + { + for each (var s:InstallerComponentVO in _installerComponentsDataProvider) + { + if (s.key == key) + { + return s; + } + } - return null; - } + return null; + } - protected function updateActivityStep(stepLabel:String, status:String):void - { - var step:StepItem = getStepItemFromStepLabel(stepLabel); + protected function updateActivityStep(stepLabel:String, status:String):void + { + var step:StepItem = getStepItemFromStepLabel(stepLabel); - if (step) - { - step.status = status; - } - } + if (step) + { + step.status = status; + } + } - private function isDirectoryEmpty(dir:File):Boolean - { - var result:Boolean; + private function isDirectoryEmpty(dir:File):Boolean + { + var result:Boolean; - var filesArray:Array = dir.getDirectoryListing(); + var filesArray:Array = dir.getDirectoryListing(); - var length:int = filesArray.length; - result = length == 0; - if (length == 1) - { - var explodedPath:Array = File(filesArray[0]).url.split("/"); + var length:int = filesArray.length; + result = length == 0; + if (length == 1) + { + var explodedPath:Array = File(filesArray[0]).url.split("/"); - // the .DS_Store file doesn't bother anybody, so we can safely ignore it. - // also ignore local.properties so you an override install settings - result = explodedPath[explodedPath.length - 1] == ".DS_Store" || - explodedPath[explodedPath.length - 1] == "local.properties"; - } + // the .DS_Store file doesn't bother anybody, so we can safely ignore it. + // also ignore local.properties so you an override install settings + result = explodedPath[explodedPath.length - 1] == ".DS_Store" || + explodedPath[explodedPath.length - 1] == "local.properties"; + } - return result; - } + return result; + } - protected function showDisclaimer():void - { - var request:URLRequest = new URLRequest(Constants.APACHE_FLEX_URL + Constants.DISCLAIMER_PATH); + protected function showDisclaimer():void + { + var request:URLRequest = new URLRequest(Constants.APACHE_FLEX_URL + Constants.DISCLAIMER_PATH); - navigateToURL(request, "_blank"); - } + navigateToURL(request, "_blank"); + } - protected function installComponentsList_creationCompleteHandler(event:FlexEvent):void - { - installComponentsList.addEventListener(InstallItemSelectionEvent.INSTALL_ITEM_SELECTION_CHANGED, handleInstallPermissionChange); - } + protected function installComponentsList_creationCompleteHandler(event:FlexEvent):void + { + installComponentsList.addEventListener(InstallItemSelectionEvent.INSTALL_ITEM_SELECTION_CHANGED, handleInstallPermissionChange); + } - private function onMouseRoll(event:MouseEvent):void - { - if (event.type == MouseEvent.MOUSE_OVER) - { - event.target.styleName = "linkTextHover"; - } - else - { - event.target.styleName = "linkText"; - } - } + private function onMouseRoll(event:MouseEvent):void + { + if (event.type == MouseEvent.MOUSE_OVER) + { + event.target.styleName = "linkTextHover"; + } + else + { + event.target.styleName = "linkText"; + } + } - private function getFlexVersionBuildString():String - { - var flexPropertiesFile:File = _flexHomeDir.resolvePath("flex-sdk-description.xml"); - var fs:FileStream = new FileStream(); - fs.open(flexPropertiesFile, FileMode.READ); - var contents:XML = new XML(fs.readMultiByte(fs.bytesAvailable, "utf-8")); - fs.close(); - return contents.version + "." + contents.build; - } - ]]></fx:Script> + private function getFlexVersionBuildString():String + { + var flexPropertiesFile:File = _flexHomeDir.resolvePath("flex-sdk-description.xml"); + var fs:FileStream = new FileStream(); + fs.open(flexPropertiesFile, FileMode.READ); + var contents:XML = new XML(fs.readMultiByte(fs.bytesAvailable, "utf-8")); + fs.close(); + return contents.version + "." + contents.build; + } + ]]></fx:Script> <fx:Declarations> <s:Sine id="ease"/> @@ -3514,7 +3739,15 @@ </s:layout> </s:DropDownList> </s:HGroup> - + <!-- <s:Group width="100%" top="275">--> + <!-- <s:HGroup gap="0" horizontalCenter="0" top="30"> + <s:Label text="apache" fontFamily="openSansBold" color="0x677084" fontSize="24" /> + <s:Label text="Flex" right="0" + fontFamily="openSansBold" + color="0x172647" fontSize="70" + /> + </s:HGroup>--> + <s:HGroup verticalAlign="middle" gap="5" horizontalCenter="0" top="300"> <s:Label text="{_viewResourceConstants.INFO_VERSION}" fontFamily="openSansBold" color="0x677084" fontSize="24" /> <s:Label text="{APACHE_FLEX_BIN_DISTRO_VERSION}" right="0" @@ -3619,7 +3852,6 @@ styleName="mainBtnStyle" width="{_standardButtonWidth}" height="32" - left="10" label="{_viewResourceConstants.BTN_LABEL_BACK}" enabled="true" click="handleFirstStepBackBtnClick(event)"/> @@ -3648,7 +3880,6 @@ styleName="mainBtnStyle" width="{_standardButtonWidth}" height="32" - left="10" label="{_viewResourceConstants.BTN_LABEL_BACK}" enabled="true" click="handleSecondStepBackBtnClick(event)"/> @@ -3704,6 +3935,16 @@ editable="false"/> </s:VGroup> </s:HGroup> + <!-- <s:HGroup + width="100%" + height="20" + horizontalAlign="center" + verticalAlign="middle"> + <s:CheckBox id="installChkBx" + label="{_viewResourceConstants.INSTALL_AGREE_ALL}" + selected="false" + visible="true"/> + </s:HGroup>--> </s:Panel> <s:Panel id="thirdStepGroup" title="{_viewResourceConstants.INFO_INSTALLING}"
diff --git a/installer/src/org/apache/flex/packageflexsdk/util/ApacheURLLoader.as b/installer/src/org/apache/flex/packageflexsdk/util/ApacheURLLoader.as new file mode 100644 index 0000000..07a85c4 --- /dev/null +++ b/installer/src/org/apache/flex/packageflexsdk/util/ApacheURLLoader.as
@@ -0,0 +1,127 @@ +/** + 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. + + */ + +/** + * + * This is a really hackey way to intercept all the HTTPS calls and send them via + * as3httpdclient instead of the browser-captured URLLoader. Don't follow this + * example -- refactor your application to avoid having to do this. + * + */ +package org.apache.flex.packageflexsdk.util +{ + import com.adobe.net.URI; + + import flash.events.ErrorEvent; + + import flash.events.Event; + import flash.events.HTTPStatusEvent; + import flash.events.IOErrorEvent; + import flash.events.SecurityErrorEvent; + import flash.net.URLLoader; + import flash.net.URLRequest; + import flash.utils.ByteArray; + + import org.httpclient.HttpClient; + import org.httpclient.events.HttpDataListener; + import org.httpclient.events.HttpRequestEvent; + import org.httpclient.events.HttpResponseEvent; + import org.httpclient.events.HttpStatusEvent; + + public class ApacheURLLoader extends URLLoader + { + + private var httpsData:ByteArray = new ByteArray(); + + public function ApacheURLLoader(request:URLRequest = null) + { + super(request); + } + + override public function load(request:URLRequest):void + { + if (request.url.indexOf("https://") != 0) + { + super.load(request); + } + else + { + var httpsClient:HttpClient = new HttpClient(); + var httpsClientListener:HttpDataListener = new HttpDataListener(); + + httpsClientListener.onConnect = function(event:HttpRequestEvent):void + { + var e:Event = new Event(Event.OPEN); + dispatchEvent(e); + }; + + httpsClientListener.onComplete = function(event:HttpResponseEvent):void + { + var e:HTTPStatusEvent = new HTTPStatusEvent(HTTPStatusEvent.HTTP_RESPONSE_STATUS); + // we are unable to emulate the full event since the built-in event handlers for status and + // many others are marked as private on the set functions. + dispatchEvent(e); + }; + + httpsClientListener.onDataComplete = function(event:HttpResponseEvent, incomingData:ByteArray):void + { + data = new ByteArray(); + data.writeBytes(incomingData); + data.position=0; + var e:Event = new Event(Event.COMPLETE); + dispatchEvent(e); + }; + + httpsClientListener.onStatus = function(event:HttpStatusEvent):void + { + var e:HTTPStatusEvent = new HTTPStatusEvent(HTTPStatusEvent.HTTP_STATUS); + // we are unable to emulate the full event since the built-in event handlers for status and + // many others are marked as private on the set functions. + dispatchEvent(e); + }; + + httpsClientListener.onError = function(event:ErrorEvent):void + { + var e:IOErrorEvent = new IOErrorEvent(IOErrorEvent.NETWORK_ERROR); + e.text = event.text; + dispatchEvent(e); + }; + + // ProgressEvent is not available in this manner. + // We can't emulate the HTTP Status Event. It is internal to the Flash Player and won't + // let us override the status item. + + this.httpsData = new ByteArray(); + httpsClient.get(new URI(request.url), httpsClientListener); + } + + } + + private function httpsSecurityError(event:SecurityErrorEvent):void + { + dispatchEvent(event.clone()); + } + + private function httpsIOError(event:IOErrorEvent):void + { + dispatchEvent(event.clone()); + } + + } + +}