http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/cb68cb55/installer/src/InstallApacheFlex.mxml ---------------------------------------------------------------------- diff --git a/installer/src/InstallApacheFlex.mxml b/installer/src/InstallApacheFlex.mxml index 830a223..4c57f7b 100644 --- a/installer/src/InstallApacheFlex.mxml +++ b/installer/src/InstallApacheFlex.mxml @@ -31,77 +31,25 @@ variables are not required because the locations of these pieces are known. --> - <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" + xmlns:controls="ws.tink.spark.controls.*" + xmlns:controls1="org.apache.flex.packageflexsdk.view.controls.*" + xmlns:components="org.apache.flex.packageflexsdk.view.components.*" + xmlns:controls2="org.apache.flex.utilities.common.controls.*" width="800" height="700" maxWidth="800" maxHeight="700" minWidth="800" minHeight="700" backgroundColor="0xDDDDDD" preinitialize="getInvoke()" applicationComplete="handleApplicationComplete(event)" showStatusBar="false" - skinClass="ws.tink.spark.skins.controls.InstallApacheFlexSkin" - xmlns:controls="ws.tink.spark.controls.*" - xmlns:controls1="org.apache.flex.packageflexsdk.view.controls.*" - xmlns:components="org.apache.flex.packageflexsdk.view.components.*" - xmlns:controls2="org.apache.flex.utilities.common.controls.*"> + skinClass="ws.tink.spark.skins.controls.InstallApacheFlexSkin"> <fx:Style source="assets/styles/ApacheFlexToolsStyle.css"/> <fx:Style source="assets/styles/InstallApacheFlexStyle.css"/> - <fx:Declarations> - <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> - <s:VGroup left="10" top="10" right="10"> - <s:CheckBox id="cb" label="Cache Downloaded Files" /> - <s:HGroup width="100%" verticalAlign="baseline"> - <s:Label text="Cache Folder: " /> - <s:TextInput id="folder" width="100%" enabled="{cb.selected}"/> - <s:Button label="Browse..." click="browseFolders()" styleName="genericBtnStyle" enabled="{cb.selected}"/> - </s:HGroup> - <s:HGroup horizontalAlign="center" width="100%" > - <s:Button label="OK" click="updateCache()" enabled="{cb.selected == false || folder.text.length > 0}" styleName="genericBtnStyle" /> - <s:Button label="Cancel" click="closeUp()" styleName="genericBtnStyle" /> - </s:HGroup> - </s:VGroup> - </s:TitleWindow> - </fx:Component> - </fx:Declarations> <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 +61,21 @@ 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.model.FlexVersions; + + import org.apache.flex.packageflexsdk.view.components.CacheDialog; + 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 +98,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 +124,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; - + /** * Utility Singleton Instances */ private var _md5CompareUtil:MD5CompareUtil = MD5CompareUtil.instance; private var _mirrorURLUtil:MirrorURLUtil = MirrorURLUtil.instance; - + /** * Apache Flex binary distribution * @@ -197,16 +151,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 +171,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:FlexVersions = new FlexVersions(); + /** * * SwfObject @@ -242,7 +201,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 +209,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 +221,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,7 +238,7 @@ 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 _process:NativeProcess; @@ -288,12 +247,12 @@ variables are not required because the locations of these pieces are known. 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 +263,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 +285,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 +304,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 +375,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 +403,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 +430,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 +440,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 +452,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 +480,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 +489,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,8 +522,10 @@ 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); @@ -554,7 +533,8 @@ variables are not required because the locations of these pieces are known. 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 +545,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 +602,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 { + + 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 +689,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,49 +697,51 @@ 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 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; - FLEX_VERSIONS.filterFunction = null; - FLEX_VERSIONS.refresh(); - flexVersion.selectedItem = item; + var item:Object = flexVersionSelectList.selectedItem; + FLEX_VERSIONS.showDevBuilds(); + flexVersionSelectList.selectedItem = item; customMenuItem1.caption = "Showing Dev Builds"; } - + private function downloadCacheHandler(event:Event):void { var dlg:CacheDialog = new CacheDialog(); @@ -755,7 +751,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 +761,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,165 +778,162 @@ 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')[email protected](); installerAppFileName = data.installer.(@name == 'SDKInstallerApp')[email protected](); - + _mirrorURLCGI = data.mirror.(@name == 'MirrorURLCGI')[email protected](); - + 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: [email protected](), data: [email protected](), path: [email protected]() }; + var item:Object = { + label: [email protected](), + data: [email protected](), + path: [email protected]() + }; 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 = [email protected](); versionString = [email protected](); versionID = null; if ([email protected]() > 0) + { versionID = [email protected](); + } 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) - { - var productName:String = [email protected](); - var productPrefix:String = [email protected](); - var productVersionList:XMLList = productData.versions.children(); - var isOverlay:Boolean = [email protected]() == "true"; - var needsAIR:Boolean = [email protected]() != "false"; - var needsFlash:Boolean = [email protected]() != "false"; - var icon:String = [email protected](); - for each (var productVersion:XML in productVersionList) { - var shortName:String = [email protected](); - var fileName:String = shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC); - versionString = [email protected](); - var label:String = productName + " " + versionString; - var ver:String = fileName.substr(productPrefix.length).split("-")[0]; - var path:String = [email protected](); - var devBuild:Boolean = [email protected]() == "true"; - var legacy:Boolean = [email protected]() == "true"; - var nocache:Boolean = [email protected]() == "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.filterFunction = devBuildFilterFunction; - FLEX_VERSIONS.refresh(); - flexVersion.validateNow(); - - if (this.flexVersion.selectedIndex == -1) { - this.flexVersion.selectedIndex = selectedFlexVersion; + + FLEX_VERSIONS.processXML(flexData); + FLEX_VERSIONS.hideDevBuilds(); + + flexVersionSelectList.validateNow(); + + if (this.flexVersionSelectList.selectedIndex == -1) + { + this.flexVersionSelectList.selectedIndex = FLEX_VERSIONS.defaultVersion; } - - var selectedFlexVersionObject:Object = this.flexVersion.selectedItem; + + var selectedFlexVersionObject:Object = this.flexVersionSelectList.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 = [email protected](); versionString = [email protected](); versionID = null; if ([email protected]() > 0) + { versionID = [email protected](); + } 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 = [email protected](); SWF_OBJECT_URL = [email protected](); - + //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 = [email protected](); OSMF_SWC_URL = [email protected](); @@ -952,40 +945,41 @@ variables are not required because the locations of these pieces are known. OSMF_SWC_URL = data["OSMF_SWC_2.0"][email protected](); _useOSMF2 = true; } - + BLAZEDS_FILE = [email protected](); BLAZEDS_URL = [email protected](); - + AFE_FILE = [email protected](); AFE_URL = [email protected](); - + AGLJ40_FILE = [email protected](); AGLJ40_URL = [email protected](); - + FLEX_FONTKIT_FILE = data.fontswf["flex-fontkit"][email protected](); FLEX_FONTKIT_URL = data.fontswf["flex-fontkit"][email protected](); - + RIDEAU_FILE = [email protected](); RIDEAU_URL = [email protected](); - - + + 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 +989,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 +1076,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 +1090,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 +1125,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 (flexVersionSelectList.selectedItem.needsAIR) { if (airVersionID) + { log("AIR version " + airVersionID); + } else + { log("AIR version " + AIR_VERSION); + } } - - if (flexVersion.selectedItem.needsFlash) + + if (flexVersionSelectList.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 +1176,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 URLLoader(); + 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 +1207,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 +1247,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"), - [email protected](), [email protected]() == "true"); + getLocalizedString(comp, "message"), getLocalizedString(comp, "license"), + getLocalizedString(comp, "licenseURL"), + [email protected](), [email protected]() == "true"); licensePropertyMap[[email protected]()] = vo; _installerComponentsDataProvider.addItem(vo); } @@ -1245,7 +1276,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 +1297,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 +1328,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 +1350,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 = [email protected](); if (!propName || InstallerComponentVO(licensePropertyMap[propName]).selected) { @@ -1348,13 +1383,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 +1414,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,39 +1455,41 @@ 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;*/ - var item:Object = flexVersion.selectedItem; + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/ + var item:Object = flexVersionSelectList.selectedItem; airVersion.enabled = item.needsAIR; flashPlayerVersion.enabled = item.needsFlash; updateFlexVersionStrings(item); @@ -1458,15 +1497,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 +1513,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; - + var overlay:Boolean = flexVersionSelectList.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 +1535,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 +1566,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 +1763,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 +1825,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.l
<TRUNCATED>
