http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/bd083afa/installer/src/InstallApacheFlex.mxml ---------------------------------------------------------------------- diff --git a/installer/src/InstallApacheFlex.mxml b/installer/src/InstallApacheFlex.mxml index 830a223..6c91555 100644 --- a/installer/src/InstallApacheFlex.mxml +++ b/installer/src/InstallApacheFlex.mxml @@ -101,7 +101,7 @@ variables are not required because the locations of these pieces are known. <fx:Script><![CDATA[ import flash.globalization.LocaleID; import flash.globalization.StringTools; - + import mx.collections.ArrayCollection; import mx.core.IFlexDisplayObject; import mx.events.FlexEvent; @@ -113,15 +113,19 @@ variables are not required because the locations of these pieces are known. import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; import mx.utils.StringUtil; - + + import org.apache.flex.packageflexsdk.util.ApacheURLLoader; + import spark.events.IndexChangeEvent; import spark.events.TextOperationEvent; - + // 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 AntClasses; + + AntClasses; + import org.apache.flex.ant.Ant; import org.apache.flex.ant.tags.Checksum; import org.apache.flex.ant.tags.Copy; @@ -144,16 +148,16 @@ variables are not required because the locations of these pieces are known. import org.as3commons.zip.ZipEvent; import org.as3commons.zip.ZipFile; import org.osmf.utils.OSMFStrings; - + import ws.tink.spark.controls.StepItem; import ws.tink.spark.skins.controls.InstallApacheFlexSkin; - + // 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; - + private var cleanedUp:Boolean; - + private var _mirrorURLCGI:String; private var _useMirror:Boolean = true; private var _latestVersion:String; @@ -170,21 +174,21 @@ variables are not required because the locations of these pieces are known. private var nocache:Boolean = true; private var wasAborted:Boolean; private var newSDKSelected:Boolean = true; - + public var installerAppPath:String; public var installerAppFileName: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:URLLoader; - + private var loader:ApacheURLLoader; + /** * Utility Singleton Instances */ private var _md5CompareUtil:MD5CompareUtil = MD5CompareUtil.instance; private var _mirrorURLUtil:MirrorURLUtil = MirrorURLUtil.instance; - + /** * Apache Flex binary distribution * @@ -197,16 +201,19 @@ variables are not required because the locations of these pieces are known. 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 = ""; - + [Bindable] + private var APACHE_FLEX_BIN_DISTRO_VERSION:String = ""; + [Bindable] + private var APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY:String = ""; + /** * Adobe AIR SDK * * Values stored in sdk-installer-config.xml edit file to change * */ - [Bindable] private var AIR_VERSIONS:ArrayCollection = new ArrayCollection(); + [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; @@ -214,27 +221,29 @@ variables are not required because the locations of these pieces are known. private var ADOBE_AIR_SDK_MAC_URL:String; private var ADOBE_AIR_SDK_LINUX_FILE:String; private var ADOBE_AIR_SDK_LINUX_URL:String; - + /** * Adobe Flash Player * * Values stored in sdk-installer-config.xml edit file to change * */ - [Bindable] private var FLASH_PLAYER_VERSIONS:ArrayCollection = new ArrayCollection(); + [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; - + /** * Apache Flex * * Values stored in sdk-installer-config.xml edit file to change * */ - [Bindable] private var FLEX_VERSIONS:ArrayCollection = new ArrayCollection(); - + [Bindable] + private var FLEX_VERSIONS:ArrayCollection = new ArrayCollection(); + /** * * SwfObject @@ -242,7 +251,7 @@ variables are not required because the locations of these pieces are known. */ private var SWF_OBJECT_FILE:String; private var SWF_OBJECT_URL:String; - + /** * Optional installs * @@ -250,10 +259,10 @@ variables are not required because the locations of these pieces are known. private var OSMF_SWC_FILE:String; private var OSMF_SWC_URL:String; private var OSMF_SWF_FILE:String = "osmf.swf"; - + private var BLAZEDS_FILE:String; private var BLAZEDS_URL:String; - + private var AFE_FILE:String; private var AFE_URL:String; private var AGLJ40_FILE:String; @@ -262,7 +271,7 @@ variables are not required because the locations of these pieces are known. private var FLEX_FONTKIT_URL:String; private var RIDEAU_FILE:String; private var RIDEAU_URL:String; - + [Bindable] private var _flexHome:String; private var _flexTemp:String; @@ -279,21 +288,21 @@ variables are not required because the locations of these pieces are known. private var _rideauJarFile:File; private var _osmfSWCFile:File; private var _osmfSWFFile:File; - + private var _os:OS = new OS(); - private var _loader:URLLoader; + 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; - + private var languageOverride:String; private var configOverride:String = ""; private var stepsOverride:String = ""; private var installOverride:String = ""; - + private var overlaying:Boolean; private var usingXML:Object; private var additionalProps:Object = {}; @@ -304,14 +313,14 @@ variables are not required because the locations of these pieces are known. private var stepIDs:Vector.<String> = new Vector.<String>(); private var stepLabels:Vector.<String> = new Vector.<String>(); private var currentStep:int = 0; - + private var lastLicenseItemSelected:int = 0; - + 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"); - + [Bindable] private var _viewResourceConstants:ViewResourceConstants; [Bindable] @@ -326,14 +335,14 @@ variables are not required because the locations of these pieces are known. private var _currentLicenseLabel:String; [Bindable] public var _messages:ArrayCollection = new ArrayCollection(); - + private var _lastTag:String; private var _lastPublicMessage:String; public function set lastPublicMessage(s:String):void { var tag:String; var c:int; - + c = s.indexOf("["); if (c != -1) { @@ -345,56 +354,68 @@ variables are not required because the locations of these pieces are known. } } if (tag && tag == _lastTag && tag == "get") + { _lastPublicMessage += "\n" + s; + } else + { _lastPublicMessage = s; + } _lastTag = tag; dispatchEvent(new Event("messageChanged")); } - + [Bindable("messageChanged")] public function get lastFilteredPublicMessage():String { return _lastPublicMessage; } - + private function getInvoke():void { var nativeApplication:NativeApplication = NativeApplication.nativeApplication; nativeApplication.addEventListener(InvokeEvent.INVOKE, parseArgs); } - - [Bindable] private var _standardButtonWidth:Number = 88; - + + [Bindable] + private var _standardButtonWidth:Number = 88; + public function setButtonWidths():void { var calc:CalcButtonWidth = new CalcButtonWidth(hiddenButton); - + calc.buttonWidth(installLogBtn); calc.buttonWidth(openApacheFlexFolderBtn); - + _standardButtonWidth = calc.maxButtonWidth([installBtn, browseBtn, closeBtn, nextBtn, firstStepBackBtn, secondStepBackBtn]); } - + private function parseArgs(event:InvokeEvent):void { - for each (var s:String in event.arguments) { - if (s.indexOf("-language=") == 0) { + for each (var s:String in event.arguments) + { + if (s.indexOf("-language=") == 0) + { languageOverride = s.substring(10); } - if (s.indexOf("-config=") == 0) { + if (s.indexOf("-config=") == 0) + { configOverride = s.substring(8); } - if (s.indexOf("-install=") == 0) { + if (s.indexOf("-install=") == 0) + { installOverride = s.substring(9); } - if (s.indexOf("-steps=") == 0) { + if (s.indexOf("-steps=") == 0) + { stepsOverride = s.substring(7); } - if (s.indexOf("-debug") == 0) { + if (s.indexOf("-debug") == 0) + { debugMode = true; } - if (s.indexOf("-log=") == 0) { + if (s.indexOf("-log=") == 0) + { debugMode = true; logFile = s.substring(5); } @@ -404,7 +425,7 @@ variables are not required because the locations of these pieces are known. downloadCacheFolder = so.data.downloadCacheFolder; userDefaultLanguage = so.data.userDefaultLanguage; } - + protected function handleApplicationComplete(event:FlexEvent):void { CursorManager.setBusyCursor(); @@ -432,11 +453,13 @@ variables are not required because the locations of these pieces are known. abortInstallation("Internet connection unavailable."); } } - + 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; @@ -457,7 +480,7 @@ variables are not required because the locations of these pieces are known. abortInstallation(event.toString()); } } - + /** * 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 @@ -467,7 +490,7 @@ variables are not required because the locations of these pieces are known. { selectDefaultLanguage(); } - + private function getIndexOfEnUS():int { for (var i:int = 0; i < _langSelect.dataProvider.length; i++) @@ -479,24 +502,26 @@ variables are not required because the locations of these pieces are known. } return -1; } - + private function updateWindowTitle():void { if (_viewResourceConstants) + { this.nativeWindow.title = StringUtil.substitute(_viewResourceConstants.INFO_WINDOW_TITLE, [APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY]); + } } - + protected function selectDefaultLanguageInEmergency():void { loadLanguage("en_US", loadUSInEmergencyComplete); } - + private function loadUSInEmergencyComplete():void { _viewResourceConstants = ViewResourceConstants.instance; _viewResourceConstants.update(); } - + protected function selectDefaultLanguage():void { loadLanguage("en_US", loadUSComplete); @@ -505,7 +530,7 @@ variables are not required because the locations of these pieces are known. private function loadUSComplete():void { var userLocale:String; - + if (userDefaultLanguage) { userLocale = userDefaultLanguage; @@ -514,28 +539,30 @@ variables are not required because the locations of these pieces are known. { userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); } - + if (languageOverride) { userLocale = languageOverride; } - + loadDefaultLanguage(userLocale); } - + private function loadDefaultLanguage(userLocale:String):void { loadLanguage(userLocale, defaultLanguageLoaded); } - + private var languageURL:String; private var languageID:String; - + private function loadLanguage(userLocale:String, completeFunction:Function):void { if (languageURL && loader) // busy loading another language + { loader.close(); - + } + if (userLocale == "en_US") { var ba:ByteArray = new en_US_Properties() as ByteArray; @@ -545,16 +572,19 @@ variables are not required because the locations of these pieces are known. return; } var n:int = supportedLanguages.length; - for (var i:int = 0; i < n; i++) { - if (supportedLanguages[i].data == userLocale) { + 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 = 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 { + loader.addEventListener(Event.COMPLETE, function (e:Event):void + { languageURL = null; installLanguage(userLocale, loader.data); completeFunction(); @@ -565,47 +595,55 @@ variables are not required because the locations of these pieces are known. } completeFunction(); } - + 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; - + } + var c:int = p.indexOf("="); if (c != -1) { var key:String = p.substr(0, c); - var value:String = p.substr(c+1); + var value:String = p.substr(c + 1); while (value.indexOf("\\n") != -1) + { value = value.replace("\\n", "\n"); + } resource.content[key] = value; } } - + resourceManager.addResourceBundle(resource); } - + 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 defaultLanguageLoaded():void { - resourceManager.localeChain = [ ViewResourceConstants.DEFAULT_LANGUAGE ]; - + resourceManager.localeChain = [ViewResourceConstants.DEFAULT_LANGUAGE]; + var userLocale:String; - + if (userDefaultLanguage) { userLocale = userDefaultLanguage; @@ -614,79 +652,85 @@ variables are not required because the locations of these pieces are known. { userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_"); } - + if (languageOverride) { userLocale = languageOverride; } log("Using Locale: " + userLocale); - + var n:int = supportedLanguages.length; for (var i:int = 0; i < n; i++) { if (supportedLanguages[i].data == userLocale) { _langSelect.selectedIndex = i; - - resourceManager.localeChain = [ userLocale, "en_US" ]; - + + resourceManager.localeChain = [userLocale, "en_US"]; + break; } } _viewResourceConstants = ViewResourceConstants.instance; - + resourceManager.addEventListener(Event.CHANGE, _viewResourceConstants.update); - + _viewResourceConstants.update(); setButtonWidths(); directoryBtn.enabled = true; - + updateWindow(); - + _mirrorURLUtil.logMessages = new LogMessagesVO(_viewResourceConstants.FETCH_MIRROR_CGI, _viewResourceConstants.FETCH_MIRROR_CGI_DONE, _viewResourceConstants.FETCH_MIRROR_CGI_ERROR); - + _mirrorURLUtil.getMirrorURL(Constants.APACHE_FLEX_URL + _mirrorURLCGI, getMirrorURLResultHandler); CursorManager.removeBusyCursor(); - + checkValidOS(); } - + protected function updateWindow():void { updateWindowTitle(); - + this.nativeWindow.x = Screen.mainScreen.bounds.width / 2 - this.nativeWindow.width / 2; this.nativeWindow.y = Screen.mainScreen.bounds.height / 2 - this.nativeWindow.height / 2; } - + protected function loadXML():void { var request:URLRequest; - - if (configOverride != "") { + + if (configOverride != "") + { request = new URLRequest(configOverride); - } else { + } + else + { request = new URLRequest(Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME); //request = new URLRequest(Constants.CONFIG_XML_NAME); } - - _loader = new URLLoader(); - - try { + + _loader = new ApacheURLLoader(); + + try + { _loader.load(request); - } catch (error:Error) { + } + 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); } - + _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); } - + protected function xmlLoadStatus(event:HTTPStatusEvent):void { if (event.status >= 400) @@ -695,7 +739,7 @@ variables are not required because the locations of these pieces are known. log("\tServer Status: " + event.status); } } - + protected function xmlError(event:IOErrorEvent):void { selectDefaultLanguageInEmergency(); @@ -703,40 +747,43 @@ variables are not required because the locations of these pieces are known. log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + event.errorID); abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME + " " + event.toString()); } - + protected function xmlLoaded(event:Event):void { - if (setXMLVariables()) { + if (setXMLVariables()) + { _langSelect.dataProvider = supportedLanguages; _langSelect.selectedIndex = getIndexOfEnUS(); _langSelect.enabled = true; defineResourceManagerDefaultLanguage(); } } - + protected function checkValidOS():void { if (_os.isOther()) + { log(_viewResourceConstants.ERROR_UNSUPPORTED_OPERATING_SYSTEM); + } } - + private function devBuildFilterFunction(o:Object):Boolean { return !o.devBuild; } - + private function debugModeHandler(event:Event):void { debugMode = true; customMenuItem3.caption = "Verbose Logging Enabled"; } - + private function debugProgressHandler(event:Event):void { logProgressEvents = true; customMenuItem4.caption = "Logging Progress Events"; } - + private function devBuildShowHandler(event:Event):void { var item:Object = flexVersion.selectedItem; @@ -745,7 +792,7 @@ variables are not required because the locations of these pieces are known. flexVersion.selectedItem = item; customMenuItem1.caption = "Showing Dev Builds"; } - + private function downloadCacheHandler(event:Event):void { var dlg:CacheDialog = new CacheDialog(); @@ -755,7 +802,7 @@ variables are not required because the locations of these pieces are known. dlg.cb.selected = usingDownloadCache; dlg.folder.text = downloadCacheFolder; } - + private function updateDownloadCache(event:Event):void { downloadCacheFolder = event.target.folder.text; @@ -765,13 +812,13 @@ variables are not required because the locations of these pieces are known. so.data.downloadCacheFolder = downloadCacheFolder; so.flush(); } - + protected function setXMLVariables():Boolean { - try + try { var data:XML = XML(_loader.data); - } + } catch (e:Error) { log("Error parsing configuration file"); @@ -782,57 +829,67 @@ variables are not required because the locations of these pieces are known. if (firstTime) { firstTime = false; - + _latestVersion = data.version.latest.toString(); - + installerAppPath = data.installer.(@name == 'SDKInstallerApp').@path.toString(); installerAppFileName = data.installer.(@name == 'SDKInstallerApp').@file.toString(); - + _mirrorURLCGI = data.mirror.(@name == 'MirrorURLCGI').@file.toString(); - + 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); - + var contextMenuCustomItems:Array = ContextMenu(contextMenu).customItems; contextMenuCustomItems.push(customMenuItem1); contextMenuCustomItems.push(customMenuItem2); contextMenuCustomItems.push(customMenuItem3); contextMenuCustomItems.push(customMenuItem4); - + var name:String; var versionString:String; var versionID:String; - + 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() }; + var item:Object = { + label: lang.@name.toString(), + data: lang.@id.toString(), + path: lang.@path.toString() + }; supportedLanguages.addItem(item); } - + 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) { + 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}); + AIR_VERSIONS.addItem({ + label: "AIR " + displayVersion, version: versionString, versionID: versionID, + path: airPath, file: airFile + }); } - - if (this.airVersion.selectedIndex == -1) { + + if (this.airVersion.selectedIndex == -1) + { this.airVersion.selectedIndex = airVersions.indexOf(selected); } - + var flexData:XMLList = data.products.children(); var selectedFlexVersion:int; for each (var productData:XML in flexData) @@ -844,7 +901,8 @@ variables are not required because the locations of these pieces are known. 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) { + 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(); @@ -855,92 +913,109 @@ variables are not required because the locations of these pieces are known. 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}); + } + 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 + }); } } - + FLEX_VERSIONS.filterFunction = devBuildFilterFunction; FLEX_VERSIONS.refresh(); flexVersion.validateNow(); - - if (this.flexVersion.selectedIndex == -1) { + + if (this.flexVersion.selectedIndex == -1) + { this.flexVersion.selectedIndex = selectedFlexVersion; } - + var selectedFlexVersionObject:Object = this.flexVersion.selectedItem; updateFlexVersionStrings(selectedFlexVersionObject); - - if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH) { + + if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH) + { log(_viewResourceConstants.ERROR_INVALID_SDK_URL); keepGoing = false; } - + 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) { + 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) { + 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}); + FLASH_PLAYER_VERSIONS.addItem({ + label: "Flash Player " + displayVersion, version: versionString, swfVersion: swfVersion, + versionID: versionID, path: flashPath, file: flashFile + }); } } - - if (this.flashPlayerVersion.selectedIndex == -1) { + + if (this.flashPlayerVersion.selectedIndex == -1) + { this.flashPlayerVersion.selectedIndex = flashPlayerVersions.indexOf(selected); } } - - 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)) { + + 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; - - 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)) { + + 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; - - 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)) { + + 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; - - 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) { + + 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; - + SWF_OBJECT_FILE = data.swfobject.@file.toString(); SWF_OBJECT_URL = data.swfobject.@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" ) + 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(); @@ -952,40 +1027,41 @@ variables are not required because the locations of these pieces are known. OSMF_SWC_URL = data["OSMF_SWC_2.0"].@path.toString(); _useOSMF2 = true; } - + 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(); - + AGLJ40_FILE = data.fontswf.aglj40.@file.toString(); AGLJ40_URL = data.fontswf.aglj40.@path.toString(); - + FLEX_FONTKIT_FILE = data.fontswf["flex-fontkit"].@file.toString(); FLEX_FONTKIT_URL = data.fontswf["flex-fontkit"].@path.toString(); - + RIDEAU_FILE = data.fontswf.rideau.@file.toString(); RIDEAU_URL = data.fontswf.rideau.@path.toString(); - - + + return keepGoing; } - + 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; - + APACHE_FLEX_BIN_DISTRO_FILE = selectedFlexVersionObject.fileName; APACHE_FLEX_BIN_DISTRO_PATH = selectedFlexVersionObject.path; - legacy = selectedFlexVersionObject.legacy; + legacy = selectedFlexVersionObject.legacy; nocache = selectedFlexVersionObject.nocache; APACHE_FLEX_BIN_INSTALLER_FILE = selectedFlexVersionObject.prefix + "installer-config.xml"; - + // 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) { + if (APACHE_FLEX_BIN_DISTRO_PATH.indexOf("http") == 0) + { _useMirror = false; } else @@ -995,69 +1071,85 @@ variables are not required because the locations of these pieces are known. newSDKSelected = true; } - + private function useMirrorPath(path:String):String { - if (_useMirror) { + if (_useMirror) + { return path; } - + return ""; } - + private function getMirrorURLResultHandler():void { var logMessages:ArrayCollection = ILog(_mirrorURLUtil).log; var i:int; var n:int = logMessages.length; - for (i = 0; i < n; i++) { + for (i = 0; i < n; i++) + { log(String(logMessages.getItemAt(i))); } - - if (_mirrorURLUtil.errorOccurred) { + + if (_mirrorURLUtil.errorOccurred) + { abortInstallation("mirrorURLUtil.errorOccurred"); main(); - } else { + } + else + { updatePaths(); } - + } - + 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_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 != "") { + if (stepsOverride != "") + { APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; - } else { + } + else + { APACHE_FLEX_BIN_INSTALLER_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; } - } else { + } + else + { APACHE_FLEX_BIN_DISTRO_URL = useMirrorPath(_mirrorURLUtil.mirrorURL) + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE; - if (stepsOverride != "") { + if (stepsOverride != "") + { APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride; - } else { + } + else + { APACHE_FLEX_BIN_INSTALLER_URL = MD5CompareUtil.MD5_DOMAIN + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE; } } - - if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX) { + + if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX) + { installerAppPath = useMirrorPath(_mirrorURLUtil.mirrorURL) + installerAppPath; } - + main(); } - + protected function main():void { - - if (shouldUpdate()) { + + if (shouldUpdate()) + { doUpdate(); } } - + private function logVersion():void { if (!loggedVersion) @@ -1066,13 +1158,13 @@ variables are not required because the locations of these pieces are known. 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 shouldUpdate():Boolean { var shouldUpdate:Boolean = false; @@ -1080,27 +1172,34 @@ variables are not required because the locations of these pieces are known. var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor; var xmlns:Namespace = new Namespace(applicationDescriptor.namespace()); var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString(); - + logVersion(); - + var availBuildNumbers:Array = _latestVersion.split("."); var currentBuildNumbers:Array = currentVersion.split("."); - - if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0])) { + + if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0])) + { return true; - } else if (parseInt(availBuildNumbers[0]) == parseInt(currentBuildNumbers[0])) { - if (parseInt(availBuildNumbers[1]) > parseInt(currentBuildNumbers[1])) { + } + 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])) { + } + else if (parseInt(availBuildNumbers[1]) == parseInt(currentBuildNumbers[1])) + { + if (parseInt(availBuildNumbers[2]) > parseInt(currentBuildNumbers[2])) + { return true; } } } return false; - + } - + protected function doUpdate():void { var updaterDialog:UpdaterDialog = UpdaterDialog(PopUpManager.createPopUp(this, UpdaterDialog, true)); @@ -1108,38 +1207,49 @@ variables are not required because the locations of these pieces are known. updaterDialog.latestVersion = _latestVersion; PopUpManager.centerPopUp(updaterDialog); } - + protected function handleUpdaterDialogClose(event:Event):void { PopUpManager.removePopUp(IFlexDisplayObject(event.target)); } - + protected function handleInstallBtnClick(event:MouseEvent):void { var airVersionID:String = airVersion.selectedItem.versionID; var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; - + log("SDK version " + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY); - + 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); + } } - - if (flexSDKTxtInput.text == "") { + + if (flexSDKTxtInput.text == "") + { log(_viewResourceConstants.INFO_ENTER_VALID_FLEX_SDK_PATH); - } else { + } + else + { _langSelect.enabled = false; _flexHome = flexSDKTxtInput.text; resetInstallStepsActivity(); @@ -1148,30 +1258,30 @@ variables are not required because the locations of these pieces are known. install(); } } - + protected function handleZeroStepNextBtnClick(event:MouseEvent):void { directoryBtn.enabled = false; - + AIR_VERSION = airVersion.selectedItem.version; var airVersionID:String = airVersion.selectedItem.versionID; FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; var flashVersionID:String = flashPlayerVersion.selectedItem.versionID; - + setXMLVariables(); // as AIR and Flash version may of changed - + if (!legacy) { if (newSDKSelected) { - 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, handleInstallerXMLError); - - loader.load(req); + 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); + + loader.load(req); } } else @@ -1179,34 +1289,37 @@ variables are not required because the locations of these pieces are known. showDirectoryState(); } } - + protected function handleFirstStepBackBtnClick(event:MouseEvent):void { showDefaultState(); } - + protected function handleSecondStepBackBtnClick(event:MouseEvent):void { showDirectoryState(); } - + protected function handleFirstStepNextBtnClick(event:MouseEvent):void { // Quick check to see if the selected directory is writable - try { + try + { var f:File = new File(_flexHome + File.separator + "flex.txt"); checkDirWritable(f); - } catch (e:Error) { + } + 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; } - + showOptionsState(); } - + protected function handleInstallerXMLLoaded(event:Event):void { var data:XML = XML(event.target.data); @@ -1216,9 +1329,9 @@ variables are not required because the locations of these pieces are known. 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"); + getLocalizedString(comp, "message"), getLocalizedString(comp, "license"), + getLocalizedString(comp, "licenseURL"), + comp.@id.toString(), comp.@required.toString() == "true"); licensePropertyMap[comp.@property.toString()] = vo; _installerComponentsDataProvider.addItem(vo); } @@ -1245,7 +1358,7 @@ variables are not required because the locations of these pieces are known. currentState = "directoryState"; System.disposeXML(data); } - + private function getLocalizedString(xml:XML, propName:String):String { var compBundle:XMLList; @@ -1266,26 +1379,28 @@ variables are not required because the locations of these pieces are known. { var s:String = compBundle[0].toString(); if (s.length > 0) + { return s; + } } } } return ""; } - + 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 showDefaultState():void { zeroStepGroup.visible = true; directoryBtn.enabled = true; currentState = "default"; } - + protected function showDirectoryState():void { initiateInstallStepsActivity(); @@ -1295,17 +1410,17 @@ variables are not required because the locations of these pieces are known. } currentState = "directoryState"; } - + protected function showOptionsState():void { currentState = "optionsState"; checkIfAllRequiredComponentsPromptsAnswered(); } - + protected function initiateInstallStepsActivity():void { _installationSteps = new ArrayCollection(); - + _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)); @@ -1317,26 +1432,28 @@ variables are not required because the locations of these pieces are known. _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT)); _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF)); } - + protected function resetInstallStepsActivity():void { - for each(var step:StepItem in _installationSteps) { + for each(var step:StepItem in _installationSteps) + { step.status = StepItem.NORMAL; } } - + protected function addOptionalComponentsToInstallSteps():void { if (usingXML) { _installationSteps = new ArrayCollection(); - + _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)); - - for each (var stepData:XML in installStepsData) { + + for each (var stepData:XML in installStepsData) + { var propName:String = stepData.@property.toString(); if (!propName || InstallerComponentVO(licensePropertyMap[propName]).selected) { @@ -1348,13 +1465,15 @@ variables are not required because the locations of these pieces are known. } return; } - for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) { - if (!obj.required && obj.selected) { + for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) + { + if (!obj.required && obj.selected) + { _installationSteps.addItem(new StepItem(obj.label)); } } } - + protected function initializeInstallerComponentsDataProvider():void { var versionNum:int = int(APACHE_FLEX_BIN_DISTRO_VERSION.split('.').join('')); @@ -1377,40 +1496,40 @@ variables are not required because the locations of these pieces are known. } 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_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_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, @@ -1418,38 +1537,40 @@ variables are not required because the locations of these pieces are known. // "STEP_REQUIRED_INSTALL_OFL_FONTS", true)); } } - + protected function install():void { createDirectories(); } - + protected function handleAirVersionChange(event:Event):void { AIR_VERSION = airVersion.selectedItem.version; - + // Match AIR and Flash versions - if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex) { + if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex) + { flashPlayerVersion.selectedIndex = airVersion.selectedIndex; FLASH_PLAYER_VERSION = FLASH_PLAYER_VERSIONS[airVersion.selectedIndex].version; } } - + protected function handleFlashPlayerVersionChange(event:Event):void { FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version; - + // Match AIR and Flash versions - if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex) { + if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex) + { airVersion.selectedIndex = flashPlayerVersion.selectedIndex; AIR_VERSION = AIR_VERSIONS[flashPlayerVersion.selectedIndex].version; } } - + protected function handleFlexVersionChange(event:Event):void { /*APACHE_FLEX_BIN_DISTRO_VERSION = flexVersion.selectedItem.version; - APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/ + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/ var item:Object = flexVersion.selectedItem; airVersion.enabled = item.needsAIR; flashPlayerVersion.enabled = item.needsFlash; @@ -1458,15 +1579,15 @@ variables are not required because the locations of these pieces are known. updateWindowTitle(); InstallApacheFlexSkin(skin).textIcon.source = item.icon; } - + protected function browseForSDK(event:MouseEvent):void { var file:File = new File(); - + file.addEventListener(Event.SELECT, flexSDKDirSelected, false, 0, true); file.browseForDirectory(_viewResourceConstants.INFO_SELECT_DIRECTORY); } - + protected function checkDirWritable(file:File):void { var ba:ByteArray = new ByteArray(); @@ -1474,17 +1595,20 @@ variables are not required because the locations of these pieces are known. writeFileToDirectory(file, ba); file.deleteFile(); } - + protected function flexSDKDirSelected(event:Event):void { var selectedDir:File = File(event.target); var overlay:Boolean = flexVersion.selectedItem.overlay; - + // Quick check to see if the selected directory is writable - try { + try + { var f:File = new File(selectedDir.nativePath + File.separator + "flex.txt"); checkDirWritable(f); - } catch (e:Error) { + } + catch (e:Error) + { log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY); log(_viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS); flexSDKTxtInput.text = selectedDir.nativePath; @@ -1493,18 +1617,21 @@ variables are not required because the locations of these pieces are known. updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR); return; } - + overlaying = overlay; if (!overlay) { - if (isDirectoryEmpty(selectedDir)) { + if (isDirectoryEmpty(selectedDir)) + { _flexHome = selectedDir.nativePath; flexSDKTxtInput.text = _flexHome; nextBtn.enabled = true; _langSelect.enabled = true; flexSDKTxtInput.errorString = ""; flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; - } else { + } + else + { nextBtn.enabled = false; flexSDKTxtInput.text = selectedDir.nativePath; flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_NOT_EMPTY + " : " + selectedDir.nativePath; @@ -1521,153 +1648,194 @@ variables are not required because the locations of these pieces are known. flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT; } } - + protected function handleFlexSDXTxtInputChange(event:TextOperationEvent):void { var tempDir:File; var path:String = flexSDKTxtInput.text; - - try { + + try + { tempDir = new File(path); - - if (isDirectoryEmpty(tempDir)) { + + if (isDirectoryEmpty(tempDir)) + { flexSDKTxtInput.errorString = ""; _flexHome = path; nextBtn.enabled = true; _langSelect.enabled = true; - } else { + } + else + { flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY; nextBtn.enabled = false; } - } catch (e:Error) { + } + 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); - - try { + + 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) { + } + 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 downloadApacheFlexSDK():void { updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ACTIVE); - - try { + + 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) { + } + 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); } - + } - + protected function handleApacheFlexSDKDownload(event:Event):void { - try { + try + { writeFileToDirectory(_apacheFlexSDKCompressedFile, event.target.data); - } catch (e:Error) { + } + catch (e:Error) + { updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR); abortInstallation("handleApacheFlexSDKDownload " + e.message); } - + updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.COMPLETE); - + updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ACTIVE); - + 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 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); + } } - + 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); } - + protected function uncompressApacheFlexSDK():void { - if (_md5CompareUtil.validMD5) { - if (!_md5CompareUtil.fileIsVerified) { + if (_md5CompareUtil.validMD5) + { + if (!_md5CompareUtil.fileIsVerified) + { updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ERROR); - + log(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); - + abortInstallation(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK); return; - } else { - updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE); - log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE); - } - } else { + } + 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); - + log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE); } - + updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ACTIVE); - - try { + + try + { log(_viewResourceConstants.INFO_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath); - - if (_os.isWindows()) { + + if (_os.isWindows()) + { unzip(_apacheFlexSDKCompressedFile, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); - } else { + } + else + { untar(_apacheFlexSDKCompressedFile, _flexTempDir, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError); } - } catch (e:Error) { + } + 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 (_os.isWindows()) + { if (usingXML) + { runInstallerScript(); + } else + { downloadAIRRuntimeKitForWindows(); - } else { + } + } + 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) { + for each(var file:File in files) + { file.copyTo(_flexHomeDir.resolvePath(file.name)); } } @@ -1677,52 +1845,59 @@ variables are not required because the locations of these pieces are known. } else { - if (_os.isMac()) { + if (_os.isMac()) + { downloadAIRRuntimeKitForMac(); } - else { + 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 != "") { + if (installOverride != "") + { file = new File(installOverride); } else if (overlaying) { var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT); - if (_os.isWindows()) { + if (_os.isWindows()) + { file = _flexTempDir.resolvePath("installer.xml"); } - else { + else + { file = directory.resolvePath("installer.xml"); } } - else { + else + { file = _flexHomeDir.resolvePath("installer.xml"); } addEventListener(Event.ENTER_FRAME, enterFrameHandler); - var context:Object = { installer: true }; + var context:Object = {installer: true}; if (usingDownloadCache) { context["usingDownloadCache"] = usingDownloadCache; context["downloadCacheFolder"] = downloadCacheFolder; } - if (configOverride != "") { + if (configOverride != "") + { context["xml.properties"] = configOverride; } if (resourceManager.localeChain.length > 1) @@ -1732,58 +1907,74 @@ variables are not required because the locations of these pieces are known. 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; } - + if (file.exists && !ant.processXMLFile(file, context, true)) { ant.addEventListener(Event.COMPLETE, completeHandler); ant.addEventListener(ProgressEvent.PROGRESS, progressEventHandler); } else + { completeHandler(null); + } } - + 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"); + log("progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false); } - else if (ant.progressClass is Checksum) + if (event.bytesTotal > 0) { - progressBar.label = getLocalizedString(progressLabels, "Checksum"); + 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 function completeHandler(event:Event):void { if (Ant.currentAnt && !Ant.currentAnt.project.status) @@ -1791,26 +1982,38 @@ variables are not required because the locations of these pieces are known. 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 (Ant.currentAnt) { + } + + 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 { + else + { cleanup(); } } - + private var ant:Ant; - + private function output(s:String):void { var isPublic:Boolean = false; @@ -1821,9 +2024,13 @@ variables are not required because the locations of these pieces are known. 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; } @@ -1841,205 +2048,235 @@ variables are not required because the locations of these pieces are known. } log(s, -1, isPublic, skipLog); } - + private function enterFrameHandler(event:Event):void { ant.doCallback(); } - + protected function downloadAIRRuntimeKitForWindows():void { updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); - - try { + + 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) { + } + catch (e:Error) + { updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR); abortInstallation(); } } - + protected function downloadAIRRuntimeKitForMac():void { updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE); - - try { + + 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) { + } + catch (e:Error) + {
<TRUNCATED>