blob: 76592968bacd59c766322fadb330f9145a4957c9 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:sas="http://www.springactionscript.org/mxml/config"
preinitialize="windowedapplication1_preinitializeHandler(event)"
applicationComplete="windowedapplication1_applicationCompleteHandler(event)"
title="Apache Flex Installer Locale Editor"
xmlns:view="org.apache.flex.runtimelocale.view.*"
currentState="appInitState"
close="windowedapplication1_closeHandler(event)">
<s:states>
<s:State name="appInitState"/>
<s:State name="appReadyState"/>
</s:states>
<fx:Script>
<![CDATA[
import flash.utils.setTimeout;
import mx.events.FlexEvent;
import mx.utils.ObjectUtil;
import org.apache.flex.runtimelocale.context.MainConfiguration;
import org.apache.flex.runtimelocale.event.ApplicationStatusEvent;
import org.apache.flex.runtimelocale.event.InitializeApplicationEvent;
import org.apache.flex.runtimelocale.event.SaveConfigurationEvent;
import org.apache.flex.runtimelocale.event.ShowHelpRequestEvent;
import org.apache.flex.runtimelocale.event.ShowLocaleFileSelectorViewEvent;
import org.as3commons.logging.api.ILogSetup;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.LOGGER_FACTORY;
import org.as3commons.logging.api.getClassLogger;
import org.as3commons.logging.setup.SimpleTargetSetup;
import org.as3commons.logging.setup.target.AirFileTarget;
import org.as3commons.logging.setup.target.TraceTarget;
import org.as3commons.logging.setup.target.mergeTargets;
import org.as3commons.logging.util.xml.xmlToSetup;
private static const logger:ILogger = getClassLogger(Main);
protected function handleUncaught(event:UncaughtErrorEvent):void {
if (applicationContext) {
trace(event.error);
applicationContext.eventBus.dispatchEvent(new ApplicationStatusEvent(ApplicationStatusEvent.APPLICATION_ERROR_STATUS, "An expected error occured: " + event.text, "Unexpected error"));
}
}
protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void {
pruneLogFiles();
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, handleUncaught);
statusText.setStyle("color", 0x008800);
statusText.setStyle("fontWeight", "bold");
//Pfff, ugly, but I want to center the popup after the window has been
//maximised, and this was the only way I could get it do so.
//(I secretly suck)
setTimeout(function():void {
applicationContext.eventBus.dispatchEvent(new InitializeApplicationEvent(InitializeApplicationEvent.APP_INITIALIZE));
setUpLogging();
applicationContext.eventBus.dispatchEvent(new ShowLocaleFileSelectorViewEvent(ShowLocaleFileSelectorViewEvent.SHOW_LOCALE_FILE_SELECTOR));
if (applicationContext.propertiesProvider.getProperty("showhelp") == "true") {
applicationContext.eventBus.dispatchEvent(new ShowHelpRequestEvent(ShowHelpRequestEvent.SHOW_HELP_REQUEST));
}
}, 500);
}
protected function windowedapplication1_closeHandler(event:Event):void {
applicationContext.eventBus.dispatchEvent(new SaveConfigurationEvent(SaveConfigurationEvent.SAVE_CONFIGURATION_REQUEST));
}
protected function windowedapplication1_preinitializeHandler(event:FlexEvent):void {
maximize();
}
private function compareCreationDates(f1:File, f2:File):Number {
return ObjectUtil.dateCompare(f1.creationDate, f2.creationDate);
}
private function pruneLogFiles():void {
var listing:Array = File.applicationStorageDirectory.getDirectoryListing();
var logListing:Array = [];
for each (var file:File in listing) {
if (file.extension == "log") {
logListing[logListing.length] = file;
}
}
if (logListing.length > 5) {
logListing.sort(compareCreationDates, Array.NUMERIC);
var len:int = logListing.length - 5;
var logFile:File;
for (var i:int = 0; i < len; ++i) {
logFile = logListing[i];
logFile.deleteFile();
logger.info("Deleted old logfile: {0}", [logFile.nativePath]);
}
}
}
private function setUpLogging():void {
if (applicationContext.propertiesProvider.getProperty('logging') == "true") {
var file:File = File.applicationDirectory.resolvePath("logging-config.xml");
if (file.exists) {
try {
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
fileStream.position = 0;
var content:String = fileStream.readMultiByte(fileStream.bytesAvailable, "utf-8");
var xml:XML = new XML(content);
var mergedSetup:ILogSetup = xmlToSetup(xml, {}, {console: new TraceTarget(), file: new AirFileTarget()});
LOGGER_FACTORY.setup = mergedSetup;
} catch (e:Error) {
LOGGER_FACTORY.setup = new SimpleTargetSetup(mergeTargets(new TraceTarget(), new AirFileTarget()));
logger.error("Error encountered while reading XML logging configuration: {0}", [e.message]);
logger.info("Logging defaults used");
} finally {
fileStream.close();
}
} else {
LOGGER_FACTORY.setup = new SimpleTargetSetup(mergeTargets(new TraceTarget(), new AirFileTarget()));
logger.info("Logging defaults used");
}
logger.info("Application initializing");
pruneLogFiles();
}
}
//
{
MainConfiguration;
}
]]>
</fx:Script>
<fx:Declarations>
<sas:MXMLApplicationContext configurations="{[MainConfiguration]}"
id="applicationContext"/>
</fx:Declarations>
<view:MainView id="mainView"
width="100%"
height="100%"
includeIn="appReadyState"/>
</s:WindowedApplication>