-Revisited the event flow for the db part
-start to track and save the window position on exit
-refactored a bit
-DB autoupdate on going

git-svn-id: https://svn.apache.org/repos/asf/flex/whiteboard@1448510 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
index f80cec2..f72559d 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
@@ -7,7 +7,7 @@
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

     import org.apache.flex.utilities.developerToolSuite.infrastructure.message.LaunchUIMessage;

     import org.apache.flex.utilities.developerToolSuite.presentation.graphic.settings.SettingsWindow;

     import org.spicefactory.parsley.core.context.Context;

@@ -43,28 +43,53 @@
         [CommandComplete]

         public function validateJavaPathCommandError(trigger:ValidateJavaPathMessage):void {

             _javaCompleted = true;

-            if(_antCompleted && _mavenCompleted && _cygwinCompleted)

-                launchUI();

+            checkValidationsCompleted();

+        }

+

+        [CommandError]

+        public function validateJavaPathCommand(trigger:ValidateJavaPathMessage):void {

+            _javaCompleted = true;

+            checkValidationsCompleted();

         }

 

         [CommandComplete]

+        public function validateAntPathCommand(trigger:ValidateAntPathMessage):void {

+            _antCompleted = true;

+            checkValidationsCompleted();

+        }

+

+        [CommandError]

         public function validateAntPathCommandError(trigger:ValidateAntPathMessage):void {

             _antCompleted = true;

-            if (_javaCompleted && _mavenCompleted && _cygwinCompleted)

-                launchUI();

+            checkValidationsCompleted();

         }

 

         [CommandComplete]

-        public function validateMavenPathCommandError(trigger:ValidateMavenPathMessage):void {

+        public function validateMavenPathCommand(trigger:ValidateMavenPathMessage):void {

             _mavenCompleted = true;

-            if (_antCompleted && _javaCompleted && _cygwinCompleted)

-                launchUI();

+            checkValidationsCompleted();

+        }

+

+        [CommandError]

+        public function validateMavenPathCommandError(fault:Error, trigger:ValidateMavenPathMessage):void {

+            _mavenCompleted = true;

+            checkValidationsCompleted();

         }

 

         [CommandComplete]

-        public function validateCygwinPathCommandError(trigger:ValidateCygwinPathMessage):void {

+        public function validateCygwinPathCommand(trigger:ValidateCygwinPathMessage):void {

             _cygwinCompleted = true;

-            if (_antCompleted && _mavenCompleted && _javaCompleted)

+            checkValidationsCompleted();

+        }

+

+        [CommandError]

+        public function validateCygwinPathCommandError(fault:Error, trigger:ValidateCygwinPathMessage):void {

+            _cygwinCompleted = true;

+            checkValidationsCompleted();

+        }

+

+        private function checkValidationsCompleted():void {

+            if (_antCompleted && _mavenCompleted && _javaCompleted && _cygwinCompleted)

                 launchUI();

         }

 

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
index 70a0025..3d10df1 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
@@ -53,10 +53,12 @@
         </s:VGroup>

     </s:helpContent>

     <fx:Script><![CDATA[

+        import flash.filesystem.File;

+

         import mx.events.FlexEvent;

 

         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.SaveSettingMessage;

-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;

+        import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;

 

         import spark.events.TextOperationEvent;

 

@@ -72,7 +74,7 @@
         [Bindable]

         public var helpLabelResourcesString:String;

         [Bindable]

-        public var helpUrlText:String

+        public var helpUrlText:String;

         [Bindable]

         public var helpUrl:String;

         [Bindable]

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
index 6f41dc5..fd811b9 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
@@ -6,6 +6,8 @@
     [Bindable]

     public interface ISettingsModel {

 

+        function get dbVersion():uint;

+

         function get appBounds():String;

 

         function get appDisplayState():String;

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
index 1842e9c..0d472d5 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
@@ -23,16 +23,10 @@
 

     public class SettingModel implements ISettingsModel {

 

-        public function get availableLanguages():ArrayCollection {

-            return new ArrayCollection(LocaleUtil.AVAILABLE_LANGUAGES);

-        }

-

-        public function get currentLanguage():Object {

-            return LocaleUtil.getDefaultLanguage(_locale);

-        }

-

         private var _environmentVariables:Dictionary;

 

+        private var _dbVersion:uint;

+

         private var _locale:String;

 

         private var _JAVA_HOME:String;

@@ -51,6 +45,23 @@
         private var _appBounds:String;

         private var _appDisplayState:String;

 

+        public function get availableLanguages():ArrayCollection {

+            return new ArrayCollection(LocaleUtil.AVAILABLE_LANGUAGES);

+        }

+

+        public function get currentLanguage():Object {

+            return LocaleUtil.getDefaultLanguage(_locale);

+        }

+

+        public function get dbVersion():uint {

+            return _dbVersion;

+        }

+

+        [Bindable]

+        public function set dbVersion(value:uint):void {

+            _dbVersion = value;

+        }

+

         public function get environmentVariables():Dictionary {

             return _environmentVariables;

         }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
index d42a7ee..1ecfdf9 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
@@ -18,13 +18,12 @@
     import flash.data.SQLResult;

     import flash.data.SQLStatement;

     import flash.errors.SQLError;

-    import flash.net.Responder;

 

     import mx.logging.ILogger;

     import mx.utils.ObjectUtil;

 

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.database.ApplicationDB;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.database.ApplicationDB;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class AbstractDBCommand {

 

@@ -42,28 +41,27 @@
         protected var stmt:SQLStatement = new SQLStatement();

 

         protected function executeAsync():void {

-            if (!db.DBReady) {

-                db.connect();

-            }

-

-            prepareSql();

+            db.connect(prepareSql);

         }

 

         protected function prepareSql():void {

-            var responder:Responder = new Responder(result, error);

             stmt.text = sql;

-            db.executeSqlStatement(stmt, responder);

+            db.executeSqlStatement(stmt, result, error);

         }

 

-        protected function result(result:SQLResult):void {

+        protected function result(result:SQLResult, terminateCommand:Boolean = true):void {

             var resultMessage:String = (result.data != null) ? ObjectUtil.toString(result.data) : result.rowsAffected + " affected row(s)";

-            log.debug("Successfully executed shell: " + resultMessage);

-            callback(new CommandCallBackResult(result));

+            log.debug("Successfully executed DB Command: {0}", resultMessage);

+            if (terminateCommand) {

+                callback(new CommandCallBackResult(result));

+            }

         }

 

-        protected function error(error:SQLError):void {

-            log.error("Error executing shell: " + ObjectUtil.toString(error));

-            callback(new CommandCallBackError(error.message, error.detailID));

+        protected function error(error:SQLError, terminateCommand:Boolean = true):void {

+            log.error("Error executing DB Command: {0}", ObjectUtil.toString(error));

+            if (terminateCommand) {

+                callback(new CommandCallBackError(error.message, error.detailID));

+            }

         }

     }

 }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
index d4f0b25..9f84706 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
@@ -21,8 +21,8 @@
 

     import mx.logging.ILogger;

 

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class AbstractShellCommand {

 

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
index 7c9bd93..fa653e0 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
@@ -38,7 +38,7 @@
         override protected function prepareSql():void {

             ResourceManager.getInstance().localeChain = LocaleUtil.getOrderedLocalChain(_msg.locale);

             settings.locale = _msg.locale;

-            sql = "UPDATE settings SET value='" + _msg.locale + "' WHERE name='locale';";

+            sql = "UPDATE setting SET value='" + _msg.locale + "' WHERE name='locale';";

 

             super.prepareSql();

         }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
index 24d864d..22214a6 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
@@ -35,11 +35,11 @@
         }

 

         override protected function prepareSql():void {

-            sql = "SELECT name, value FROM settings;";

+            sql = "SELECT name, value FROM setting;";

             super.prepareSql();

         }

 

-        override protected function result(result:SQLResult):void {

+        override protected function result(result:SQLResult, terminateCommand:Boolean = true):void {

             var row:Object;

 

             if (result.data) {

@@ -56,10 +56,11 @@
             ResourceManager.getInstance().localeChain = LocaleUtil.getOrderedLocalChain(settings.locale);

             dispatch(new ApplicationReadyMessage());

 

-            var resultMessage:String = (result.data != null) ? ObjectUtil.toString(result.data) : result.rowsAffected + " affected row(s)";

-            log.debug("Successfully executed shell: " + resultMessage);

+            log.debug("Got settings: {0}", ObjectUtil.toString(result.data));

 

-            callback(new CommandCallBackResult(settings));

+            if (terminateCommand) {

+                callback(new CommandCallBackResult(settings));

+            }

         }

     }

 }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
index a7ce5c0..da0346f 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
@@ -16,6 +16,7 @@
  */

 package org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command {

     import flash.data.SQLConnection;

+    import flash.data.SQLResult;

     import flash.data.SQLSchemaResult;

     import flash.data.SQLStatement;

     import flash.data.SQLTableSchema;

@@ -26,9 +27,9 @@
     import mx.utils.ObjectUtil;

 

     import org.apache.flex.utilities.developerToolSuite.LocaleUtil;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.database.ApplicationDB;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.database.ApplicationDB;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.InitApplicationMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

 

     public class InitDBCommand {

 

@@ -38,8 +39,15 @@
 

         private static var _conn:SQLConnection;

 

-        private static const SETTINGS_TABLE_SQL:String = "create table if not exists settings(id integer primary key autoincrement, name text, value text);";

-        private static var settingsDataSql:String;

+        private static const DB_VERSION_SQL:String = "SELECT value FROM setting WHERE name='dbVersion'";

+

+        private static const SETTING_TABLE_SQL:String = "create table if not exists setting(id integer primary key autoincrement, name text, value text);";

+        private static var settingDataSql:String;

+

+        private static const PROJECT_TABLE_SQL:String = "create table if not exists project(id integer primary key autoincrement, name text, location text, vcsType text, flexSdkVersion text, airSdkVersion text, fpVersion text, creationDate numeric);";

+        private static var projectDataSql:String;

+

+        private var _dbVersion:uint;

 

         public function execute(msg:InitApplicationMessage):void {

             _conn = new SQLConnection();

@@ -48,17 +56,44 @@
             var folder:File = File.applicationStorageDirectory;

             var dbFile:File = folder.resolvePath(ApplicationDB.DATABASE_NAME);

 

-            LOG.debug("Connecting DB: " + ApplicationDB.DATABASE_NAME);

+            LOG.debug("Connecting DB: {0}", ApplicationDB.DATABASE_NAME);

             _conn.open(dbFile);

 

             if (!settingsTableCreated()) {

                 buildDatabaseTables();

+            } else {

+                _dbVersion = getDBVersion();

+                if (_dbVersion < ApplicationDB.DB_VERSION)

+                updateSchema();

             }

 

             _conn.close();

-            LOG.debug("Closing DB: " + ApplicationDB.DATABASE_NAME);

+            LOG.debug("Closing DB: {0}", ApplicationDB.DATABASE_NAME);

 

-            callback(true);

+            callback(CommandCallBack.DEFAULT_RESULT);

+        }

+

+        private function updateSchema():void {

+            LOG.debug("Updating DB Schema from version {0} to {1}", _dbVersion, ApplicationDB.DB_VERSION);

+        }

+

+        private function getDBVersion():uint {

+

+            LOG.debug("looking for dbVersion");

+

+            var getDbVersionStmt:SQLStatement = new SQLStatement();

+            getDbVersionStmt.sqlConnection = _conn;

+            getDbVersionStmt.text = DB_VERSION_SQL;

+            getDbVersionStmt.execute();

+

+            var dbVersionResult:SQLResult = getDbVersionStmt.getResult();

+            if (dbVersionResult.data && dbVersionResult.data.length) {

+                LOG.debug("DB version is {0}", dbVersionResult.data[0].value);

+                return parseInt(dbVersionResult.data[0].value);

+            }

+

+            // Shouldn't happen.

+            return 0;

         }

 

         private function settingsTableCreated():Boolean {

@@ -73,7 +108,7 @@
             var schema:SQLSchemaResult = _conn.getSchemaResult();

 

             for each(var currentTable:SQLTableSchema in schema.tables) {

-                if (currentTable.name == "settings") {

+                if (currentTable.name == "setting") {

                     LOG.debug("Schema was already created");

                     return true;

                 }

@@ -87,12 +122,14 @@
             try {

                 LOG.debug("Start schema creation");

                 _conn.begin();

+

                 createSettingsTable();

                 insertSettingsTable();

+

                 _conn.commit();

                 LOG.debug("Schema creation ok");

             } catch (err:SQLError) {

-                LOG.error("Error during schema creation: " + ObjectUtil.toString(err) + " : Rolling back !");

+                LOG.error("Error during schema creation: {0}\n:: Rolling back !", ObjectUtil.toString(err));

                 _conn.rollback();

             }

             ;

@@ -101,28 +138,29 @@
                 var stmtCreateSettingsTable:SQLStatement;

                 stmtCreateSettingsTable = new SQLStatement();

                 stmtCreateSettingsTable.sqlConnection = _conn;

-                stmtCreateSettingsTable.text = SETTINGS_TABLE_SQL;

+                stmtCreateSettingsTable.text = SETTING_TABLE_SQL;

                 stmtCreateSettingsTable.execute();

             }

 

             function insertSettingsTable():void {

                 LOG.debug("Inserting data");

-                prepareSettingsData();

+                prepareInsertSettingsData();

                 var stmtInsertSettingsTable:SQLStatement;

                 stmtInsertSettingsTable = new SQLStatement();

                 stmtInsertSettingsTable.sqlConnection = _conn;

-                stmtInsertSettingsTable.text = settingsDataSql;

+                stmtInsertSettingsTable.text = settingDataSql;

                 stmtInsertSettingsTable.execute();

             }

 

-            function prepareSettingsData():void {

-                settingsDataSql = "INSERT INTO 'settings' SELECT '1' AS 'id', 'locale' AS 'name', '" + LocaleUtil.getDefaultLanguage().data + "' AS 'value' ";

-                settingsDataSql += "UNION SELECT '2', 'appDisplayState', '' ";

-                settingsDataSql += "UNION SELECT '3', 'appBounds', '' ";

-                settingsDataSql += "UNION SELECT '4', 'JAVA_HOME', '' ";

-                settingsDataSql += "UNION SELECT '5', 'ANT_HOME', '' ";

-                settingsDataSql += "UNION SELECT '6', 'MAVEN_HOME', '' ";

-                settingsDataSql += "UNION SELECT '7', 'CYGWIN_HOME', '';";

+            function prepareInsertSettingsData():void {

+                settingDataSql = "INSERT INTO 'setting' SELECT '1' AS 'id', 'dbVersion' AS 'name', '1' AS 'value' ";

+                settingDataSql += "UNION SELECT '2', 'locale', '" + LocaleUtil.getDefaultLanguage().data + "' ";

+                settingDataSql += "UNION SELECT '3', 'appDisplayState', '' ";

+                settingDataSql += "UNION SELECT '4', 'appBounds', '' ";

+                settingDataSql += "UNION SELECT '5', 'JAVA_HOME', '' ";

+                settingDataSql += "UNION SELECT '6', 'ANT_HOME', '' ";

+                settingDataSql += "UNION SELECT '7', 'MAVEN_HOME', '' ";

+                settingDataSql += "UNION SELECT '8', 'CYGWIN_HOME', '';";

             }

         }

     }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
index 33f0474..d3b718d 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
@@ -35,7 +35,7 @@
 

         override protected function prepareSql():void {

             settings[_msg.name] = _msg.value;

-            sql = "UPDATE settings SET value='" + _msg.value + "' WHERE name='" + _msg.name + "';";

+            sql = "UPDATE setting SET value='" + _msg.value + "' WHERE name='" + _msg.name + "';";

 

             super.prepareSql();

         }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
index 8e94af8..7d784fd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
@@ -34,9 +34,9 @@
         override protected function prepareSql():void {

             var classInfo:ClassInfo = ClassInfo.forInstance(_msg.settings);

             sql = "";

-            for (var i:uint; i < classInfo.getProperties().length; i++) {

+            for (var i:uint=0; i < classInfo.getProperties().length; i++) {

                 var property:Property = classInfo.getProperties()[i] as Property;

-                sql += "UPDATE settings SET value='" + _msg.settings[property.name] + "' WHERE name='" + property.name + "';";

+                sql += "UPDATE setting SET value='" + _msg.settings[property.name] + "' WHERE name='" + property.name + "';";

             }

 

             super.prepareSql();

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
index 4e16cb6..edaba60 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
@@ -23,7 +23,7 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateAntPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateAntPathCommand extends AbstractShellCommand {

 

@@ -37,14 +37,14 @@
         private var _done:Boolean;

 

         public function execute(msg:ValidateAntPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             _msg = msg;

             settings.antEnabled = false;

             executeCommand();

         }

 

         override protected function executeCommand():void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));

 

             var file:File;

 

@@ -66,7 +66,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);

                 return;

             }

-            ;

 

             var ant:String = shell.formatPath(file.resolvePath("bin/ant.bat").nativePath);

 

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
index c740a75..bc22f4f 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
@@ -22,8 +22,8 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateCygwinPathCommand {

 

@@ -36,17 +36,15 @@
 

         public var callback:Function;

 

-        private var _done:Boolean;

-

         public function execute(msg:ValidateCygwinPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             _msg = msg;

             settings.cygwinEnabled = false;

             executeCommand();

         }

 

         protected function executeCommand():void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));

 

             var file:File;

 

@@ -71,8 +69,8 @@
                 callback(CommandCallBack.DEFAULT_ERROR);

                 return;

             }

-            ;

-            LOG.debug("Ending Command with result: " + file.nativePath);

+

+            LOG.debug("Ending Command with result: {0}", file.nativePath);

             callback(CommandCallBack.DEFAULT_RESULT);

         }

     }

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
index 92511ab..331b40c 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
@@ -22,7 +22,7 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateGitPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateGitPathCommand extends AbstractShellCommand {

 

@@ -34,7 +34,7 @@
         private var _done:Boolean;

 

         public function execute(msg:ValidateGitPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             settings.gitEnabled = false;

             executeCommand();

         }

@@ -64,8 +64,6 @@
             } else {

                 result(CommandCallBack.DEFAULT_ERROR);

             }

-

-            return;

         }

 

         override protected function outputDataHandler(event:ProgressEvent):void {

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
index 0fe8716..139f0cc 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
@@ -23,7 +23,7 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateJavaPathCommand extends AbstractShellCommand {

 

@@ -37,14 +37,14 @@
         private var _done:Boolean;

 

         public function execute(msg:ValidateJavaPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             _msg = msg;

             settings.javaEnabled = false;

             executeCommand();

         }

 

         override protected function executeCommand():void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));

 

             var file:File;

 

@@ -66,7 +66,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);

                 return;

             }

-            ;

 

             var java:String = shell.formatPath(file.resolvePath("bin/java.exe").nativePath);

 

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
index 9db2af1..3ca12fd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
@@ -23,7 +23,7 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateMavenPathCommand extends AbstractShellCommand {

 

@@ -37,7 +37,7 @@
         private var _done:Boolean;

 

         public function execute(msg:ValidateMavenPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             _msg = msg;

             settings.mavenEnabled = false;

             executeCommand();

@@ -45,7 +45,7 @@
 

         override protected function executeCommand():void {

 

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));

 

             var file:File;

 

@@ -67,7 +67,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);

                 return;

             }

-            ;

 

             var mvn:String = shell.formatPath(file.resolvePath("bin/mvn.bat").nativePath);

 

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
index b638362..adbc8bd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
@@ -22,7 +22,7 @@
 

     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;

     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateSvnPathMessage;

-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;

+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;

 

     public class ValidateSvnPathCommand extends AbstractShellCommand {

 

@@ -34,7 +34,7 @@
         private var _done:Boolean;

 

         public function execute(msg:ValidateSvnPathMessage):void {

-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));

+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));

             settings.svnEnabled = false;

             executeCommand();

         }

@@ -64,8 +64,6 @@
             } else {

                 result(CommandCallBack.DEFAULT_ERROR);

             }

-

-            return;

         }

 

         override protected function outputDataHandler(event:ProgressEvent):void {

diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
index 11d8f33..393be72 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
@@ -17,10 +17,10 @@
 -->
 <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:parsley="http://www.spicefactory.org/parsley"
                        title="Apache Flex Developer Tool Suite"
                        width="800" height="550"
+                       displayStateChange="displayStateChangeHandler(event)"
                        closing="closingHandler(event)">
 
     <fx:Declarations>
@@ -49,19 +49,16 @@
         import mx.logging.targets.TraceTarget;
         import mx.managers.PopUpManager;
 
+        import org.apache.flex.utilities.developerToolSuite.application.config.SettingsContext;
+        import org.apache.flex.utilities.developerToolSuite.executor.application.config.ExecutorContext;
+        import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
         import org.apache.flex.utilities.developerToolSuite.executor.domain.ISettingsModel;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.config.ExecutorContext;
         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ApplicationReadyMessage;
         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.InitApplicationMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.SaveSettingMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateAntPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
         import org.apache.flex.utilities.developerToolSuite.infrastructure.event.ModalWindowEvent;
+        import org.apache.flex.utilities.developerToolSuite.infrastructure.message.ApplicationExitReadyMessage;
         import org.apache.flex.utilities.developerToolSuite.infrastructure.message.LaunchUIMessage;
-        import org.apache.flex.utilities.developerToolSuite.presentation.config.SettingsContext;
+        import org.apache.flex.utilities.developerToolSuite.infrastructure.message.RequestExitApplicationMessage;
         import org.apache.flex.utilities.developerToolSuite.presentation.graphic.menu.ApplicationMenu;
 
         [Inject]
@@ -75,10 +72,11 @@
         public var dispatch:Function;
 
         private var alert:Alert;
+        private var appBounds:Rectangle;
 
         [Init]
         public function init():void {
-            addLog();
+            addLogTargets();
             LogUtil.getLogger(this).info('Application initialization');
 
             dispatch(new InitApplicationMessage());
@@ -92,18 +90,18 @@
             PopUpManager.removePopUp(alert);
             menu = applicationMenu;
 
-            if (applicationSettings.appDisplayState) {
-                if (applicationSettings.appDisplayState == NativeWindowDisplayState.MAXIMIZED) {
-                    nativeWindow.maximize();
-                } else {
-                    nativeWindow.restore();
-                    if (applicationSettings.appBounds) {
-                        var bounds:Array = applicationSettings.appBounds.split(",");
-                        nativeWindow.bounds = new Rectangle(bounds[0], bounds[1], bounds[2], bounds[3]);
-                    }
-                }
+            if (applicationSettings.appBounds) {
+                var bounds:Array = applicationSettings.appBounds.split(",");
+                appBounds = nativeWindow.bounds = new Rectangle(bounds[0], bounds[1], bounds[2], bounds[3]);
             } else {
-                nativeWindow.bounds = new Rectangle(120, 120, 1200, 825);
+                appBounds = nativeWindow.bounds = new Rectangle(120, 120, 1200, 825);
+            }
+
+            if (applicationSettings.appDisplayState) {
+                (applicationSettings.appDisplayState == NativeWindowDisplayState.MAXIMIZED) ? nativeWindow.maximize() : nativeWindow.restore();
+                if (applicationSettings.appDisplayState == NativeWindowDisplayState.NORMAL) {
+                    addMoveAndResizeListeners();
+                }
             }
 
             LogUtil.getLogger(this).info('Application ready');
@@ -121,12 +119,48 @@
             menu = applicationMenu;
         }
 
-        private function closingHandler(event:Event):void {
-            dispatch(new SaveSettingMessage("appBounds", nativeWindow.x + "," + nativeWindow.y + "," + nativeWindow.width + "," + nativeWindow.height));
-            dispatch(new SaveSettingMessage("appDisplayState", nativeWindow.displayState));
+        private function displayStateChangeHandler(event:NativeWindowDisplayStateEvent):void {
+            if (event.afterDisplayState == NativeWindowDisplayState.NORMAL) {
+                addMoveAndResizeListeners();
+            } else {
+                removeMoveAndResizeListeners();
+            }
         }
 
-        private function addLog():void {
+        private function addMoveAndResizeListeners():void {
+            nativeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, moveAndResizeHandler);
+            nativeWindow.addEventListener(NativeWindowBoundsEvent.MOVE, moveAndResizeHandler);
+
+        }
+
+        private function removeMoveAndResizeListeners():void {
+            nativeWindow.removeEventListener(NativeWindowBoundsEvent.RESIZE, moveAndResizeHandler);
+            nativeWindow.removeEventListener(NativeWindowBoundsEvent.MOVE, moveAndResizeHandler);
+
+        }
+
+        private function moveAndResizeHandler(event:NativeWindowBoundsEvent):void {
+            appBounds = event.afterBounds;
+        }
+
+        private function closingHandler(event:Event):void {
+            LogUtil.getLogger(this).info('Application Exit requested');
+            event.preventDefault();
+
+            var settingsToSave:Object = {};
+            settingsToSave.appBounds = appBounds.x + "," + appBounds.y + "," + appBounds.width + "," + appBounds.height;
+            settingsToSave.appDisplayState = nativeWindow.displayState;
+
+            dispatch(new RequestExitApplicationMessage(settingsToSave));
+        }
+
+        [MessageHandler]
+        public function applicationExitReady(msg:ApplicationExitReadyMessage):void {
+            LogUtil.getLogger(this).info('Application Exiting');
+            this.exit();
+        }
+
+        private static function addLogTargets():void {
             var parsleyLogger:TraceTarget = new TraceTarget();
             parsleyLogger.filters = ["org.spicefactory.*", "mx.*"];
             parsleyLogger.level = LogEventLevel.ERROR;
diff --git a/fthomas/developerToolSuite/trunk/pom.xml b/fthomas/developerToolSuite/trunk/pom.xml
index acf3aa2..bcaf0c0 100644
--- a/fthomas/developerToolSuite/trunk/pom.xml
+++ b/fthomas/developerToolSuite/trunk/pom.xml
@@ -27,7 +27,7 @@
 
     <properties>
         <flexmojos.version>6.0-SNAPSHOT</flexmojos.version>
-        <flex.version>4.8.0.1359417</flex.version>
+        <flex.version>4.10.0-SNAPSHOT</flex.version>
         <flex.debug>true</flex.debug>
     </properties>
 
@@ -74,7 +74,7 @@
                             <value>'${project.version}'</value>
                         </property>
                     </defines>
-                    <adlCommand>D://SDKsSources/air/3.5/bin/adl.exe</adlCommand>
+                    <adlCommand>D://SDKsSources/air/3.4/bin/adl.exe</adlCommand>
                 </configuration>
                 <dependencies>
                     <dependency>
@@ -83,6 +83,12 @@
                         <version>${flex.version}</version>
                         <type>pom</type>
                     </dependency>
+                    <dependency>
+                        <groupId>com.adobe.air.compiler</groupId>
+                        <artifactId>adt</artifactId>
+                        <version>3.4</version>
+                        <type>jar</type>
+                    </dependency>
                 </dependencies>
             </plugin>
         </plugins>