missing files from the last commit
git-svn-id: https://svn.apache.org/repos/asf/flex/whiteboard@1448512 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/application/config/SettingsContext.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/application/config/SettingsContext.mxml
new file mode 100644
index 0000000..bf82bee
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/application/config/SettingsContext.mxml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<fx:Object xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:parsley="http://www.spicefactory.org/parsley"
+ xmlns:menu="org.apache.flex.utilities.developerToolSuite.presentation.behavior.menu.*">
+
+ <fx:Declarations>
+ <parsley:DynamicObject type="{GeneralMenu}"/>
+
+ <parsley:MapCommand type="{MenuActionCommand}"/>
+ <parsley:MapCommand type="{LaunchUICommand}"/>
+ <parsley:MapCommand type="{ExitUICommand}"/>
+
+ <menu:ApplicationMenuPM/>
+ </fx:Declarations>
+
+ <fx:Script><![CDATA[
+ import org.apache.flex.utilities.developerToolSuite.infrastructure.command.ExitUICommand;
+ import org.apache.flex.utilities.developerToolSuite.infrastructure.command.LaunchUICommand;
+ import org.apache.flex.utilities.developerToolSuite.infrastructure.command.MenuActionCommand;
+ import org.apache.flex.utilities.developerToolSuite.presentation.graphic.menu.GeneralMenu;
+ ]]></fx:Script>
+</fx:Object>
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/ExitUICommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/ExitUICommand.as
new file mode 100644
index 0000000..502fb84
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/ExitUICommand.as
@@ -0,0 +1,52 @@
+package org.apache.flex.utilities.developerToolSuite.infrastructure.command {
+ import flash.data.SQLResult;
+ import flash.errors.SQLError;
+
+ import mx.utils.ObjectUtil;
+
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.AbstractDBCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.CommandCallBackError;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.CommandCallBackResult;
+ import org.apache.flex.utilities.developerToolSuite.infrastructure.message.ApplicationExitReadyMessage;
+ import org.apache.flex.utilities.developerToolSuite.infrastructure.message.RequestExitApplicationMessage;
+
+ public class ExitUICommand extends AbstractDBCommand {
+
+ private var _msg:RequestExitApplicationMessage;
+
+ public function execute(msg:RequestExitApplicationMessage):void {
+ log.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+ this._msg = msg;
+ executeAsync();
+ }
+
+ override protected function prepareSql():void {
+ sql = "";
+ for (var property:String in _msg.settings) {
+ sql += "UPDATE setting SET value='" + _msg.settings[property] + "' WHERE name='" + property + "';";
+ }
+
+ super.prepareSql();
+ }
+
+ override protected function result(result:SQLResult, terminateCommand:Boolean = true):void {
+ super.result(result, false);
+
+ dispatch(new ApplicationExitReadyMessage());
+
+ if (terminateCommand) {
+ callback(new CommandCallBackResult(result));
+ }
+ }
+
+ override protected function error(error:SQLError, terminateCommand:Boolean = true):void {
+ super.error(error, false);
+
+ dispatch(new ApplicationExitReadyMessage());
+
+ if (terminateCommand) {
+ callback(new CommandCallBackError(error.message, error.detailID));
+ }
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/ApplicationExitReadyMessage.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/ApplicationExitReadyMessage.as
new file mode 100644
index 0000000..f206666
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/ApplicationExitReadyMessage.as
@@ -0,0 +1,6 @@
+package org.apache.flex.utilities.developerToolSuite.infrastructure.message {
+ public class ApplicationExitReadyMessage {
+ public function ApplicationExitReadyMessage() {
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/RequestExitApplicationMessage.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/RequestExitApplicationMessage.as
new file mode 100644
index 0000000..1ded05a
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/message/RequestExitApplicationMessage.as
@@ -0,0 +1,11 @@
+package org.apache.flex.utilities.developerToolSuite.infrastructure.message {
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.SaveSettingsMessage;
+
+ public class RequestExitApplicationMessage{
+ public var settings:Object;
+
+ public function RequestExitApplicationMessage(settings:Object) {
+ this.settings = settings;
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/config/ExecutorContext.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/config/ExecutorContext.mxml
new file mode 100644
index 0000000..76a65a0
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/config/ExecutorContext.mxml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<fx:Object xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:parsley="http://www.spicefactory.org/parsley"
+ xmlns:database="org.apache.flex.utilities.developerToolSuite.executor.application.database.*"
+ xmlns:domain="org.apache.flex.utilities.developerToolSuite.executor.domain.*"
+ xmlns:nativeprocess="org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.*">
+
+ <fx:Declarations>
+ <database:ApplicationDB/>
+
+ <parsley:MapCommand messageType="{InitApplicationMessage}">
+ <parsley:CommandSequence>
+ <parsley:Command type="{InitDBCommand}"/>
+ <parsley:Command type="{GetEnvironmentVariablesCommand}"/>
+ <parsley:Command type="{GetSettingsFromDBCommand}"/>
+ </parsley:CommandSequence>
+ </parsley:MapCommand>
+
+
+ <parsley:MapCommand type="{ChangeLanguageCommand}"/>
+ <parsley:MapCommand type="{SaveSettingsCommand}"/>
+ <parsley:MapCommand type="{SaveSettingCommand}"/>
+ <parsley:MapCommand type="{ValidateJavaPathCommand}"/>
+ <parsley:MapCommand type="{ValidateAntPathCommand}"/>
+ <parsley:MapCommand type="{ValidateMavenPathCommand}"/>
+ <parsley:MapCommand type="{ValidateSvnPathCommand}"/>
+ <parsley:MapCommand type="{ValidateGitPathCommand}"/>
+ <parsley:MapCommand type="{ValidateCygwinPathCommand}"/>
+
+ <domain:SettingModel id="applicationModel"/>
+ </fx:Declarations>
+
+ <fx:Script><![CDATA[
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ChangeLanguageCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.GetEnvironmentVariablesCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.GetSettingsFromDBCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.InitDBCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.SaveSettingCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.SaveSettingsCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateAntPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateCygwinPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateGitPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateJavaPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateMavenPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command.ValidateSvnPathCommand;
+ import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.InitApplicationMessage;
+ ]]></fx:Script>
+</fx:Object>
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/database/ApplicationDB.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/database/ApplicationDB.as
new file mode 100644
index 0000000..1a5ba51
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/database/ApplicationDB.as
@@ -0,0 +1,139 @@
+/**
+ 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.utilities.developerToolSuite.executor.application.database {
+ import flash.data.SQLConnection;
+ import flash.data.SQLResult;
+ import flash.data.SQLStatement;
+ import flash.errors.SQLError;
+ import flash.events.SQLErrorEvent;
+ import flash.events.SQLEvent;
+ import flash.filesystem.File;
+ import flash.net.Responder;
+
+ import mx.logging.ILogger;
+ import mx.utils.ObjectUtil;
+
+ import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
+
+ public class ApplicationDB {
+
+ public static const DB_VERSION:uint = 1;
+
+ private static var LOG:ILogger = LogUtil.getLogger(ApplicationDB);
+
+ public static const DATABASE_NAME:String = "DTSDB.db";
+ private static var _conn:SQLConnection;
+
+ private var _isReady:Boolean;
+ private var _isBusy:Boolean;
+
+ private var _callbacks:Array = [];
+ private var _resultCallback:Function;
+ private var _errorCallback:Function;
+
+ public function connect(callback:Function):void {
+
+ _callbacks.push(callback);
+
+ if (!_isReady && !_isBusy) {
+ LOG.debug("Connecting async DB: {0}", ApplicationDB.DATABASE_NAME);
+ _conn = new SQLConnection();
+
+ _conn.addEventListener(SQLEvent.OPEN, openHandler);
+ _conn.addEventListener(SQLEvent.CLOSE, closedHandler);
+ _conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
+
+ // The database file is in the application storage directory
+ var folder:File = File.applicationStorageDirectory;
+ var dbFile:File = folder.resolvePath(DATABASE_NAME);
+
+ _isBusy = true;
+ _conn.openAsync(dbFile);
+ } else executeNextCallback();
+ }
+
+ protected function openHandler(event:SQLEvent):void {
+ _isReady = true;
+ _isBusy = false;
+ LOG.debug("the database was opened successfully");
+ executeNextCallback();
+ }
+
+ protected function close():void {
+ LOG.debug("Closing async DB: {0}", ApplicationDB.DATABASE_NAME);
+ _isReady = false;
+ _isBusy = false;
+ _conn.close();
+ }
+
+ protected function closedHandler(event:SQLEvent):void {
+ LOG.debug("the database was closed successfully");
+ }
+
+ protected function errorHandler(event:SQLErrorEvent):void {
+ LOG.error("Error executing DB Command: {0}", ObjectUtil.toString(event.error));
+ _isReady = false;
+ _isBusy = false;
+ }
+
+ public function executeSqlStatement(stmt:SQLStatement, resultCallback:Function, errorCallback:Function):void {
+ _resultCallback = resultCallback;
+ _errorCallback = errorCallback;
+
+ _isBusy = true;
+ stmt.sqlConnection = _conn;
+ stmt.execute(-1, new Responder(result, error));
+ }
+
+ private function result(result:SQLResult):void {
+ _isBusy = false
+ if (_resultCallback) {
+ _resultCallback(result);
+ _resultCallback = null;
+ }
+ executeNextCallback();
+ }
+
+ private function error(error:SQLError):void {
+ LOG.error("Error executing DB Command: {0}", ObjectUtil.toString(error));
+ _isBusy = false;
+ if (_errorCallback) {
+ _errorCallback(error);
+ _errorCallback = null;
+ }
+ executeNextCallback();
+ }
+
+ private function executeNextCallback():void {
+ if (_isReady && !_isBusy) {
+ if (_callbacks.length > 0) {
+ _callbacks.pop()();
+ } else {
+ close();
+ }
+ }
+ }
+
+ public function get isReady():Boolean {
+ return _isReady;
+ }
+
+ public function get isBusy():Boolean {
+ return _isBusy;
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/nativeProcess/NativeShellHelper.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/nativeProcess/NativeShellHelper.as
new file mode 100644
index 0000000..f5183c1
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/nativeProcess/NativeShellHelper.as
@@ -0,0 +1,217 @@
+package org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess {
+ import flash.desktop.NativeProcess;
+ import flash.desktop.NativeProcessStartupInfo;
+ import flash.events.Event;
+ import flash.events.EventDispatcher;
+ import flash.events.IOErrorEvent;
+ import flash.events.NativeProcessExitEvent;
+ import flash.events.ProgressEvent;
+ import flash.filesystem.File;
+ import flash.system.Capabilities;
+
+ import mx.logging.ILogger;
+
+ import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
+
+ public class NativeShellHelper extends EventDispatcher {
+
+ // Use trace during tests as AIR thru Maven doesn't support resource xml config files for logging.
+ private static var LOG:ILogger;
+
+ private static var _gcLocker:GCLocker;
+
+ private var _process:NativeProcess;
+ private var _isRunning:Boolean;
+
+ private var _isLogEnabled:Boolean;
+
+ public function NativeShellHelper() {
+ super();
+ if (!LOG) {
+ LOG = LogUtil.getLogger(NativeShellHelper);
+ }
+ if (!_gcLocker) {
+ _gcLocker = new GCLocker();
+ }
+ _process = new NativeProcess();
+ }
+
+ public function get process():NativeProcess {
+ return _process;
+ }
+
+ public function get isRunning():Boolean {
+ return _isRunning;
+ }
+
+ public function run(command:Vector.<String> = null, shell:String = null):void {
+
+ if (_isRunning) {
+ throw new Error("NativeProcessHelper is currently busy");
+ return;
+ }
+ _isRunning = true;
+
+ //Avoid the garbage collection
+ _gcLocker.lock(this);
+
+ if (!shell) {
+ shell = getShellPath();
+ }
+
+ LOG.debug("Executing: {0} {1}", shell, command.join(" "));
+
+ var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
+
+ var file:File = File.applicationDirectory.resolvePath(shell);
+ nativeProcessStartupInfo.executable = file;
+ nativeProcessStartupInfo.arguments = command;
+
+ _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, dispatch2, false, 0, true);
+ _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, dispatch2, false, 0, true);
+ _process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, dispatch2, false, 0, true);
+ _process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, dispatch2, false, 0, true);
+ _process.addEventListener(NativeProcessExitEvent.EXIT, exitHandler, false, -100, true);
+ _process.start(nativeProcessStartupInfo);
+ }
+
+ public function logMessages():void {
+ if (_isLogEnabled) {
+ return;
+ }
+ _isLogEnabled = true;
+ _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputDataLogHandler, false, 0, true);
+ _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, errorDataLogHandler, false, 0, true);
+ _process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, IOErrorLogHandler, false, 0, true);
+ _process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, IOErrorLogHandler, false, 0, true);
+ _process.addEventListener(NativeProcessExitEvent.EXIT, exitLogHandler, false, 0, true);
+ }
+
+ private function errorDataLogHandler(event:ProgressEvent):void {
+ trace(_process.standardError.readUTFBytes(_process.standardError.bytesAvailable));
+ //LOG.error(_process.standardError.readUTFBytes(_process.standardError.bytesAvailable));
+ }
+
+ private function exitLogHandler(event:NativeProcessExitEvent):void {
+ trace("Process exited with " + event.exitCode);
+ //LOG.info("Process exited with " + event.exitCode);
+
+ }
+
+ private function IOErrorLogHandler(event:IOErrorEvent):void {
+ trace(event.toString());
+ //LOG.error(event.toString());
+ }
+
+ private function outputDataLogHandler(event:ProgressEvent):void {
+ var output:String = _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable);
+ trace("Output: " + output);
+ //LOG.info("Output: " + output);
+ }
+
+ private function dispatch2(e:Event):void {
+ this.dispatchEvent(e);
+ }
+
+ private function exitHandler(e:Event):void {
+ _gcLocker.release(this);
+ _process = null;
+ _isRunning = false;
+ this.dispatchEvent(e);
+ }
+
+ public static function get OS():String {
+ var os:String;
+
+ if (Capabilities.os.toLowerCase().indexOf("win") > -1) {
+ os = "win";
+ } else if (Capabilities.os.toLowerCase().indexOf("mac") > -1) {
+ os = "mac";
+ } else if (Capabilities.os.toLowerCase().indexOf("linux") > -1) {
+ os = "linux";
+ }
+
+ return os;
+ }
+
+ public function get OS():String {
+ return NativeShellHelper.OS;
+ }
+
+ public function getShellPath():String {
+ var shellPath:String;
+
+ if (OS == "win") {
+ shellPath = "C:/Windows/System32/cmd.exe";
+ } else if (OS == "mac") {
+ shellPath = "/Applications/Utilities/Terminal.app";
+ } else if (OS == "linux") {
+
+ var file:File;
+ try {
+ file = new File("/bin/bash");
+ if (file.exists) {
+ shellPath = file.nativePath;
+ }
+ } catch (err:Error) {
+ }
+ ;
+
+ if (!shellPath) {
+ try {
+ file = new File("/bin/bsh");
+ if (file.exists) {
+ shellPath = file.nativePath;
+ }
+ } catch (err:Error) {
+ }
+ ;
+ }
+
+ if (!shellPath) {
+ try {
+ file = new File("/bin/csh");
+ if (file.exists) {
+ shellPath = file.nativePath;
+ }
+ } catch (err:Error) {
+ }
+ ;
+ }
+ }
+ if (!shellPath) {
+ throw new Error("Unsupported System");
+ }
+
+ return shellPath;
+ }
+
+ public static function formatPath(path:String):String {
+ return path.replace(/\\/g, "/");
+ }
+
+ public function formatPath(path:String):String {
+ return NativeShellHelper.formatPath(path);
+ }
+ }
+}
+internal class GCLocker {
+
+ private var _lockedRefs:Array;
+
+ public function GCLocker() {
+ _lockedRefs = [];
+ }
+
+ public function release(ref:*):void {
+ var i:int = _lockedRefs.indexOf(ref);
+
+ if (i >= 0) {
+ _lockedRefs.splice(i, 1);
+ }
+ }
+
+ public function lock(ref:*):void {
+ _lockedRefs[_lockedRefs.length] = ref;
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/util/LogUtil.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/util/LogUtil.as
new file mode 100644
index 0000000..cc00919
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/application/util/LogUtil.as
@@ -0,0 +1,13 @@
+package org.apache.flex.utilities.developerToolSuite.executor.application.util {
+ import avmplus.getQualifiedClassName;
+
+ import mx.logging.ILogger;
+ import mx.logging.Log;
+
+ public class LogUtil {
+ public static function getLogger(category:*):ILogger {
+ var className:String = getQualifiedClassName(category).replace("::", ".");
+ return Log.getLogger(className);
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ProjectDefinition.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ProjectDefinition.as
new file mode 100644
index 0000000..6bf3487
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ProjectDefinition.as
@@ -0,0 +1,26 @@
+package org.apache.flex.utilities.developerToolSuite.executor.domain {
+
+ [Bindable]
+ public class ProjectDefinition {
+
+ public var flexSdkVersion:String;
+ public var airSdkVersion:String;
+ public var fpVersion:String;
+
+ public var name:String;
+ public var location:String;
+ public var vcsType:VCSType;
+
+ public var id:uint;
+ public var creationDate:Date;
+
+ public function ProjectDefinition(name:String, location:String, vcsType:VCSType, flexSdkVersion:String, airSdkVersion:String, fpVersion:String) {
+ this.name = name;
+ this.location = location;
+ this.vcsType = vcsType;
+ this.flexSdkVersion = flexSdkVersion;
+ this.airSdkVersion = airSdkVersion;
+ this.fpVersion = fpVersion;
+ }
+ }
+}
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/VCSType.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/VCSType.as
new file mode 100644
index 0000000..d72ca75
--- /dev/null
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/VCSType.as
@@ -0,0 +1,19 @@
+package org.apache.flex.utilities.developerToolSuite.executor.domain {
+
+ public class VCSType {
+
+ public static const SVN:VCSType = new VCSType(new PrivateConstructor(), "SVN");
+ public static const GIT:VCSType = new VCSType(new PrivateConstructor(), "GIT");
+
+ private var _name:String;
+
+ public function VCSType(cantInstantiate:PrivateConstructor, name:String) {
+ _name = name;
+ }
+
+ public function get name():String {
+ return _name;
+ }
+ }
+}
+internal class PrivateConstructor {};