Refactoring InstallApacheFlex.mxml -- Broke out FlexVersions and Cache Dialog components.
diff --git a/ant_on_air/build.properties b/ant_on_air/build.properties
index 5fa1580..bd06806 100644
--- a/ant_on_air/build.properties
+++ b/ant_on_air/build.properties
@@ -21,4 +21,7 @@
LIBRARY_DIR=bin
LIBRARY_NAME=ant_on_air
SOURCE_DIR=src
-DEBUG_FLAG=true
\ No newline at end of file
+DEBUG_FLAG=true
+
+env.FLEX_HOME=E:/Apache/sdk/4.14.0
+env.AIR_HOME=E:/Apache/sdk/4.14.0
\ No newline at end of file
diff --git a/installer/build.properties b/installer/build.properties
index 0f3ea24..4fa66c3 100644
--- a/installer/build.properties
+++ b/installer/build.properties
@@ -22,7 +22,7 @@
release.version=3.2
#Flex Locations
-FLEX_HOME_WIN=C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.6/sdks/ApacheFlex4.10.0
+FLEX_HOME_WIN=E:/Apache/sdk/4.14.0-AIR4.0
FLEX_HOME_MAC=/Users/justinmclean/Documents/ApacheFlex4.10
#AIR Locations
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 @@
-->
-
<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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
*/
private var SWF_OBJECT_FILE:String;
private var SWF_OBJECT_URL:String;
-
+
/**
* Optional installs
*
@@ -250,10 +209,10 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
}
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 @@
downloadCacheFolder = so.data.downloadCacheFolder;
userDefaultLanguage = so.data.userDefaultLanguage;
}
-
+
protected function handleApplicationComplete(event:FlexEvent):void
{
CursorManager.setBusyCursor();
@@ -432,11 +403,13 @@
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 @@
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 @@
{
selectDefaultLanguage();
}
-
+
private function getIndexOfEnUS():int
{
for (var i:int = 0; i < _langSelect.dataProvider.length; i++)
@@ -479,24 +452,26 @@
}
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 @@
private function loadUSComplete():void
{
var userLocale:String;
-
+
if (userDefaultLanguage)
{
userLocale = userDefaultLanguage;
@@ -514,28 +489,30 @@
{
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 @@
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 @@
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 @@
}
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 @@
{
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 @@
log("\tServer Status: " + event.status);
}
}
-
+
protected function xmlError(event:IOErrorEvent):void
{
selectDefaultLanguageInEmergency();
@@ -703,49 +697,51 @@
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 @@
dlg.cb.selected = usingDownloadCache;
dlg.folder.text = downloadCacheFolder;
}
-
+
private function updateDownloadCache(event:Event):void
{
downloadCacheFolder = event.target.folder.text;
@@ -765,13 +761,13 @@
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 @@
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)
+
+ FLEX_VERSIONS.processXML(flexData);
+ FLEX_VERSIONS.hideDevBuilds();
+
+ flexVersionSelectList.validateNow();
+
+ if (this.flexVersionSelectList.selectedIndex == -1)
{
- var productName:String = productData.@name.toString();
- var productPrefix:String = productData.@prefix.toString();
- var productVersionList:XMLList = productData.versions.children();
- var isOverlay:Boolean = productData.@overlay.toString() == "true";
- var needsAIR:Boolean = productData.@needsAIR.toString() != "false";
- var needsFlash:Boolean = productData.@needsFlash.toString() != "false";
- var icon:String = productData.@icon.toString();
- for each (var productVersion:XML in productVersionList) {
- var shortName:String = productVersion.@file.toString();
- var fileName:String = shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC);
- versionString = productVersion.@version.toString();
- var label:String = productName + " " + versionString;
- var ver:String = fileName.substr(productPrefix.length).split("-")[0];
- var path:String = productVersion.@path.toString();
- var devBuild:Boolean = productVersion.@dev.toString() == "true";
- var legacy:Boolean = productVersion.@legacy.toString() == "true";
- var nocache:Boolean = productVersion.@nocache.toString() == "true";
- if (productVersion["@default"].length() == 1)
- selectedFlexVersion = FLEX_VERSIONS.length;
- FLEX_VERSIONS.addItem({shortName: shortName, fileName:fileName,label:label, version:ver,
- path:path, overlay: isOverlay, prefix: productPrefix, legacy: legacy, nocache: nocache,
- needsAIR: needsAIR, needsFlash: needsFlash, devBuild: devBuild, icon: icon});
- }
+ this.flexVersionSelectList.selectedIndex = FLEX_VERSIONS.defaultVersion;
}
-
- FLEX_VERSIONS.filterFunction = devBuildFilterFunction;
- FLEX_VERSIONS.refresh();
- flexVersion.validateNow();
-
- if (this.flexVersion.selectedIndex == -1) {
- this.flexVersion.selectedIndex = selectedFlexVersion;
- }
-
- 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 = 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 +945,41 @@
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 +989,85 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 +1276,7 @@
currentState = "directoryState";
System.disposeXML(data);
}
-
+
private function getLocalizedString(xml:XML, propName:String):String
{
var compBundle:XMLList;
@@ -1266,26 +1297,28 @@
{
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 @@
}
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 @@
_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 +1383,15 @@
}
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 @@
}
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 @@
// "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 @@
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 @@
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 @@
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 @@
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 @@
}
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 @@
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");
- }
- else if (ant.progressClass is Checksum)
- {
- progressBar.label = getLocalizedString(progressLabels, "Checksum");
- }
- */
+ 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 +1900,38 @@
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.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 {
+
+ if (Ant.currentAnt)
+ {
+ if (Ant.currentAnt.project.status)
+ {
+ tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os);
+ }
+ if (Ant.currentAnt.project.failureMessage)
+ {
+ cleanup(!Ant.currentAnt.project.status, "&info=" + escape(Ant.currentAnt.project.failureMessage));
+ }
+ else
+ {
+ cleanup(!Ant.currentAnt.project.status);
+ }
+ }
+ else
+ {
cleanup();
}
}
-
+
private var ant:Ant;
-
+
private function output(s:String):void
{
var isPublic:Boolean = false;
@@ -1821,9 +1942,13 @@
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 +1966,235 @@
}
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)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
abortInstallation();
}
}
-
+
protected function downloadAIRRuntimeKitForLinux():void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE);
-
- try {
+
+ try
+ {
log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_LINUX_URL);
_adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_LINUX_FILE);
copyOrDownload(ADOBE_AIR_SDK_LINUX_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError);
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
abortInstallation();
}
}
-
+
protected function handleAIRSDKDownload(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_adobeAIRSDKZipFile, event.target.data);
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
abortInstallation();
}
-
+
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.COMPLETE);
-
+
unzipAdobeAIRSDK();
}
-
+
protected function handleAIRSDKDownloadError(error:* = null):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_AIR_SDK);
abortInstallation();
}
-
+
protected function unzipAdobeAIRSDK():void
{
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ACTIVE);
-
- try {
- if (_os.isWindows()) {
+
+ try
+ {
+ if (_os.isWindows())
+ {
unzipAdobeAIRSDKWindows()
- } else {
+ }
+ else
+ {
unzipAdobeAIRSDKMac();
}
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
abortInstallation();
}
}
-
+
protected function unzipAdobeAIRSDKWindows():void
{
log(_viewResourceConstants.INFO_UNZIPPING + _adobeAIRSDKZipFile.nativePath);
unzip(_adobeAIRSDKZipFile, handleAdobeAIRSDKWinZipFileUnzipComplete, handleAdobeAIRSDKWinZipFileUnzipError);
}
-
+
protected function unzipAdobeAIRSDKMac():void
{
- if (NativeProcess.isSupported) {
+ if (NativeProcess.isSupported)
+ {
untar(_adobeAIRSDKZipFile, _flexHomeDir, handleAdobeAIRSDKMacUntarComplete, handleAdobeAIRSDKMacUntarError);
- } else {
+ }
+ else
+ {
log(_viewResourceConstants.ERROR_NATIVE_PROCESS_NOT_SUPPORTED);
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
}
}
-
+
protected function handleAdobeAIRSDKMacUntarError(error:ProgressEvent = null):void
{
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
abortInstallation();
}
-
+
protected function handleAdobeAIRSDKMacUntarComplete(event:Event):void
{
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE);
log(_viewResourceConstants.INFO_FINISHED_UNTARING + _adobeAIRSDKZipFile.nativePath);
downloadPlayerGlobalSWC();
}
-
+
protected function handleAdobeAIRSDKWinZipFileUnzipComplete(event:Event):void
{
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE);
log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _adobeAIRSDKZipFile.nativePath);
downloadPlayerGlobalSWC();
}
-
+
protected function handleAdobeAIRSDKWinZipFileUnzipError(error:ErrorEvent = null):void
{
updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
}
-
+
protected function downloadPlayerGlobalSWC():void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ACTIVE);
-
- try {
+
+ try
+ {
log(_viewResourceConstants.INFO_INSTALLING_PLAYERGLOBAL_SWC + ADOBE_FB_GLOBALPLAYER_SWC_URL);
_fbGlobalPlayerDir = createFolder(_flexHome + File.separator + "frameworks" + File.separator + "libs" + File.separator + "player"
- + File.separator + FLASH_PLAYER_VERSION);
+ + File.separator + FLASH_PLAYER_VERSION);
_fbGlobalPlayerFile = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc");
copyOrDownload(ADOBE_FB_GLOBALPLAYER_SWC_URL, handlePlayerGlobalDownload, _fbGlobalPlayerFile, handlePlayerGlobalDownloadError);
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
abortInstallation();
}
}
-
+
protected function handlePlayerGlobalDownload(event:Event):void
{
- try {
+ try
+ {
var playerGlobalFile:File = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc");
writeFileToDirectory(playerGlobalFile, event.target.data);
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
abortInstallation();
}
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.COMPLETE);
copyConfigFiles();
}
-
+
protected function handlePlayerGlobalDownloadError(event:ErrorEvent = null):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLASH_PLAYER_SWC);
abortInstallation();
}
-
+
protected function changeConfig(frameworksDir:File, file:File, flashPlayerVersion:String, swfVersion:String):void
{
- if (isValidConfigFile(file)) {
+ if (isValidConfigFile(file))
+ {
var configFile:FileStream = new FileStream();
configFile.open(file, FileMode.READ);
var contents:String = configFile.readMultiByte(configFile.bytesAvailable, "utf-8");
var playerVersion:RegExp = /<target-player>\d\d\.\d<\/target-player>/;
contents = contents.replace(playerVersion, "<target-player>" + flashPlayerVersion + "<\/target-player>");
var playerSwfVersion:RegExp = /<swf-version>\d\d<\/swf-version>/;
- contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>" );
+ contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>");
configFile.close();
- configFile.open(file,FileMode.WRITE);
+ configFile.open(file, FileMode.WRITE);
configFile.writeMultiByte(contents, "utf-8");
var copyToFile:File = frameworksDir.resolvePath(file.name);
configFile.close();
file.copyTo(copyToFile, true);
}
}
-
+
protected function copyConfigFiles():void
{
var aborted:Boolean = false;
-
+
updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ACTIVE);
-
- try {
+
+ try
+ {
//Config files
var configFilesDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "ide" + File.separator + "flashbuilder" + File.separator
- + "config");
+ + "config");
var configFiles:Array = configFilesDir.getDirectoryListing();
var flexHomeFrameworksDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "frameworks");
log(_viewResourceConstants.INFO_INSTALLING_CONFIG_FILES);
-
- for each (var file:File in configFiles) {
+
+ for each (var file:File in configFiles)
+ {
changeConfig(flexHomeFrameworksDir, file, FLASH_PLAYER_VERSION, FLASH_PLAYER_SWF_VERSION);
}
-
+
file = File.userDirectory.resolvePath(_flexHome + File.separator + "flex-sdk-description.xml");
var descriptionFile:FileStream = new FileStream();
descriptionFile.open(file, FileMode.READ);
@@ -2047,35 +2202,41 @@
var description:RegExp = /<name>[^<]*<\/name>/;
contents = contents.replace(description, "<name>Apache Flex " + APACHE_FLEX_BIN_DISTRO_VERSION + " FP " + FLASH_PLAYER_VERSION + " AIR " + AIR_VERSION + " en_US</name>");
descriptionFile.close();
- descriptionFile.open(file,FileMode.WRITE);
+ descriptionFile.open(file, FileMode.WRITE);
descriptionFile.writeMultiByte(contents, "utf-8");
descriptionFile.close();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_INSTALL_CONFIG_FILES);
abortInstallation();
aborted = true;
}
-
- if (!aborted) {
+
+ if (!aborted)
+ {
updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.COMPLETE);
downloadSwfObject();
}
}
-
+
protected function downloadSwfObject():void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ACTIVE);
-
- try {
+
+ try
+ {
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [SWF_OBJECT_FILE, SWF_OBJECT_URL]));
copyOrDownload(SWF_OBJECT_URL + SWF_OBJECT_FILE, handlSWFObjectDownload, null, handleSWFObjectDownloadError);
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
abortInstallation();
}
}
-
+
protected function handlSWFObjectDownload(event:Event):void
{
log(_viewResourceConstants.INFO_DOWNLOADED);
@@ -2083,52 +2244,58 @@
writeFileToDirectory(swfObjectZipFile, event.target.data);
unzip(swfObjectZipFile, handleSWFObjectUnzipComplete, handleSWFObjectZipFileUnzipError);
}
-
+
protected function handleSWFObjectDownloadError(event:ErrorEvent = null):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
abortInstallation();
}
-
+
protected function handleSWFObjectUnzipComplete(event:Event):void
{
- try {
+ try
+ {
var expressInstallFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "expressInstall.swf");
expressInstallFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "expressInstall.swf"));
-
+
var swfObjectJSFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "swfobject.js");
swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "swfobject.js"));
-
+
swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("javascript" + File.separator + "FABridge" + File.separator + "samples" + File.separator
- + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js"));
-
+ + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js"));
+
var swfObjectDir:File = _flexHomeDir.resolvePath("swfobject");
swfObjectDir.deleteDirectory(true);
-
+
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.COMPLETE);
installOSMF();
-
- } catch (e:Error) {
+
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
abortInstallation();
}
-
+
}
-
+
protected function handleSWFObjectZipFileUnzipError(event:Event):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
abortInstallation();
}
-
+
protected function installNextOptionalComponent():void
{
- for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
- if (obj.selected && !obj.installed && !obj.aborted) {
- switch (obj.label) {
+ for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (obj.selected && !obj.installed && !obj.aborted)
+ {
+ switch (obj.label)
+ {
case _viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS:
{
installBlazeDS();
@@ -2150,7 +2317,7 @@
}
checkAndHandleAllOptionalComponentsInstalled();
}
-
+
protected function installBlazeDS():void
{
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ACTIVE);
@@ -2158,10 +2325,11 @@
_blazeDSJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + BLAZEDS_FILE);
copyOrDownload(BLAZEDS_URL + BLAZEDS_FILE, handleBlazeDSDownloadComplete, null, handleBlazeDSInstallError);
}
-
+
protected function handleBlazeDSDownloadComplete(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_blazeDSJarFile, event.target.data);
copyFileToOptionalLibDir(_blazeDSJarFile);
updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true);
@@ -2169,133 +2337,147 @@
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.COMPLETE);
clearData(URLLoader(event.target));
installNextOptionalComponent();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true);
installNextOptionalComponent();
}
}
-
+
protected function installFontSwf():void
{
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ACTIVE);
downloadFontSwfAFEFile();
}
-
+
protected function downloadFontSwfAFEFile():void
{
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AFE_FILE, AFE_URL]));
_afeJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AFE_FILE);
copyOrDownload(AFE_URL + AFE_FILE, handleFontSWFAFEFileDownloaded, null, handleFontSWFInstallError);
}
-
+
protected function handleFontSWFAFEFileDownloaded(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_afeJarFile, event.target.data);
copyFileToOptionalLibDir(_afeJarFile);
clearData(URLLoader(event.target));
-
+
downloadFontSwfAGLFile();
-
- } catch (e:Error) {
+
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
installNextOptionalComponent();
}
}
-
+
protected function downloadFontSwfAGLFile():void
{
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AGLJ40_FILE, AGLJ40_URL]));
_aglj40JarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AGLJ40_FILE);
copyOrDownload(AGLJ40_URL + AGLJ40_FILE, handleFontSWFAGLFileDownloaded, null, handleFontSWFInstallError);
}
-
+
protected function handleFontSWFAGLFileDownloaded(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_aglj40JarFile, event.target.data);
copyFileToOptionalLibDir(_aglj40JarFile);
clearData(URLLoader(event.target));
-
+
downloadFontSwfFlexFontKitFile();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
installNextOptionalComponent();
}
}
-
+
protected function downloadFontSwfFlexFontKitFile():void
{
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [FLEX_FONTKIT_FILE, FLEX_FONTKIT_URL]));
_flexFontKitJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + FLEX_FONTKIT_FILE);
copyOrDownload(FLEX_FONTKIT_URL + FLEX_FONTKIT_FILE, handleFontSWFFlexFontKitFileDownloaded, null, handleFontSWFInstallError);
}
-
+
protected function handleFontSWFFlexFontKitFileDownloaded(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_flexFontKitJarFile, event.target.data);
copyFileToOptionalLibDir(_flexFontKitJarFile);
clearData(URLLoader(event.target));
-
+
downloadFontSwfRideauKitFile();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
installNextOptionalComponent();
}
}
-
+
protected function downloadFontSwfRideauKitFile():void
{
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [RIDEAU_FILE, RIDEAU_URL]));
_rideauJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + RIDEAU_FILE);
copyOrDownload(RIDEAU_URL + RIDEAU_FILE, handleFontSWFRideauFileDownloaded, null, handleFontSWFInstallError);
}
-
+
protected function handleFontSWFRideauFileDownloaded(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_rideauJarFile, event.target.data);
copyFileToOptionalLibDir(_rideauJarFile);
clearData(URLLoader(event.target));
-
+
updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, false);
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.COMPLETE);
installNextOptionalComponent();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
installNextOptionalComponent();
}
}
-
+
protected function installOSMF():void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ACTIVE);
downloadOSMFFile();
}
-
+
protected function downloadOSMFFile():void
{
_osmfSWFFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWF_FILE.toLowerCase());
-
+
log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [OSMF_SWC_FILE, OSMF_SWC_URL]));
_osmfSWCFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWC_FILE.toLowerCase());
- if(_useOSMF2)
+ if (_useOSMF2)
{
downloadOSMF2SWC();
}
else
{
- copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE,handleOSMFSWCFileDownloaded,null,handleOSMFSWCInstallError);
+ copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE, handleOSMFSWCFileDownloaded, null, handleOSMFSWCInstallError);
}
}
-
+
protected function downloadOSMF2SWC():void
{
var url:String;
@@ -2313,16 +2495,22 @@
// that should find the slash after the server.
cacheURL = url.substr(c + 1);
if (debugMode)
+ {
log("http caching. url = " + cacheURL);
+ }
}
var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
cacheFile = cacheFile.resolvePath(escape(cacheURL));
if (debugMode)
+ {
log("searching cache for " + cacheFile.url);
+ }
if (cacheFile.exists)
{
if (debugMode)
+ {
log("found file in cache");
+ }
url = cacheFile.url;
actuallyDownloadOSMF2SWC(new URLRequest(url));
return;
@@ -2332,39 +2520,41 @@
httpService.addEventListener(FaultEvent.FAULT, handleOSMFSWCUnzipError);
httpService.send();
}
-
+
protected function getMirrorInfo(event:ResultEvent):void
{
var mirror:String = String(event.result);
mirror = mirror.substr(mirror.indexOf('use_mirror=') + 'use_mirror='.length, mirror.length);
mirror = mirror.substring(0, mirror.indexOf('">'));
-
+
var mirrorURL:String = 'http://' + mirror + Constants.SOURCEFORGE_DL_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
var refererURL:String = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + '/download?use_mirror=' + mirror;
-
+
var req:URLRequest = new URLRequest(mirrorURL);
- req.requestHeaders = [ new URLRequestHeader('Referer', refererURL) ];
-
+ req.requestHeaders = [new URLRequestHeader('Referer', refererURL)];
+
actuallyDownloadOSMF2SWC(req);
}
-
+
protected function actuallyDownloadOSMF2SWC(req:URLRequest):void
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
if (usingDownloadCache)
+ {
loader.addEventListener(Event.COMPLETE, cacheOSMF2SWC);
+ }
loader.addEventListener(Event.COMPLETE, handleOSMFSWCFileDownloaded);
loader.addEventListener(ErrorEvent.ERROR, handleOSMFSWCInstallError);
loader.addEventListener(IOErrorEvent.IO_ERROR, handleOSMFSWCInstallError);
-
+
loader.load(req);
}
-
+
protected function cacheOSMF2SWC(event:Event):void
{
var url:String;
- url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
+ url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
var cacheURL:String;
if (url.indexOf("http") == 0)
{
@@ -2374,14 +2564,18 @@
// that should find the slash after the server.
cacheURL = url.substr(c + 1);
if (debugMode)
+ {
log("http caching. url = " + cacheURL);
+ }
}
if (cacheURL)
{
var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
cacheFile = cacheFile.resolvePath(escape(cacheURL));
if (debugMode)
+ {
log("caching " + cacheFile.url);
+ }
if (!cacheFile.exists)
{
var fs:FileStream = new FileStream();
@@ -2397,80 +2591,87 @@
else
{
if (debugMode)
+ {
log("file was already in cache");
+ }
}
}
}
-
+
protected function handleOSMFSWCFileDownloaded(event:Event):void
{
- try {
+ try
+ {
writeFileToDirectory(_osmfSWCFile, event.target.data);
copyFileToLibDir(_osmfSWCFile);
- unzip(_osmfSWCFile,handleOSMFSWCUnzipped,handleOSMFSWCUnzipError);
+ unzip(_osmfSWCFile, handleOSMFSWCUnzipped, handleOSMFSWCUnzipError);
clearData(URLLoader(event.target));
-
+
updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, false);
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.COMPLETE);
installNextOptionalComponent();
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
abortInstallation();
}
}
-
+
/**
* Unzip osmf.swc, extract library.swf from it and copy it into frameworks/rsls/osmf_<flexversion>.<buildnumber>
* Delete other files extracted from osmf.swc
*/
protected function handleOSMFSWCUnzipped(event:Event):void
{
- try {
- var osmfFileName:String = "osmf_" + getFlexVersionBuildString() + ".swf";
+ try
+ {
+ var osmfFileName:String = "osmf_" + getFlexVersionBuildString() + ".swf";
var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "rsls" + File.separator + osmfFileName);
var osmfLibrarySwfFile:File = _flexHomeDir.resolvePath("library.swf");
osmfLibrarySwfFile.moveTo(copyToFile);
var catalogXMLFile:File = _flexHomeDir.resolvePath("catalog.xml");
- if(catalogXMLFile.exists)
+ if (catalogXMLFile.exists)
{
catalogXMLFile.deleteFile();
}
var manifestXMLFile:File = _flexHomeDir.resolvePath("manifest.xml");
- if(manifestXMLFile.exists)
+ if (manifestXMLFile.exists)
{
manifestXMLFile.deleteFile();
}
}
- catch (e:Error) {
+ catch (e:Error)
+ {
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
abortInstallation();
}
}
-
+
protected function handleOSMFSWCUnzipError(event:Event):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
abortInstallation();
}
-
+
protected function copyFileToOptionalLibDir(file:File):void
{
//Copy to "${FLEX_HOME}/lib/external/optional"
var copyToFile:File = _flexHomeDir.resolvePath("lib" + File.separator + "external" + File.separator + "optional" + File.separator + file.name);
file.copyTo(copyToFile, true);
}
-
+
protected function copyFileToLibDir(file:File):void
{
//Copy to "${FLEX_HOME}/frameworks/libs/"
var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "libs" + File.separator + file.name);
file.copyTo(copyToFile, true);
}
-
+
protected function handleBlazeDSInstallError(event:* = null):void
{
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR);
@@ -2478,7 +2679,7 @@
log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["BlazeDS"]));
installNextOptionalComponent();
}
-
+
protected function handleFontSWFInstallError(event:* = null):void
{
updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
@@ -2486,7 +2687,7 @@
log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["FontSwf Utility"]));
installNextOptionalComponent();
}
-
+
protected function handleOSMFSWFInstallError(event:* = null):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
@@ -2494,7 +2695,7 @@
log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWF"]));
installNextOptionalComponent();
}
-
+
protected function handleOSMFSWCInstallError(event:* = null):void
{
updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
@@ -2502,93 +2703,112 @@
log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWC"]));
installNextOptionalComponent();
}
-
+
protected function updateOptionalComponentInstallStatus(label:String, isInstalled:Boolean):void
{
- for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
- if (obj.label == label) {
+ for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (obj.label == label)
+ {
obj.installed = isInstalled;
}
}
}
-
+
protected function updateOptionalComponentInstallStatusAborted(label:String, isAborted:Boolean):void
{
- for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
- if (obj.label == label) {
+ for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (obj.label == label)
+ {
obj.aborted = isAborted;
}
}
}
-
+
protected function checkAndHandleAllOptionalComponentsInstalled():void
{
var allComponentsInstalled:Boolean = true;
- for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
- if (!obj.required && obj.selected && !(obj.installed || obj.aborted)) {
+ for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (!obj.required && obj.selected && !(obj.installed || obj.aborted))
+ {
allComponentsInstalled = false;
}
}
- if (allComponentsInstalled) {
+ if (allComponentsInstalled)
+ {
tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os);
cleanup(false);
}
}
-
+
protected function cleanup(isAbort:Boolean = false, abortInfo:String = ""):void
{
if (cleanedUp)
+ {
return;
-
+ }
+
cleanedUp = true;
-
+
CursorManager.removeBusyCursor();
- if (!_viewResourceConstants) {
+ if (!_viewResourceConstants)
+ {
selectDefaultLanguageInEmergency();
}
- try {
- if (_flexTempDir) {
+ try
+ {
+ if (_flexTempDir)
+ {
_flexTempDir.deleteDirectory(true);
}
- } catch (e:Error) {
+ }
+ catch (e:Error)
+ {
log(_viewResourceConstants.ERROR_UNABLE_TO_DELETE_TEMP_DIRECTORY);
}
-
- if (isAbort) {
- tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION,
- _os.os + "&info=" + abortInfo);
+
+ if (isAbort)
+ {
+ tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION,
+ _os.os + "&info=" + abortInfo);
}
else if (!wasAborted)
{
log(_viewResourceConstants.INFO_INSTALLATION_COMPLETE);
updateUIHandleInstallationComplete();
}
-
+
saveLogToDisk();
}
-
+
protected function saveLogToDisk():void
{
- if (!_flexHomeDir) {
+ if (!_flexHomeDir)
+ {
return;
}
-
+
var file:File = _flexHomeDir.resolvePath("installer.log");
var fs:FileStream = new FileStream();
-
- try {
+
+ try
+ {
fs.open(file, FileMode.WRITE);
- for each (var message:String in _messages) {
+ for each (var message:String in _messages)
+ {
fs.writeUTFBytes(message);
fs.writeUTFBytes("\n");
}
fs.close();
}
- catch (e:Error) {
+ catch (e:Error)
+ {
// TODO log error?
}
}
-
+
protected function updateUIHandleInstallationComplete():void
{
browseBtn.enabled = true;
@@ -2598,34 +2818,40 @@
progressBar.includeInLayout = false;
thirdStepGroup.title = _viewResourceConstants.INFO_INSTALLATION_COMPLETE;
}
-
+
protected function abortInstallation(reason:String = ""):void
{
if (currentState != "installState")
+ {
showConsole(null);
-
+ }
+
directoryBtn.enabled = false;
browseBtn.enabled = false;
installBtn.enabled = false;
wasAborted = true;
if (_viewResourceConstants)
+ {
log(_viewResourceConstants.INFO_ABORT_INSTALLATION);
+ }
cleanup(true, reason);
if (_viewResourceConstants)
+ {
firstStepGroup.title = secondStepGroup.title = thirdStepGroup.title = _viewResourceConstants.INFO_ABORT_INSTALLATION;
+ }
}
-
+
protected function _langSelect_changeHandler(event:IndexChangeEvent):void
{
var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE;
-
+
var so:SharedObject = SharedObject.getLocal("InstallApacheFlex");
so.data.userDefaultLanguage = _langSelect.selectedItem["data"];
so.flush();
-
+
if (_langSelect.selectedItem["data"] == defaultLanguage)
{
- resourceManager.localeChain = [ defaultLanguage ];
+ resourceManager.localeChain = [defaultLanguage];
resourceManager.update();
setButtonWidths();
}
@@ -2634,20 +2860,20 @@
loadLanguage(_langSelect.selectedItem["data"], _langSelect_changeCompleteHandler);
}
}
-
+
private function _langSelect_changeCompleteHandler():void
{
var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE;
- resourceManager.localeChain = [ languageID, defaultLanguage ];
+ resourceManager.localeChain = [languageID, defaultLanguage];
resourceManager.update();
log("Using Locale: " + languageID);
setButtonWidths();
}
-
+
override protected function resourcesChanged():void
{
super.resourcesChanged();
-
+
if (_viewResourceConstants)
{
rememberInstallerComponents();
@@ -2661,46 +2887,49 @@
}
}
-
+
private var _selectedInstallerComponents:Vector.<InstallerComponentVO>;
-
+
protected function rememberInstallerComponents():void
{
_selectedInstallerComponents = new Vector.<InstallerComponentVO>;
- for each(var item:InstallerComponentVO in _installerComponentsDataProvider) {
- if (item.selected) {
+ for each(var item:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (item.selected)
+ {
_selectedInstallerComponents.push(item);
}
}
}
-
+
protected function recallInstallerComponents():void
{
- for each(var item:InstallerComponentVO in _selectedInstallerComponents) {
+ for each(var item:InstallerComponentVO in _selectedInstallerComponents)
+ {
getInstallerComponentFromLabel(item.key).selected = true;
}
}
-
+
protected function placeGroup(panel:Panel):void
{
panel.x = this.width / 2 - panel.width / 2;
}
-
+
protected function handleOptionalInstallsChange(event:IndexChangeEvent):void
{
var selectedItem:InstallerComponentVO = InstallerComponentVO(event.target.selectedItem);
optionalInstallsTxtArea.text = selectedItem.message;
/*installChkBx.label = _viewResourceConstants.INSTALL_AGREE;
- if (selectedItem.answered) {
- if (selectedItem.selected) {
- installChkBx.selected = true;
- } else {
- installChkBx.selected = false;
- }
- } else {
- installChkBx.selected = false;
- }*/
-
+ if (selectedItem.answered) {
+ if (selectedItem.selected) {
+ installChkBx.selected = true;
+ } else {
+ installChkBx.selected = false;
+ }
+ } else {
+ installChkBx.selected = false;
+ }*/
+
// Store the current selected item in order to have the license title update if the language is changed
lastLicenseItemSelected = installComponentsList.selectedIndex;
@@ -2708,71 +2937,88 @@
_currentLicenseLabel = selectedItem.licenseName;
_currentLicenseURL = selectedItem.licenseURL;
checkIfAllRequiredComponentsPromptsAnswered();
-
+
}
-
+
protected function handleLicenceBtnClick(event:Event):void
{
navigateToURL(new URLRequest(_currentLicenseURL), "_blank");
}
-
+
protected function handleInstallPermissionChange(event:InstallItemSelectionEvent):void
{
- if (installComponentsList.selectedItem != null) {
+ if (installComponentsList.selectedItem != null)
+ {
installComponentsList.selectedItem.selected = (event.item.selected);
installComponentsList.selectedItem.answered = true;
- } else {
- for (var i:int = 0; i < _installerComponentsDataProvider.length; i++) {
+ }
+ else
+ {
+ for (var i:int = 0; i < _installerComponentsDataProvider.length; i++)
+ {
_installerComponentsDataProvider.getItemAt(i).selected = event.item.selected;
_installerComponentsDataProvider.getItemAt(i).answered = true;
}
}
checkIfAllRequiredComponentsPromptsAnswered();
}
-
+
protected function checkIfAllRequiredComponentsPromptsAnswered():void
{
var success:Boolean = true;
- for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
- if (obj.required && !obj.selected) {
+ for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (obj.required && !obj.selected)
+ {
success = false;
}
}
installBtn.enabled = success;
}
-
+
/************************ Utility methods *****************/
-
+
private function createFolder(path:String):File
{
var dir:File = new File(path);
-
+
if (!dir.exists)
+ {
dir.createDirectory();
-
+ }
+
return dir;
}
-
+
private function copyOrDownload(url:String, handlerFunction:Function, dest:File = null, errorFunction:Function = null, nocache:Boolean = false):void
{
- if (url.search("http") == 0) {
+ if (url.search("http") == 0)
+ {
download(url, handlerFunction, errorFunction, nocache);
- } else if (url.search("file://") == 0) {
+ }
+ else if (url.search("file://") == 0)
+ {
download(url, handlerFunction, errorFunction, nocache);
- } else {
+ }
+ else
+ {
var source:File = new File(url);
-
- try {
+
+ try
+ {
source.copyTo(dest, true);
- } catch (error:Error) {
- if (errorFunction != null) {
+ }
+ catch (error:Error)
+ {
+ if (errorFunction != null)
+ {
errorFunction.call(null);
}
log(_viewResourceConstants.ERROR_UNABLE_TO_COPY_FILE + error.errorID + " " + error.message);
}
}
}
-
+
private function download(url:String, handlerFunction:Function, errorFunction:Function = null, nocache:Boolean = false):void
{
loader = new URLLoader();
@@ -2780,10 +3026,14 @@
{
log("downloading " + url);
if (usingDownloadCache)
+ {
log("using download cache");
+ }
if (nocache)
+ {
log("not caching this download");
- }
+ }
+ }
if (usingDownloadCache && !nocache)
{
var cacheURL:String;
@@ -2791,7 +3041,9 @@
{
cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length);
if (debugMode)
+ {
log("mirror caching. url = " + cacheURL);
+ }
}
else
{
@@ -2803,7 +3055,9 @@
// that should find the slash after the server.
cacheURL = url.substr(c + 1);
if (debugMode)
+ {
log("http caching. url = " + cacheURL);
+ }
}
}
if (cacheURL)
@@ -2811,7 +3065,9 @@
var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
cacheFile = cacheFile.resolvePath(escape(cacheURL));
if (debugMode)
+ {
log("searching cache for " + cacheFile.url);
+ }
if (cacheFile.exists)
{
log(_viewResourceConstants.INFO_USING_CACHED_FILE + " " + cacheFile.url);
@@ -2822,19 +3078,24 @@
var req:URLRequest = new URLRequest(url);
//Wait for 5 minutes before aborting download attempt. Adobe download sites as well as some Apache mirrors are extremely slow.
req.idleTimeout = 300000;
-
+
loader.dataFormat = URLLoaderDataFormat.BINARY;
if (usingDownloadCache)
+ {
loader.addEventListener(Event.COMPLETE, function (event:Event):void
{
if (debugMode)
+ {
log("download complete preparing to cache");
+ }
var cacheURL:String;
if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1)
{
cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length);
if (debugMode)
+ {
log("mirror caching. url = " + cacheURL);
+ }
}
else
{
@@ -2846,7 +3107,9 @@
// that should find the slash after the server.
cacheURL = url.substr(c + 1);
if (debugMode)
+ {
log("http caching. url = " + cacheURL);
+ }
}
}
if (cacheURL && !nocache)
@@ -2854,7 +3117,9 @@
var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
cacheFile = cacheFile.resolvePath(escape(cacheURL));
if (debugMode)
+ {
log("caching " + cacheFile.url);
+ }
if (!cacheFile.exists)
{
var fs:FileStream = new FileStream();
@@ -2870,25 +3135,29 @@
else
{
if (debugMode)
+ {
log("file was already in cache");
+ }
}
}
-
+
});
+ }
loader.addEventListener(Event.COMPLETE, handlerFunction, false, 0, true);
loader.addEventListener(Event.COMPLETE, handleDownloadComplete, false, 0, true);
-
+
progressBar.percent = 0;
-
- if (errorFunction != null) {
+
+ if (errorFunction != null)
+ {
loader.addEventListener(ErrorEvent.ERROR, errorFunction, false, 0, true);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorFunction, false, 0, true);
}
loader.addEventListener(ProgressEvent.PROGRESS, handleDownloadProgress, false, 0, true);
-
+
loader.load(req);
}
-
+
private function handleDownloadProgress(event:ProgressEvent):void
{
var bytesTotal:int = event.bytesTotal;
@@ -2897,77 +3166,89 @@
{
var percentLoaded:int = Math.round(bytesLoaded * 100 / bytesTotal);
if (logProgressEvents)
+ {
log("download progress " + event.bytesLoaded + " " + event.bytesTotal, -1, false);
-
+ }
+
progressBar.percent = percentLoaded;
}
}
-
+
private function handleDownloadComplete(event:Event):void
{
_previousDisplayedPercent = 0;
clearData(URLLoader(event.target));
}
-
+
private function clearData(v:URLLoader):void
{
ByteArray(v.data).clear();
System.gc();
}
-
+
private function unzip(fileToUnzip:File, unzipCompleteFunction:Function, unzipErrorFunction:Function = null):void
{
var zipFileBytes:ByteArray = new ByteArray();
var fs:FileStream = new FileStream();
var fzip:Zip = new Zip();
-
+
fs.open(fileToUnzip, FileMode.READ);
fs.readBytes(zipFileBytes);
fs.close();
-
+
fzip.addEventListener(ZipEvent.FILE_LOADED, onFileLoaded, false, 0, true);
fzip.addEventListener(Event.COMPLETE, unzipCompleteFunction, false, 0, true);
fzip.addEventListener(Event.COMPLETE, onUnzipComplete, false, 0, true);
- if (unzipErrorFunction != null) {
+ if (unzipErrorFunction != null)
+ {
fzip.addEventListener(ErrorEvent.ERROR, unzipErrorFunction, false, 0, true);
_fileUnzipErrorFunction = unzipErrorFunction
}
fzip.loadBytes(zipFileBytes);
}
-
+
private function onFileLoaded(e:ZipEvent):void
{
- try {
+ try
+ {
var fzf:ZipFile = e.file;
var f:File;
if (overlaying)
+ {
f = _flexTempDir.resolvePath(fzf.filename);
+ }
else
+ {
f = _flexHomeDir.resolvePath(fzf.filename);
+ }
var fs:FileStream = new FileStream();
-
- if (isDirectory(fzf)) {
+
+ if (isDirectory(fzf))
+ {
// Is a directory, not a file. Dont try to write anything into it.
return;
}
-
+
fs.open(f, FileMode.WRITE);
fs.writeBytes(fzf.content);
fs.close();
-
- } catch (error:Error) {
+
+ }
+ catch (error:Error)
+ {
_fileUnzipErrorFunction.call();
}
}
-
+
private function isDirectory(f:ZipFile):Boolean
{
- if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\") {
+ if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\")
+ {
return true;
}
return false;
}
-
+
private function onUnzipComplete(event:Event):void
{
var fzip:Zip = event.target as Zip;
@@ -2975,28 +3256,30 @@
fzip.removeEventListener(ZipEvent.FILE_LOADED, onFileLoaded);
fzip.removeEventListener(Event.COMPLETE, onUnzipComplete);
}
-
+
private function untar(source:File, destination:File, unTarCompleteFunction:Function, unTarErrorFunction:Function):void
{
var tar:File;
var startupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var arguments:Vector.<String> = new Vector.<String>();
-
- if (_os.isLinux()) {
+
+ if (_os.isLinux())
+ {
tar = new File("/bin/tar");
}
- else {
+ else
+ {
tar = new File("/usr/bin/tar");
}
-
+
arguments.push("xf");
arguments.push(source.nativePath);
arguments.push("-C");
arguments.push(destination.nativePath);
-
+
startupInfo.executable = tar;
startupInfo.arguments = arguments;
-
+
_process = new NativeProcess();
_process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, unTarFileProgress, false, 0, true);
_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarErrorFunction, false, 0, true);
@@ -3005,28 +3288,28 @@
_process.addEventListener(NativeProcessExitEvent.EXIT, unTarComplete, false, 0, true);
_process.start(startupInfo);
}
-
+
private function unTarError(event:Event):void
{
var output:String = _process.standardError.readUTFBytes(_process.standardError.bytesAvailable);
-
+
log(_viewResourceConstants.ERROR_NATIVE_PROCESS_ERROR);
log(output);
}
-
+
private function unTarFileProgress(event:Event):void
{
var output:String = _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable);
-
+
log(output);
}
-
+
private function unTarComplete(event:NativeProcessExitEvent):void
{
_process.closeInput();
_process.exit(true);
}
-
+
private function writeFileToDirectory(file:File, data:ByteArray):void
{
var fs:FileStream = new FileStream();
@@ -3034,43 +3317,60 @@
fs.writeBytes(data);
fs.close();
}
-
+
private function isValidConfigFile(file:File):Boolean
{
var name:String = file.name;
-
- if (name.search("-config.xml") == -1) {
+
+ if (name.search("-config.xml") == -1)
+ {
return false;
- } else {
+ }
+ else
+ {
return true;
}
}
-
+
private function isAirConfigFile(file:File):Boolean
{
var name:String = file.name;
-
- if (name.search("air") == 0) {
+
+ if (name.search("air") == 0)
+ {
return true;
- } else {
+ }
+ else
+ {
return false;
}
}
-
+
private function log(text:String, position:int = -1, isPublic:Boolean = true, skipLog:Boolean = false):void
{
if (text == null)
+ {
text = "";
- if (position == -1) {
+ }
+ if (position == -1)
+ {
if (!skipLog)
+ {
_messages.addItem(text);
+ }
if (isPublic)
+ {
lastPublicMessage = text;
- } else {
+ }
+ }
+ else
+ {
_messages.addItemAt(text, position);
}
if (debugMode)
+ {
trace(text);
+ }
if (logFile)
{
var f:File = new File(logFile);
@@ -3080,21 +3380,26 @@
fs.close();
}
}
-
+
private var console:ConsoleWindow;
+
private function showConsole(event:Event):void
{
if (!console || console.closed)
+ {
console = new ConsoleWindow();
+ }
else if (console)
+ {
console.orderToFront();
-
+ }
+
console.messages = _messages;
console.open();
console.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - console.nativeWindow.width / 2;
console.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - console.nativeWindow.height / 2;
}
-
+
private function showMPLLicense(event:Event):void
{
var licenseWindow:MPLLicense = new MPLLicense();
@@ -3102,7 +3407,7 @@
licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2;
licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2;
}
-
+
private function showAdobeLicense(event:Event):void
{
var licenseWindow:AdobeLicense = new AdobeLicense();
@@ -3110,16 +3415,16 @@
licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2;
licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2;
}
-
+
private function openApacheFlexFolder(event:Event):void
{
_flexHomeDir.openWithDefaultApplication();
}
-
+
private function closeApplication(event:Event):void
{
removeEventListener(Event.CLOSING, closeApplication);
-
+
if (currentState == "installState")
{
if (currentStep < stepLabels.length)
@@ -3127,105 +3432,120 @@
// User aborted the installation by closing the installer
var activeStep:StepItem = getActiveStepItem();
if (_viewResourceConstants)
+ {
abortInstallation(_viewResourceConstants.INFO_USER_ABORT_INSTALLATION + activeStep.label);
+ }
}
}
-
+
// TODO only enable close button when finished or when an error occurs
// TODO anything we need to clean up?
if (console && !console.closed)
+ {
console.closeWindow(null);
+ }
cleanup();
close();
}
-
+
protected function getActiveStepItem():StepItem
{
- for each (var s:StepItem in _installationSteps) {
- if (s.status == StepItem.ACTIVE) {
+ for each (var s:StepItem in _installationSteps)
+ {
+ if (s.status == StepItem.ACTIVE)
+ {
return s;
}
}
return null;
}
-
+
protected function clickLogo(event:MouseEvent):void
{
navigateToURL(new URLRequest(Constants.APACHE_FLEX_URL));
}
-
+
protected function getStepItemFromStepLabel(stepLabel:String):StepItem
{
- for each (var s:StepItem in _installationSteps) {
- if (s.label == stepLabel) {
+ for each (var s:StepItem in _installationSteps)
+ {
+ if (s.label == stepLabel)
+ {
return s;
}
}
-
+
return null;
}
-
+
protected function getInstallerComponentFromLabel(key:String):InstallerComponentVO
{
- for each (var s:InstallerComponentVO in _installerComponentsDataProvider) {
- if (s.key == key) {
+ for each (var s:InstallerComponentVO in _installerComponentsDataProvider)
+ {
+ if (s.key == key)
+ {
return s;
}
}
-
+
return null;
}
-
+
protected function updateActivityStep(stepLabel:String, status:String):void
{
var step:StepItem = getStepItemFromStepLabel(stepLabel);
-
- if (step) {
+
+ if (step)
+ {
step.status = status;
}
}
-
+
private function isDirectoryEmpty(dir:File):Boolean
{
var result:Boolean;
-
+
var filesArray:Array = dir.getDirectoryListing();
-
+
var length:int = filesArray.length;
result = length == 0;
- if (length == 1) {
+ if (length == 1)
+ {
var explodedPath:Array = File(filesArray[0]).url.split("/");
-
+
// the .DS_Store file doesn't bother anybody, so we can safely ignore it.
// also ignore local.properties so you an override install settings
result = explodedPath[explodedPath.length - 1] == ".DS_Store" ||
- explodedPath[explodedPath.length - 1] == "local.properties";
+ explodedPath[explodedPath.length - 1] == "local.properties";
}
-
+
return result;
}
-
+
protected function showDisclaimer():void
{
var request:URLRequest = new URLRequest(Constants.APACHE_FLEX_URL + Constants.DISCLAIMER_PATH);
-
+
navigateToURL(request, "_blank");
}
-
+
protected function installComponentsList_creationCompleteHandler(event:FlexEvent):void
{
installComponentsList.addEventListener(InstallItemSelectionEvent.INSTALL_ITEM_SELECTION_CHANGED, handleInstallPermissionChange);
}
-
+
private function onMouseRoll(event:MouseEvent):void
{
- if (event.type == MouseEvent.MOUSE_OVER) {
+ if (event.type == MouseEvent.MOUSE_OVER)
+ {
event.target.styleName = "linkTextHover";
- } else {
+ }
+ else
+ {
event.target.styleName = "linkText";
}
}
-
+
private function getFlexVersionBuildString():String
{
var flexPropertiesFile:File = _flexHomeDir.resolvePath("flex-sdk-description.xml");
@@ -3235,8 +3555,7 @@
fs.close();
return contents.version + "." + contents.build;
}
-
- ]]></fx:Script>
+ ]]></fx:Script>
<fx:Declarations>
<s:Sine id="ease"/>
@@ -3371,7 +3690,7 @@
</s:layout>
<s:HGroup verticalAlign="middle">
<s:Label text="{_viewResourceConstants.INFO_SELECT_FLEX}" width="200" fontFamily="openSansBold" />
- <s:DropDownList id="flexVersion"
+ <s:DropDownList id="flexVersionSelectList"
dataProvider="{FLEX_VERSIONS}"
labelField="label"
width="200"
diff --git a/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as b/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as
new file mode 100644
index 0000000..04db1ef
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as
@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.packageflexsdk.model
+{
+ public class AvailableFlexVersion
+ {
+
+ public var shortName:String;
+ public var fileName:String;
+ public var label:String;
+ public var version:String;
+ public var path:String;
+ public var overlay:Boolean;
+ public var prefix:String;
+ public var legacy:Boolean;
+ public var nocache:Boolean;
+ public var needsAIR:Boolean;
+ public var needsFlash:Boolean;
+ public var devBuild:Boolean;
+ public var icon:String;
+
+ public function AvailableFlexVersion()
+ {
+ }
+
+ }
+}
diff --git a/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as b/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as
new file mode 100644
index 0000000..16be550
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as
@@ -0,0 +1,84 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.packageflexsdk.model
+{
+ import mx.collections.ArrayCollection;
+
+ import org.apache.flex.utilities.common.Constants;
+
+ public class FlexVersions extends ArrayCollection
+ {
+ public var defaultVersion:int = -1;
+ private var _os:OS = new OS();
+
+ public function FlexVersions()
+ {
+
+ }
+
+ public function showDevBuilds():void
+ {
+ this.filterFunction = null;
+ this.refresh();
+ }
+
+ public function hideDevBuilds():void
+ {
+ this.filterFunction = devBuildFilterFunction;
+ this.refresh();
+ }
+
+ public function processXML(flexData:XMLList):void
+ {
+ for each (var productData:XML in flexData)
+ {
+ var productVersionList:XMLList = productData.versions.children();
+
+ for each (var productVersion:XML in productVersionList)
+ {
+ var newFlexVersion:AvailableFlexVersion = new AvailableFlexVersion();
+ newFlexVersion.shortName = productVersion.@file.toString();
+ newFlexVersion.fileName = newFlexVersion.shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC);
+ newFlexVersion.version = newFlexVersion.fileName.substr(productData.@prefix.toString().length).split("-")[0];
+ newFlexVersion.label = productData.@name.toString() + " " + productVersion.@version.toString();
+ newFlexVersion.path = productVersion.@path.toString();
+ newFlexVersion.devBuild = productVersion.@dev.toString() == "true";
+ newFlexVersion.legacy = productVersion.@legacy.toString() == "true";
+ newFlexVersion.nocache = productVersion.@nocache.toString() == "true";
+ newFlexVersion.overlay = productData.@overlay.toString() == "true";
+ newFlexVersion.needsAIR = productData.@needsAIR.toString() != "false";
+ newFlexVersion.needsFlash = productData.@needsFlash.toString() != "false";
+ newFlexVersion.icon = productData.@icon.toString();
+ if (productVersion["@default"].length() == 1)
+ {
+ defaultVersion = this.length;
+ }
+ this.addItem(newFlexVersion);
+ }
+ }
+
+ }
+
+ private function devBuildFilterFunction(o:Object):Boolean
+ {
+ return !o.devBuild;
+ }
+ }
+}
diff --git a/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml b/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml
new file mode 100644
index 0000000..9485e89
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.adobe.com/flex/spark"
+ backgroundColor="0xDDDDDD" close="closeUp()"
+ title="Download Cache Configuration"
+ width="400"
+ height="130">
+
+ <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>