http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SessionManager.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SessionManager.java 
b/debugger/src/main/java/flash/tools/debugger/SessionManager.java
new file mode 100644
index 0000000..e67e68b
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SessionManager.java
@@ -0,0 +1,390 @@
+/*
+ * 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 flash.tools.debugger;
+
+import java.io.IOException;
+
+/**
+ * A SessionManager controls connection establishment and preferences 
+ * for all debugging sessions with the Flash Player.
+ * 
+ * To begin a new debugging session:
+ * 
+ * <ol>
+ * <li> Get a <code>SessionManager</code> from 
<code>Bootstrap.sessionManager()</code> </li>
+ * <li> Call <code>SessionManager.startListening()</code> </li>
+ * <li> If you want to have the API launch the Flash Player for you, call
+ *      <code>SessionManager.launch()</code>.  If you want to launch the Flash 
Player
+ *      and then have the API connect to it, then launch the Flash Player and 
then
+ *      call <code>SessionManager.accept()</code>. <em>Note:</em> 
<code>launch()</code> 
+ *      and <code>accept()</code> are both blocking calls, so you probably 
don't want
+ *      to call them from your main UI thread. </li>
+ * <li> Finally, call <code>SessionManager.stopListening()</code>.
+ * </ol>
+ */
+public interface SessionManager
+{
+       /**
+        * The preferences are set using the setPreference() method, and
+        * take effect immediately thereafter.
+        */
+
+       /**
+        * The value used for <code>$accepttimeout</code> controls how long (in
+        * milliseconds) <code>accept()</code> waits before timing out. The
+        * default value for this preference is 120000 (2 minutes).
+        */
+       public static final String PREF_ACCEPT_TIMEOUT                          
= "$accepttimeout"; //$NON-NLS-1$
+
+       /**
+        * Valid values for <code>$urimodification</code> are 0 (off) and 1 
(on).
+        * The default value is 1 (on), which allows this API to modify the URI
+        * passed to <code>launch()</code> as necessary for creating a 
debuggable
+        * version of an MXML file.
+        */
+       public static final String PREF_URI_MODIFICATION                        
= "$urimodification"; //$NON-NLS-1$
+
+       /**
+        *-----------------------------------------------------------------
+        * The following are Session specific preferences.  These can be
+        * modified in this class, resulting in all future sessions using
+        * the values or they can be modified at the session level via
+        * Session.setPreference().
+        *-----------------------------------------------------------------
+        */
+
+       /**
+        * <code>$responsetimeout</code> is used to determine how long (in
+        * milliseconds) the session will wait, for a player response before 
giving
+        * up on the request and throwing an Exception.
+        */
+       public static final String PREF_RESPONSE_TIMEOUT                        
= "$responsetimeout"; //$NON-NLS-1$
+       
+       /**
+        * <code>$sockettimeout</code> is used to determine how long (in
+        * milliseconds) the session will wait on a Socket recv call.
+        * On timeout, we do not immediately abort the session, instead we
+        * write a squelch message to player. If the write succeeds, we assume
+        * everything is normal.This helps identify broken connections that 
+        * are relevant when performing WiFi debugging. 
+        * This is -1 by default to indicate no timeout 
+        * (for backward compatibility).
+        */
+       public static final String PREF_SOCKET_TIMEOUT                  = 
"$sockettimeout"; //$NON-NLS-1$
+
+       /**
+        * <code>$contextresponsetimeout</code> is used to determine how long 
(in
+        * milliseconds) the session will wait for a player response from a 
request
+        * to get context, before giving up on the request and throwing an
+        * Exception.
+        */
+       public static final String PREF_CONTEXT_RESPONSE_TIMEOUT        = 
"$contextresponsetimeout"; //$NON-NLS-1$
+
+       /**
+        * <code>$getvarresponsetimeout</code> is used to determine how long (in
+        * milliseconds) the session will wait, for a player response to a get
+        * variable request before giving up on the request and throwing an
+        * Exception.
+        */
+       public static final String PREF_GETVAR_RESPONSE_TIMEOUT         = 
"$getvarresponsetimeout"; //$NON-NLS-1$
+
+       /**
+        * <code>$setvarresponsetimeout</code> is the amount of time (in
+        * milliseconds) that a setter in the user's code will be given to 
execute,
+        * before the player interrupts it with a ScriptTimeoutError. Default 
value
+        * is 5000 ms.
+        */
+       public static final String PREF_SETVAR_RESPONSE_TIMEOUT         = 
"$setvarresponsetimeout"; //$NON-NLS-1$
+
+       /**
+        * <code>$swfswdloadtimeout<code> is used to determine how long (in 
milliseconds)
+        * the session will wait, for a player response to a swf/swd load 
+        * request before giving up on the request and throwing an Exception.
+        */
+       public static final String PREF_SWFSWD_LOAD_TIMEOUT                     
= "$swfswdloadtimeout"; //$NON-NLS-1$
+
+       /**
+        * <code>$suspendwait</code> is the amount of time (in milliseconds) 
that
+        * a Session will wait for the Player to suspend, after a call to
+        * <code>suspend()</code>.
+        */
+       public static final String PREF_SUSPEND_WAIT                            
= "$suspendwait"; //$NON-NLS-1$
+
+       /**
+        * <code>$invokegetters</code> is used to determine whether a getter
+        * property is invoked or not when requested via 
<code>getVariable()</code>
+        * The default value is for this to be enabled.
+        */
+       public static final String PREF_INVOKE_GETTERS                          
= "$invokegetters"; //$NON-NLS-1$
+
+       public static final String PLAYER_SUPPORTS_GET                          
= "$playersupportsget"; //$NON-NLS-1$
+
+       /**
+        * <code>$hiervars</code> is used to determine whether the members of
+        * a variable are shown in a hierchical way.
+        */
+       public static final String PREF_HIERARCHICAL_VARIABLES          = 
"$hiervars"; //$NON-NLS-1$
+
+       /**
+        * The value used for <code>$connecttimeout</code> controls how long (in
+        * milliseconds) <code>connect()</code> waits before timing out. The
+        * default value for this preference is 120000 (2 minutes).
+        */
+       public static final String PREF_CONNECT_TIMEOUT                         
= "$connecttimeout"; //$NON-NLS-1$
+
+        /**
+     * The value used for <code>$connectwaitinterval</code> controls how long 
(in
+     * milliseconds) we wait between subsequent <code>connect()</code> calls. 
The
+     * default value for this preference is 250.
+     */
+    public static final String PREF_CONNECT_WAIT_INTERVAL = 
"$connectwaitinterval"; //$NON-NLS-1$
+
+    /**
+     * The value used for <code>$connectretryattempts</code> controls how many 
times
+     * the debugger retries connecting to the application. This is time bound 
by 
+     * <code>$connecttimeout</code>. The default value for this preference is 
-1 and
+     * indicates that the debugger should retry till the timeout period has 
elapsed.
+     * Setting this to zero will disable the retry mechanism.
+     */
+    public static final String PREF_CONNECT_RETRY_ATTEMPTS = 
"$connectretryattempts"; //$NON-NLS-1$
+    
+       /**
+        * Set preference for this manager and for subsequent Sessions 
+        * that are initiated after this call.
+        * 
+        * If an invalid preference is passed, it will be silently ignored.
+        * @param pref preference name, one of the strings listed above
+        * @param value value to set for preference
+        */
+       public void setPreference(String pref, int value);
+
+       /**
+        * Set preference for this manager and for subsequent Sessions 
+        * that are initiated after this call.
+        * 
+        * If an invalid preference is passed, it will be silently ignored.
+        * @param pref preference name, one of the strings listed above
+        * @param value value to set for preference
+        */
+       public void setPreference(String pref, String value);
+
+       /**
+        * Return the value of a particular preference item
+        * 
+        * @param pref preference name, one of the strings listed above
+        * @throws NullPointerException if pref does not exist
+        */
+       public int getPreference(String pref) throws NullPointerException;
+
+       /**
+        * Listens for Player attempts to open a debug session. This method 
must be
+        * called prior to <code>accept()</code> being invoked.
+        * 
+        * @throws IOException
+        *             if opening the server side socket fails
+        */
+       public void startListening() throws IOException;
+
+       /**
+        * Stops listening for new Player attempts to open a debug session. The
+        * method DOES NOT terminate currently connected sessions, but will 
cause
+        * threads blocked in <code>accept</code> to throw SocketExceptions.
+        */
+       public void stopListening() throws IOException;
+
+       /**
+        * Is this object currently listening for Debug Player connections 
+        * @return TRUE currently listening 
+        */
+       public boolean isListening();
+
+       /**
+        * Launches a Player using the given string as a URI, as defined by 
RFC2396.
+        * It is expected that the operating system will be able to launch the
+        * appropriate player application given this URI.
+        * <p>
+        * For example "http://localhost:8100/flex/my.mxml"; or for a local file 
on
+        * Windows, "file://c:/my.swf"
+        * <p>
+        * This call will block until a session with the newly launched player 
is
+        * created.
+        * <p>
+        * It is the caller's responsibility to ensure that no other thread is
+        * blocking in <code>accept()</code>, since that thread will gain 
control
+        * of this session.
+        * <p>
+        * Before calling <code>launch()</code>, you should first call
+        * <code>supportsLaunch()</code>. If <code>supportsLaunch()</code>
+        * returns false, then you will have to tell the user to manually 
launch the
+        * Flash player.
+        * <p>
+        * Also, before calling <code>launch()</code>, you must call
+        * <code>startListening()</code>.
+        * 
+        * @param uri
+        *            which will launch a Flash player under running OS. For
+        *            Flash/Flex apps, this can point to either a SWF or an HTML
+        *            file. For AIR apps, this must point to the application.xml
+        *            file for the application.
+        * @param airLaunchInfo
+        *            If trying to launch an AIR application, this argument 
must be
+        *            specified; it gives more information about how to do the
+        *            launch. If trying to launch a regular web-based Flash or 
Flex
+        *            application, such as one that will be in a browser or in 
the
+        *            standalone Flash Player, this argument should be
+        *            <code>null</code>.
+        * @param forDebugging
+        *            if <code>true</code>, then the launch is for the purposes
+        *            of debugging. If <code>false</code>, then the launch is
+        *            simply because the user wants to run the movie but not 
debug
+        *            it; in that case, the return value of this function will 
be
+        *            <code>null</code>.
+        * @param waitReporter
+        *            a progress monitor to allow accept() to notify its parent 
how
+        *            long it has been waiting for the Flash player to connect 
to
+        *            it. May be <code>null</code> if the caller doesn't need to
+        *            know how long it's been waiting.
+        * @param launchNotification
+        *            a notifier to notify the caller about ADL Exit Code.
+        *            Main usage is for ADL Exit Code 1 (Successful invocation 
of an 
+        *            already running AIR application. ADL exits immediately).
+        *            May be <code>null</code> if no need to listen ADL. 
+        *            Will only be called if forDebugging is false.  (If 
forDebugging
+        *            is true, error conditions are handled by throwing an 
exception.)
+        *                        The callback will be called on a different 
thread.
+        * @return a Session to use for debugging, or null if 
forDebugging==false.
+        *         The return value is not used to indicate an error -- 
exceptions
+        *         are used for that. If this function returns without throwing 
an
+        *         exception, then the return value will always be non-null if
+        *         forDebugging==true, or null if forDebugging==false.
+        * @throws BindException
+        *             if <code>isListening()</code> == false
+        * @throws FileNotFoundException
+        *             if file cannot be located
+        * @throws CommandLineException
+        *             if the program that was launched exited unexpectedly. 
This
+        *             will be returned, for example, when launching an AIR
+        *             application, if adl exits with an error code.
+        *             CommandLineException includes functions to return any 
error
+        *             text that may have been sent to stdout/stderr, and the 
exit
+        *             code of the program.
+        * @throws IOException
+        *             see Runtime.exec()
+        */
+       public Session launch(String uri, AIRLaunchInfo airLaunchInfo,
+                       boolean forDebugging, IProgress waitReporter, 
ILaunchNotification launchNotification) throws IOException;
+
+       /**
+        * Returns information about the Flash player which will be used to run 
the
+        * given URI.
+        * 
+        * @param uri
+        *            The URI which will be passed to <code>launch()</code> -- 
for
+        *            example, <code>http://flexserver/mymovie.mxml</code> or
+        *            <code>c:\mymovie.swf</code>. If launching an AIR app, this
+        *            should point to the app's *-app.xml file.
+        * @param airLaunchInfo
+        *            If launching an AIR app, this should, if possible, contain
+        *            info about the version of AIR being launched, but it can 
be
+        *            null if you don't have that information. If launching a
+        *            web-based app, this should be null.
+        * @return a {@link Player} which can be used to determine information 
about
+        *         the player -- for example, whether it is a debugger-enabled
+        *         player. Returns <code>null</code> if the player cannot be
+        *         determined. <em>Important:</em> There are valid situations in
+        *         which this will return <code>null</code>
+        */
+       public Player playerForUri(String uri, AIRLaunchInfo airLaunchInfo);
+
+       /**
+        * Returns whether this platform supports the <code>launch()</code>
+        * command; that is, whether the debugger can programmatically launch 
the
+        * Flash player. If this function returns false, then the debugger will 
have
+        * to tell the user to manually launch the Flash player.
+        * 
+        * @return true if this platform supports the <code>launch()</code>
+        *         command.
+        */
+       public boolean supportsLaunch();
+
+       /**
+        * Blocks until the next available player debug session commences, or 
until
+        * <code>getPreference(PREF_ACCEPT_TIMEOUT)</code> milliseconds pass.
+        * <p>
+        * Before calling <code>launch()</code>, you must call
+        * <code>startListening()</code>.
+        * <p>
+        * Once a Session is obtained, Session.bind() must be called prior to 
any
+        * other Session method.
+        * 
+        * @param waitReporter
+        *            a progress monitor to allow accept() to notify its parent 
how
+        *            long it has been waiting for the Flash player to connect 
to it.
+        *            May be <code>null</code> if the caller doesn't need to 
know how
+        *            long it's been waiting.
+        * @throws BindException
+        *             if isListening() == false
+        * @throws IOException -
+        *             see java.net.ServerSocket.accept()
+        */
+       public Session accept(IProgress waitReporter) throws IOException;
+
+       /**
+        * Tells the session manager to use the specified IDebuggerCallbacks for
+        * performing certain operatios, such as finding the Flash Player and
+        * launching the debug target. If you do not call this, the session 
manager
+        * will use a <code>DefaultDebuggerCallbacks</code> object.
+        */
+       public void setDebuggerCallbacks(IDebuggerCallbacks debugger);
+
+       /**
+        * Initiate a debug session by connecting to the specified port. Blocks 
+        * until a connection is made, or until 
+        * <code>getPreference(PREF_CONNECT_TIMEOUT)</code> milliseconds pass.
+        * <p>
+        * This work-flow is a reverse of <code>accept()</code> and suited for 
+        * cases where the player is unable to initiate the connection. The 
+        * player must be listening on the specified port for an incoming debug 
+        * connection. In addition, this function calls bind() on the session
+        * to determine if the handshake was successful so that retry works
+        * correctly even across port-forwards.
+        * <p> 
+        * Use <code>stopConnecting()</code> to cancel connect,
+        * <code>isConnecting()</code> to check if we are currently trying to 
+        * connect.
+        * 
+        * @param port - The port to connect to. See 
DProtocol.DEBUG_CONNECT_PORT.
+        * @param waitReporter
+        * @return A Session object on which bind() has already been called.
+        * @throws IOException - This may have a wrapped VersionException due 
to bind()
+        */
+       public Session connect(int port, IProgress waitReporter) throws 
IOException;
+       
+       /**
+        * Stops connecting to the Player for a debug session. The
+        * method DOES NOT terminate currently connected sessions, but will 
cause
+        * threads blocked in <code>connect</code> to throw SocketExceptions.
+        */
+       public void stopConnecting() throws IOException;
+
+       /**
+        * Is this object currently connecting to the Debug Player 
+        * @return TRUE currently connecting 
+        */
+       public boolean isConnecting();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SessionManager2.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SessionManager2.java 
b/debugger/src/main/java/flash/tools/debugger/SessionManager2.java
new file mode 100644
index 0000000..c1801d9
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SessionManager2.java
@@ -0,0 +1,184 @@
+/*
+ * 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 flash.tools.debugger;
+
+import java.io.IOException;
+
+public interface SessionManager2 extends SessionManager {
+       
+       /**
+        * This is, functionally, a clone of the SessionManager.launch() 
method. There are however some differences.
+        *      -This is to be called only for run launches. only for debug 
launches, the launch() method creates a Session and
+        * binds it to the launch and since the launch() method returns the 
Session, which will be null in a Run Launch case,
+        * we have no way of accessing the Process that was created for the 
launch.
+        *      -To enable auto termination of run launches, we need to know 
the system Process for us to terminate it when
+        * necessary.
+        *  -This method creates the process and binds a process listener to it 
and then returns the process.
+        *
+        * 
+        * @param uri
+        *            which will launch a Flash player under running OS. For
+        *            Flash/Flex apps, this can point to either a SWF or an HTML
+        *            file. For AIR apps, this must point to the application.xml
+        *            file for the application.
+        * @param airLaunchInfo
+        *            If trying to launch an AIR application, this argument 
must be
+        *            specified; it gives more information about how to do the
+        *            launch. If trying to launch a regular web-based Flash or 
Flex
+        *            application, such as one that will be in a browser or in 
the
+        *            standalone Flash Player, this argument should be
+        *            <code>null</code>.
+        * @param waitReporter
+        *            a progress monitor to allow accept() to notify its parent 
how
+        *            long it has been waiting for the Flash player to connect 
to
+        *            it. May be <code>null</code> if the caller doesn't need to
+        *            know how long it's been waiting.
+        * @param launchNotification
+        *            a notifier to notify the caller about ADL Exit Code.
+        *            Main usage is for ADL Exit Code 1 (Successful invocation 
of an 
+        *            already running AIR application. ADL exits immediately).
+        *            May be <code>null</code> if no need to listen ADL. 
+        *                        The callback will be called on a different 
thread.
+        * @return a Process to use for the run launch.
+        *         The return value is not used to indicate an error -- 
exceptions
+        *         are used for that. If this function returns without throwing 
an
+        *         exception, then the return value will always be non-null.
+        * @throws IOException
+        *             see Runtime.exec()
+        */
+       public Process launchForRun(String uri, AIRLaunchInfo airLaunchInfo,
+                        IProgress waitReporter, ILaunchNotification 
launchNotification) throws IOException;
+       /**
+        * This is, functionally, a clone of the SessionManager.launch() 
method. There are however some differences.
+        *      -This is to be called only for run launches. only for debug 
launches, the launch() method creates a Session and
+        * binds it to the launch and since the launch() method returns the 
Session, which will be null in a Run Launch case,
+        * we have no way of accessing the Process that was created for the 
launch.
+        *      -To enable auto termination of run launches, we need to know 
the system Process for us to terminate it when
+        * necessary.
+        *  -This method creates the process and binds a process listener to it 
and then returns the process.
+        *
+        *  - This method used the ILauncher instance passed to launch the 
application.
+        *  
+        * @param uri
+        *                which will launch a Flash player under running OS. For
+        *            Flash/Flex apps, this can point to either a SWF or an HTML
+        *            file. For AIR apps, this must point to the application.xml
+        *            file for the application.
+         * @param airLaunchInfo
+        *            If trying to launch an AIR application, this argument 
must be
+        *            specified; it gives more information about how to do the
+        *            launch. If trying to launch a regular web-based Flash or 
Flex
+        *            application, such as one that will be in a browser or in 
the
+        *            standalone Flash Player, this argument should be
+        *            <code>null</code>.
+        * @param waitReporter
+        *            a progress monitor to allow accept() to notify its parent 
how
+        *            long it has been waiting for the Flash player to connect 
to
+        *            it. May be <code>null</code> if the caller doesn't need to
+        *            know how long it's been waiting.
+        * @param launchNotification
+        *            a notifier to notify the caller about ADL Exit Code.
+        *            Main usage is for ADL Exit Code 1 (Successful invocation 
of an 
+        *            already running AIR application. ADL exits immediately).
+        *            May be <code>null</code> if no need to listen ADL. 
+        *                        The callback will be called on a different 
thread.
+        * @param launcher
+        *                        a launcher instance which will be used to 
launch.
+        * @return a Process to use for the run launch.
+        *         The return value is not used to indicate an error -- 
exceptions
+        *         are used for that. If this function returns without throwing 
an
+        *         exception, then the return value will always be non-null.
+        * @throws IOException
+        */
+       public Process launchForRun(String uri, AIRLaunchInfo airLaunchInfo,
+                        IProgress waitReporter, ILaunchNotification 
launchNotification, ILauncher launcher) throws IOException;
+       
+       
+       /**
+        * Launches the given string as a URI using the ILauncher Instance.
+        * 
+        * This API is to provide more flexibility to handle the Player launch 
in different platforms.
+        * 
+        * This call will block until a session with the newly launched player 
is
+        * created.
+        * <p>
+        * It is the caller's responsibility to ensure that no other thread is
+        * blocking in <code>accept()</code>, since that thread will gain 
control
+        * of this session.
+        * <p>
+        * Before calling <code>launch()</code>, you should first call
+        * <code>supportsLaunch()</code>. If <code>supportsLaunch()</code>
+        * returns false, then you will have to tell the user to manually 
launch the
+        * Flash player.
+        * <p>
+        * Also, before calling <code>launch()</code>, you must call
+        * <code>startListening()</code>.
+        * 
+        * @param uri
+        *            which will launch a Flash player under running OS. For
+        *            Flash/Flex apps, this can point to either a SWF or an HTML
+        *            file. For AIR apps, this must point to the application.xml
+        *            file for the application.
+        * @param airLaunchInfo
+        *            If trying to launch an AIR application, this argument 
must be
+        *            specified; it gives more information about how to do the
+        *            launch. If trying to launch a regular web-based Flash or 
Flex
+        *            application, such as one that will be in a browser or in 
the
+        *            standalone Flash Player, this argument should be
+        *            <code>null</code>.
+        * @param forDebugging
+        *            if <code>true</code>, then the launch is for the purposes
+        *            of debugging. If <code>false</code>, then the launch is
+        *            simply because the user wants to run the movie but not 
debug
+        *            it; in that case, the return value of this function will 
be
+        *            <code>null</code>.
+        * @param waitReporter
+        *            a progress monitor to allow accept() to notify its parent 
how
+        *            long it has been waiting for the Flash player to connect 
to
+        *            it. May be <code>null</code> if the caller doesn't need to
+        *            know how long it's been waiting.
+        * @param launchNotification
+        *            a notifier to notify the caller about ADL Exit Code.
+        *            Main usage is for ADL Exit Code 1 (Successful invocation 
of an 
+        *            already running AIR application. ADL exits immediately).
+        *            May be <code>null</code> if no need to listen ADL. 
+        *            Will only be called if forDebugging is false.  (If 
forDebugging
+        *            is true, error conditions are handled by throwing an 
exception.)
+        *                        The callback will be called on a different 
thread.
+        * @return a Session to use for debugging, or null if 
forDebugging==false.
+        *         The return value is not used to indicate an error -- 
exceptions
+        *         are used for that. If this function returns without throwing 
an
+        *         exception, then the return value will always be non-null if
+        *         forDebugging==true, or null if forDebugging==false.
+        * @throws BindException
+        *             if <code>isListening()</code> == false
+        * @throws FileNotFoundException
+        *             if file cannot be located
+        * @throws CommandLineException
+        *             if the program that was launched exited unexpectedly. 
This
+        *             will be returned, for example, when launching an AIR
+        *             application, if adl exits with an error code.
+        *             CommandLineException includes functions to return any 
error
+        *             text that may have been sent to stdout/stderr, and the 
exit
+        *             code of the program.
+        * @throws IOException 
+        *                              Exception during launch.
+        */
+       public Session launch(String uri, AIRLaunchInfo airLaunchInfo,
+                       boolean forDebugging, IProgress waitReporter, 
ILaunchNotification launchNotification, ILauncher launcher) throws IOException;
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SourceFile.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SourceFile.java 
b/debugger/src/main/java/flash/tools/debugger/SourceFile.java
new file mode 100644
index 0000000..6fe0978
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SourceFile.java
@@ -0,0 +1,124 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * A SourceFile contains information about a specific segment 
+ * of ActionScript source code.  The source code could be
+ * derived from a number of locations; an ActionScript file, a 
+ * snip-it of code from a frame, compiler generated code, etc.
+ */
+public interface SourceFile
+{
+       /**
+        * Base path for this filename, without the package-name portion.  For
+        * example, if class mx.controls.Button.as was in
+        * C:\flex\sdk\frameworks\mx\controls\Button.as, then getBasePath()
+        * would return "C:\flex\sdk\frameworks" (note that the "mx\controls"
+        * part would NOT be returned).
+        * @return base path, or null
+        */
+       public String getBasePath();
+
+       /**
+        * Get the package name portion of the path for this file. For example, 
if
+        * class mx.controls.Button.as was in
+        * C:\flex\sdk\frameworks\mx\controls\Button.as, then getPackageName() 
would
+        * return "mx\controls".
+        * 
+        * @return package name, or "" (never null)
+        */
+       public String getPackageName();
+
+       /**
+        * File name of this SourceFile.  In the case of a disk-based 
SourceFile,
+        * this is the same as the filename with no path, e.g. 'myfile.as'
+        * @return filename, or "" (never null)
+        */
+       public String getName();
+
+       /**
+        * Full path and file name, if its exists, for this SourceFile.  For
+        * disk-based SourceFiles, this is equivalent to
+        *     <code>getBasePath + slash + getPackageName() + slash + 
getName()</code>
+        * where "slash" is a platform-specific slash character.
+        * @return path, never null
+        */
+       public String getFullPath();
+
+       /**
+        * Raw, unprocessed file name for this SourceFile.
+        * @since As of Version 2
+        */
+       public String getRawName();
+
+       /**
+        * Returns the number of source lines in the given file
+        * @return -1 indicates an error.  Call getError() to 
+        * obtain specific reason code.
+        */
+       public int getLineCount();
+
+       /**
+        * Return a unique identifier for this SourceFile. 
+        */
+       public int getId();
+
+       /**
+        * Obtains the textual content of the given line
+        * from within a source file.  
+        * Line numbers start at 1 and go to getLineCount().
+        * 
+        * @return the line of source of the file.  Any carriage
+        *                 return and/or line feed are stripped from the
+        *                 end of the string.
+        */
+       public String getLine(int lineNum);
+
+       /**
+        *---------------------------------------------------
+        * WARNING:  The functions below will return null
+        *                       and/or 0 values while 
+        *                       Session.fileMetaDataLoaded() is false.
+        *---------------------------------------------------
+        */
+
+       /**
+        * Return the function name for a given line number, or 
<code>null</code>
+        * if not known or if the line matches more than one function.
+     * @since Version 3.
+        */
+       public String getFunctionNameForLine(Session s, int lineNum);
+
+       /**
+        * Return the line number for the given function name
+        * if it doesn't exists -1 is returned
+        */
+       public int getLineForFunctionName(Session s, String name);
+
+       /**
+        * Get a list of all function names for this SourceFile
+        */
+       public String[] getFunctionNames(Session s);
+
+       /**
+        * Return the offset within the SWF for a given line 
+        * number.
+        */
+       public int getOffsetForLine(int lineNum);
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SourceLocator.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SourceLocator.java 
b/debugger/src/main/java/flash/tools/debugger/SourceLocator.java
new file mode 100644
index 0000000..23d49d7
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SourceLocator.java
@@ -0,0 +1,51 @@
+/*
+ * 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 flash.tools.debugger;
+
+import java.io.InputStream;
+
+/**
+ * A callback interface which should be implemented by the client debugger
+ * (such as fdb), to locate source files.
+ * 
+ * This is only necessary if the client debugger wants the DJAPI to "own"
+ * the source code.  Zorn, for example, will probably *not* want to
+ * implement this interface, because Eclipse itself will load the source
+ * files from disk.
+ */
+public interface SourceLocator
+{
+       /**
+        * Callback from DJAPI to the debugger, to find a source file.
+        * Returns null if it can't find the file.
+        */
+    public InputStream locateSource(String path, String pkg, String name);
+
+       /**
+        * Returns a number which indicates how many times this SourceLocator's
+        * search algorithm has been changed since it was created.  For example,
+        * if a SourceLocator allows the user to change the list of directories
+        * that are searched, then each time the user changes that list of
+        * directories, the return value from getChangeCount() should change.
+        * 
+        * The DJAPI uses this in order to figure out if it should try again
+        * to look for a source file that it had previously been unable to
+        * find.
+        */
+       public int getChangeCount();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SuspendReason.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SuspendReason.java 
b/debugger/src/main/java/flash/tools/debugger/SuspendReason.java
new file mode 100644
index 0000000..b35c748
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SuspendReason.java
@@ -0,0 +1,48 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * Reasons for which the Flash Player will suspend itself
+ */
+public interface SuspendReason
+{
+       public static final int Unknown                 = 0;
+       
+       /** We hit a breakpoint */
+       public static final int Breakpoint      = 1;
+       
+       /** A watchpoint was triggered */
+       public static final int Watch                   = 2;
+       
+       /** A fault occurred */
+       public static final int Fault                   = 3;
+
+       public static final int StopRequest             = 4;
+
+       /** A step completed */
+       public static final int Step                    = 5;
+
+       public static final int HaltOpcode              = 6;
+       
+       /**
+        * Either a new SWF was loaded, or else one or more scripts (ABCs)
+        * from an existing SWF were loaded.
+        */
+       public static final int ScriptLoaded    = 7;
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SuspendedException.java
----------------------------------------------------------------------
diff --git 
a/debugger/src/main/java/flash/tools/debugger/SuspendedException.java 
b/debugger/src/main/java/flash/tools/debugger/SuspendedException.java
new file mode 100644
index 0000000..49c2308
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SuspendedException.java
@@ -0,0 +1,33 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * SuspendedException is thrown when the Player 
+ * is in a state for which the action cannot be performed.
+ */
+public class SuspendedException extends PlayerDebugException
+{
+       private static final long serialVersionUID = 1168900295788494483L;
+
+    @Override
+       public String getMessage()
+       {
+               return 
Bootstrap.getLocalizationManager().getLocalizedTextString("suspended"); 
//$NON-NLS-1$
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SwfInfo.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/SwfInfo.java 
b/debugger/src/main/java/flash/tools/debugger/SwfInfo.java
new file mode 100644
index 0000000..c1632a8
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/SwfInfo.java
@@ -0,0 +1,110 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * The SwfInfo object contains information relating to
+ * a particular swf file that was loaded by the Player.
+ * Each SWF file contains a list of actionscript source
+ * files from which execution is performed.
+ * 
+ * It is important to note 2 or more SWF files may contain
+ * multiple copies of the same source code.  From the 
+ * Player's perspective and the API perspective these
+ * copies are unique and it is up to the user of the 
+ * API to detect these 'duplicate' files and either
+ * filter them from the user and/or present an
+ * appropriate disambiguous representation of 
+ * the file names.  Also internally they are treated
+ * as two distinct files and thus breakpoints 
+ * will most likely need to be set on both files
+ * independently.
+ */
+public interface SwfInfo
+{
+       /**
+        * The full path of the SWF.
+        */
+       public String getPath();
+
+       /**
+        * The URL for the SWF.  Includes any options
+        * at the end of the URL. For example ?debug=true
+        */
+       public String getUrl();
+
+       /**
+        * The size of this SWF in bytes
+        */
+       public int getSwfSize();
+
+       /**
+        * The size of the debug SWD file, if any
+        * This may also be zero if the SWD load is in progress
+        * @throws InProgressException if the SWD has not yet been loaded
+        */
+       public int getSwdSize(Session s) throws InProgressException;
+
+       /**
+        * Indication that this SWF, which was previously loaded into
+        * the Player, is now currently unloaded.  All breakpoints
+        * set on any of the files contained within this SWF will
+        * be inactive.  These breakpoints will still exist in the 
+        * list returned by Session.getBreakpointList()
+        */
+       public boolean isUnloaded();
+       
+       /**
+        * Indicates whether the contents of the SWF file
+        * have been completely processed.
+        * Completely processed means that calls to getSwdSize
+        * and other calls that may throw an InProgressException will
+        * not throw this exception.  Additionally the function
+        * and offset related calls within SourceFile will return
+        * non-null values once this call returns true.
+        * @since Version 2
+        */
+       public boolean isProcessingComplete();
+
+       /**
+        * Number of source files in this SWF.
+        * May be zero if no debug 
+        * @throws InProgressException if the SWD has not yet been loaded
+        */
+       public int getSourceCount(Session s) throws InProgressException;
+
+       /**
+        * List of source files that are contained within 
+        * this SWF.
+        * @throws InProgressException if the SWD has not yet been loaded
+        * @since Version 2
+        */
+       public SourceFile[] getSourceList(Session s) throws InProgressException;
+
+       /**
+        * Returns true if the given source file is contained 
+        * within this SWF. 
+        * @since Version 2
+        */
+       public boolean containsSource(SourceFile f);
+       
+       /**
+        * Return the worker ID to which this SWF belongs.
+        */
+       public int getIsolateId();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Value.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/Value.java 
b/debugger/src/main/java/flash/tools/debugger/Value.java
new file mode 100644
index 0000000..1f97e9e
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/Value.java
@@ -0,0 +1,255 @@
+/*
+ * 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 flash.tools.debugger;
+
+import flash.tools.debugger.concrete.DVariable;
+
+/**
+ * An ActionScript value, for example, the value of a variable or constant.
+ * 
+ * @author mmorearty
+ */
+public interface Value
+{
+       /**
+        * A special object representing ActionScript's "undefined" value.
+        */
+       public static final Object UNDEFINED = new Object() {
+               @Override
+               public String toString() {
+                       return "undefined";  //$NON-NLS-1$
+               }
+       };
+
+       /**
+        * The value returned if somone calls getId() for a Variable
+        * which stores a variable of simple type such as String or
+        * integer, rather than an Object or MovieClip.
+        * @see getId()
+        */
+       public static final long UNKNOWN_ID                                     
                = -1;
+
+       /**
+        * The special ID for pseudo-variable "_global".  (Note, this only
+        * exists in AS2, not AS3.)
+        * @see getId()
+        */
+       public static final long GLOBAL_ID                                      
                = -2;
+
+       /**
+        * The special ID for pseudo-variable "this".
+        * @see getId()
+        */
+       public static final long THIS_ID                                        
                = -3;
+
+       /**
+        * The special ID for pseudo-variable "_root".  (Note, this only
+        * exists in AS2, not AS3.)
+        * @see getId()
+        */
+       public static final long ROOT_ID                                        
                = -4;
+
+       /**
+        * The special ID for the top frame of the stack.  Locals and
+        * arguments are "members" of this pseudo-variable.
+        * 
+        * All the stack frames have IDs counting down from here.  For example,
+        * the top stack frame has ID <code>BASE_ID</code>; the next
+        * stack frame has ID <code>BASE_ID - 1</code>; and so on.
+        * 
+        * @see getId()
+        */
+       public static final long BASE_ID                                        
                = -100;
+
+       /**
+        * _level0 == LEVEL_ID, _level1 == LEVEL_ID-1, ...
+        * 
+        * all IDs below this line are dynamic.
+        */
+       public static final long LEVEL_ID                                       
                = -300;
+
+       /**
+        * The return value of getTypeName() if this value represents the 
traits of a class.
+        */
+       public static final String TRAITS_TYPE_NAME                             
        = "traits"; //$NON-NLS-1$
+
+       /**
+        * Variable type can be one of VariableType.OBJECT,
+        * VariableType.FUNCTION, VariableType.NUMBER, VariableType.STRING,
+        * VariableType.UNDEFINED, VariableType.NULL.
+        */
+       public int                      getType();
+
+       /**
+        * The type name of the value:
+        * 
+        * <ul>
+        * <li> <code>"Number"</code> </li>
+        * <li> <code>"Boolean"</code> </li>
+        * <li> <code>"String"</code> </li>
+        * <li> <code>"null"</code> </li>
+        * <li> <code>"undefined"</code> </li>
+        * <li> <code>Value.TRAITS_TYPE_NAME</code> if this value represents the
+        * traits of a class </li>
+        * <li> <code>"[package::]Classname@hexaddr"</code> if this value
+        * represents an instance of a non-primitive object. For example, if 
this is
+        * an instance of mx.core.Application, the type name might be
+        * "mx.core::Application@1234abcd". </li>
+        * </ul>
+        */
+       public String           getTypeName();
+
+       /**
+        * The class name of the value. This isn't actually very useful, and 
should
+        * probably go away; it had more relevant in ActionScript 2, when the 
return
+        * value from this function could have been any one of the strings 
returned
+        * by {@link DVariable#classNameFor(long, boolean)}.
+        * 
+        * In the AS3 world, the only possible return values from this function 
are:
+        * 
+        * <ul>
+        * <li> <code>"Object"</code> for instances of non-primitive classes 
such
+        * as Object, Array, etc. </li>
+        * <li> <code>""</code> all primitive values (Number, Boolean, String,
+        * null, undefined), or the traits of a class. </li>
+        * </ul>
+        */
+       public String           getClassName();
+
+       /**
+        * Variable attributes define further information 
+        * regarding the variable.  They are bitfields identified
+        * as VariableAttribute.xxx
+        * 
+        * @see VariableAttribute
+        */
+       public int                      getAttributes();
+
+       /**
+        * @see VariableAttribute
+        */
+       public boolean          isAttributeSet(int variableAttribute);
+
+       /**
+        * Returns a unique ID for the object referred to by this variable.
+        * If two variables point to the same underlying object, their
+        * getId() functions will return the same value.
+        * 
+        * This is only meaningful for variables that store an Object or
+        * MovieClip.  For other types of variables (e.g. integers and
+        * strings), this returns <code>UNKNOWN_ID</code>.
+        */
+       public long                     getId();
+
+       /**
+        * Returns the value of the variable, as an Object.  The return
+        * value will always be one of the following:
+        * 
+        * <ul>
+        * <li> <code>null</code> </li>
+        * <li> <code>Value.UNDEFINED</code> </li>
+        * <li> a <code>Boolean</code> </li>
+        * <li> a <code>Double</code> (careful, it might be 
<code>Double.NaN</code>) </li>
+        * <li> a <code>String</code> </li>
+        * <li> a <code>Long</code> if this value represents a non-primitive
+        * type, such as an Object.  If it is a Long, then it is the id of
+        * the Value (the same value returned by <code>getId()</code>).
+        * </ul>
+        */
+       public Object           getValueAsObject();
+
+       /**
+        * Returns the value of the variable, converted to a string.  Strings
+        * are returned as the exact value of the string itself, with no
+        * extra quotation marks and no escaping of characters within the
+        * string.
+        */
+       public String           getValueAsString();
+
+       /**
+        * Returns all child members of this variable.  Can only be called for
+        * variables of type Object or MovieClip.
+        * @throws NotConnectedException 
+        * @throws NoResponseException 
+        * @throws NotSuspendedException 
+        */
+       public Variable[]       getMembers(Session s) throws 
NotSuspendedException, NoResponseException, NotConnectedException;
+
+       /**
+        * Returns a specific child member of this variable.  Can only be 
called for
+        * variables of type <code>Object<code> or <code>MovieClip<code>.
+        * @param s the session
+        * @param name just a varname name, without its namespace (see 
<code>getName()</code>)
+        * @return the specified child member, or null if there is no such 
child.
+        * @throws NotConnectedException 
+        * @throws NoResponseException 
+        * @throws NotSuspendedException 
+        */
+       public Variable     getMemberNamed(Session s, String name) throws 
NotSuspendedException, NoResponseException, NotConnectedException;
+
+       /**
+        * Returns the number of child members of this variable.  If called for
+        * a variable which has a simple type such as integer or string,
+        * returns zero.
+        * @throws NotConnectedException 
+        * @throws NoResponseException 
+        * @throws NotSuspendedException 
+        */
+       public int                      getMemberCount(Session s) throws 
NotSuspendedException, NoResponseException, NotConnectedException;
+
+       /**
+        * Returns the list of classes that contributed members to this object, 
from
+        * the class itself all the way down to <code>Object</code> (or, if
+        * allLevels == false, down to the lowest-level class that actually
+        * contributed members).
+        * 
+        * @param allLevels
+        *            if <code>true</code>, the caller wants the entire class
+        *            hierarchy. If <code>false</code>, the caller wants only
+        *            that portion of the class hierarchy that actually 
contributed
+        *            member variables to the object. For example,
+        *            <code>Object</code> has no members, so if the caller 
passes
+        *            <code>true</code> then the returned array of strings will
+        *            always end with <code>Object</code>, but if the caller
+        *            passes <code>false</code> then the returned array of 
strings
+        *            will <em>never</em> end with <code>Object</code>.
+        * @return an array of fully qualified class names.
+        */
+       public String[]         getClassHierarchy(boolean allLevels);
+       
+       /**
+        * Returns all child members of this variable that are private and are 
present 
+        * in its inheritance chain. Only relevant after a call to getMembers().
+        * 
+        * Warning: This may contain variables with the same name (when there 
is more
+        * than two level inheritance).
+        */
+       public Variable[]       getPrivateInheritedMembers();
+       
+       /**
+        * Get all the private variables with the given name. Usually one, but 
more
+        * may be present if the inheritance chain is long.
+        * @param name Variable name.
+        */
+       public Variable[] getPrivateInheritedMemberNamed(String name);
+       
+       /**
+        * Get the worker id of the isolate to which this value belongs.
+        */
+       public int getIsolateId();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java 
b/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java
new file mode 100644
index 0000000..00b62c8
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java
@@ -0,0 +1,42 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * @author mmorearty
+ */
+public interface ValueAttribute
+{
+
+       /**
+        * Indicates that the value that has been returned for a variable
+        * is actually not its real value; instead, it is the message of
+        * an exception that was thrown while executing the getter for
+        * the variable.
+        */
+       public static final int IS_EXCEPTION                    = 0x00040000;
+
+       /**
+        * Indicates that an object is actually a Class.  For example, if you 
have
+        *
+        * <pre>    var someClass:Class = Button;</pre>
+        * 
+        * ... then someClass will have IS_CLASS set to true.
+        */
+       public static final int IS_CLASS                                = 
0x04000000;
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Variable.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/Variable.java 
b/debugger/src/main/java/flash/tools/debugger/Variable.java
new file mode 100644
index 0000000..a424525
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/Variable.java
@@ -0,0 +1,169 @@
+/*
+ * 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 flash.tools.debugger;
+
+import flash.tools.debugger.events.FaultEvent;
+
+/**
+ * A Variable is any ActionScript variable, such as a String, Number, etc.
+ * It encapsulates the concept of a type and a value.
+ */
+public interface Variable
+{
+       /**
+        * The name of the variable.
+        */
+       public String           getName();
+
+       /**
+        * The fully qualified name of the variable, i.e. "namespace::name"
+        * if there is a namespace, or just "name" if not.
+        */
+       public String           getQualifiedName();
+
+       /**
+        * The namespace of the variable.  This is everything before the
+        * "::".  For example:
+        * 
+        * <ul>
+        * <li> If a variable was declared "private var x", then the
+        *      namespace is "ClassName$3", where "3" might be
+        *      any number. </li>
+        * <li> If a variable was declared within a namespace, e.g.
+        *      "mynamespace var x", then the namespace might be
+        *      "http://blahblah::x";, where "http://blahblah"; is the URL
+        *      of the namespace.
+        * <li> If a variable was declared neither public nor private
+        *      (and is therefore "internal"), and it is inside of a
+        *      package, then the namespace might be
+        *      "packagename". </li>
+        * </ul>
+        * 
+        * @return namespace or "", never <code>null</code>
+        */
+       public String           getNamespace();
+
+       /**
+        * Returns just the scope bits of the attributes. The scope values from
+        * VariableAttribute (PUBLIC_SCOPE etc.) are NOT bitfields, so the 
returned
+        * value can be compared directly to VariableAttribute.PUBLIC_SCOPE, 
etc.
+        * using "==".
+        * 
+        * @see VariableAttribute
+        */
+       public int                      getScope();
+
+       /**
+        * For a member variable of an instance of some class, its "level" 
indicates
+        * how far up the class hierarchy it is from the actual class of the 
instance.
+        * For example, suppose you have this code:
+        * 
+        * <pre>
+        *    class A           { int a }
+        *    class B extends A { int b }
+        *    class C extends B { int c }
+        *    var myObject: C
+        * </pre>
+        * 
+        * In this case, for <code>myObject</code>, the "level" of variable 
<code>c</code>
+        * is 0; the level of <code>b</code> is 1; and the level of 
<code>a</code> is 2.
+        */
+       public int                      getLevel();
+
+       /**
+        * The class in which this member was actually defined.  For example, 
if class
+        * B extends class A, and class A has member variable V, then for 
variable
+        * V, the defining class is always "A", even though the parent variable 
might
+        * be an instance of class B.
+        */
+       public String           getDefiningClass();
+
+       /**
+        * Variable attributes define further information 
+        * regarding the variable.  They are bitfields identified
+        * as VariableAttribute.xxx
+        * 
+        * @see VariableAttribute
+        */
+       public int                      getAttributes();
+
+       /**
+        * @see VariableAttribute
+        */
+       public boolean          isAttributeSet(int variableAttribute);
+
+       /**
+        * Returns the value of the variable.
+        */
+       public Value            getValue();
+
+       /**
+        * Returns whether the value of the variable has changed since the last
+        * time the program was suspended.  If the previous value of the
+        * variable is unknown, this function will return <code>false</code>.
+        */
+       public boolean          hasValueChanged(Session s);
+
+       /**
+        * Changes the value of a variable. New members cannot be added to a 
Variable,
+        * only the value of existing scalar members can be modified.
+        * 
+        * @param type
+        *            the type of the member which is being set. Use
+        *            VariableType.UNDEFINED in order to set the variable to an
+        *            undefined state; the contents of 'value' will be ignored.
+        * @param value
+        *            the string value of the member. May be 'true' or 'false' 
for
+        *            Boolean types or any valid number for Number types.
+        * @return null, if set was successful; or a FaultEvent if a setter was
+        *         invoked and the setter threw an exception. In that case, 
look at
+        *         FaultEvent.information to see the error text of the exception
+        *         that occurred.
+        * @throws NoResponseException
+        *             if times out
+        * @throws NotSuspendedException
+        *             if Player is running
+        * @throws NotConnectedException
+        *             if Player is disconnected from Session
+        */
+       public FaultEvent setValue(Session s, int type, String value) throws 
NotSuspendedException, NoResponseException, NotConnectedException;
+
+       /**
+        * @return True if this variable has a getter, and the getter has not 
yet been invoked.
+        */
+       public boolean needsToInvokeGetter();
+
+       /**
+        * Executes the getter for this variable, and changes its value 
accordingly.  Note that
+        * the <code>HAS_GETTER</code> flag is not affected by this call -- 
even after this
+        * call, <code>HAS_GETTER</code> will still be true.  If you want to 
test whether the
+        * getter has already been executed, call 
<code>needsToInvokeGetter()</code>.
+        * <p>
+        * Has no effect if <code>needsToInvokeGetter()</code> is false.
+        * 
+        * @throws NotSuspendedException
+        * @throws NoResponseException
+        * @throws NotConnectedException
+        */
+       public void invokeGetter(Session s) throws NotSuspendedException, 
NoResponseException, NotConnectedException;
+       
+       /**
+        * Get the worker id of the isolate to which this value belongs.
+        */
+       public int getIsolateId();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java 
b/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java
new file mode 100644
index 0000000..8283137
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java
@@ -0,0 +1,168 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * Specific attributes which further qualify a Variable. The values in the low
+ * 16 bits correspond to the enumeration fields defined in the player's
+ * "splay.h" file, e.g. <code>kDontEnumerate</code> etc. The values from the
+ * high 16 bits correspond to <code>enum InVariableFlags</code> from
+ * playerdebugger.h, e.g. <code>kIsArgument</code> etc.
+ */
+public interface VariableAttribute
+{
+       /**
+        * Indicates that this member is invisible to an enumeration
+        * of its parent.
+        */
+       public static final int DONT_ENUMERATE                  = 0x00000001;
+
+       /**
+        * Indicates that a variable is read-only.
+        */
+       public static final int READ_ONLY                               = 
0x00000004;
+
+       /**
+        * Indicates that a variable is a local.
+        */
+       public static final int IS_LOCAL                                = 
0x00000020;
+
+       /**
+        * Indicates that a variable is an argument to a function.
+        */
+       public static final int IS_ARGUMENT                             = 
0x00010000;
+
+       /**
+        * Indicates that a variable is "dynamic" -- that is, whether it
+        * is a dynamic property of a class declared with keyword "dynamic".
+        * Note, this attribute only works with AS3 and above.
+        */
+       public static final int IS_DYNAMIC                              = 
0x00020000;
+
+       // 0x00040000 is reserved for IS_EXCEPTION, which is now part of
+       // ValueAttribute rather than VariableAttribute.
+
+       /**
+        * Indicates that a variable has a getter.
+        */
+       public static final int HAS_GETTER                              = 
0x00080000;
+
+       /**
+        * Indicates that a variable has a setter.
+        */
+       public static final int HAS_SETTER                              = 
0x00100000;
+
+       /**
+        * Indicates that a variable is a static member of its parent.
+        */
+       public static final int IS_STATIC                               = 
0x00200000;
+
+       /**
+        * Indicates that a variable was declared "const". READ_ONLY, on the 
other
+        * hand, applies both to "const" variables and also to various other 
types
+        * of objects. IS_CONST implies READ_ONLY; READ_ONLY does not imply
+        * IS_CONST.
+        */
+       public static final int IS_CONST                                = 
0x00400000;
+
+       /**
+        * Indicates that a variable is a public member of its parent.
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == VariableAttribute.PUBLIC_SCOPE) 
...
+        * </pre>
+        */
+       public static final int PUBLIC_SCOPE                    = 0x00000000;
+
+       /**
+        * Indicates that a variable is a private member of its parent.
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == 
VariableAttribute.PRIVATE_SCOPE) ...
+        * </pre>
+        */
+       public static final int PRIVATE_SCOPE                   = 0x00800000;
+
+       /**
+        * Indicates that a variable is a protected member of its parent.
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == 
VariableAttribute.PROTECTED_SCOPE) ...
+        * </pre>
+        */
+       public static final int PROTECTED_SCOPE                 = 0x01000000;
+
+       /**
+        * Indicates that a variable is an internal member of its parent.
+        * Internally scoped variables are visible to all classes that
+        * are in the same package.
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == 
VariableAttribute.INTERNAL_SCOPE) ...
+        * </pre>
+        */
+       public static final int INTERNAL_SCOPE                  = 0x01800000;
+
+       /**
+        * Indicates that a variable is scoped by a namespace.  For
+        * example, it may have been declared as:
+        * <code>my_namespace var x;</code>
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == 
VariableAttribute.NAMESPACE_SCOPE) ...
+        * </pre>
+        */
+       public static final int NAMESPACE_SCOPE                 = 0x02000000;
+
+       /**
+        * A mask which can be used to get back only the scope-related
+        * attributes.
+        *
+        * Note: the scope attributes are not bitfields.  To determine the scope
+        * of a variable, use variable.getScope() and compare the result to the
+        * various *_SCOPE values using ==.  For example:
+        *
+        * <pre>
+        *              if (myVar.getScope() == 
VariableAttribute.PRIVATE_SCOPE) ...
+        * </pre>
+        */
+       public static final int SCOPE_MASK                              = 
PUBLIC_SCOPE|PRIVATE_SCOPE|PROTECTED_SCOPE|INTERNAL_SCOPE|NAMESPACE_SCOPE;
+
+       // 0x04000000 is reserved for IS_CLASS, which is now part of
+       // ValueAttribute rather than VariableAttribute.
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VariableType.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/VariableType.java 
b/debugger/src/main/java/flash/tools/debugger/VariableType.java
new file mode 100644
index 0000000..48554da
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/VariableType.java
@@ -0,0 +1,34 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * An identifier for the type of a Variable.
+ */
+public interface VariableType
+{
+    public static final int NUMBER                                     =  0;
+    public static final int BOOLEAN                                    =  1;
+    public static final int STRING                                     =  2;
+    public static final int OBJECT                                     =  3;
+    public static final int FUNCTION                           =  4;
+    public static final int MOVIECLIP                          =  5;
+    public static final int NULL                                   =  6;
+    public static final int UNDEFINED                          =  7;
+       public static final int UNKNOWN                                 =  8;
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VersionException.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/VersionException.java 
b/debugger/src/main/java/flash/tools/debugger/VersionException.java
new file mode 100644
index 0000000..5ecb0ca
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/VersionException.java
@@ -0,0 +1,34 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * VersionException is thrown when the Session
+ * is connected to a Player that does not support
+ * a given operation.
+ */
+public class VersionException extends PlayerDebugException
+{
+       private static final long serialVersionUID = 4966523681921720567L;
+
+    @Override
+       public String getMessage()
+       {
+               return 
Bootstrap.getLocalizationManager().getLocalizedTextString("unexpectedPlayerVersion");
 //$NON-NLS-1$
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Watch.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/Watch.java 
b/debugger/src/main/java/flash/tools/debugger/Watch.java
new file mode 100644
index 0000000..d8d9aef
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/Watch.java
@@ -0,0 +1,52 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * The Watch object represents a single watchpoint within a Session
+ * A watchpoint is a mechanism by which execution of the Player
+ * can be halted when a particular variable is accessed.  The 
+ * access type can be one of read, write or read/write.
+ * @since Version 2
+ */
+public interface Watch
+{
+       /**
+        * Value id of the value whose member is being watched.
+        * For example if the watch is placed on 'a.b.c' then the id
+        * will be that of the value 'a.b'.  Session.getVariable()
+        * can be used to obtain the variable.  This combined with
+        * the memberName() forms the unique identifier for the Watch.
+        */
+       public long getValueId();
+
+       /**
+        * Name of variable member that is being watched.  
+        */
+       public String getMemberName();
+
+       /**
+        * The kind of watch placed on the variable being watched.
+        */
+    public int getKind();
+    
+    /**
+     * The isolate to which this watchpoint belongs.
+     */
+    public int getIsolateId();
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/WatchKind.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/WatchKind.java 
b/debugger/src/main/java/flash/tools/debugger/WatchKind.java
new file mode 100644
index 0000000..b5a9d01
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/WatchKind.java
@@ -0,0 +1,33 @@
+/*
+ * 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 flash.tools.debugger;
+
+/**
+ * A descriptor for the type of watchpoint.
+ * It may be one of three values; read, write or
+ * both read and write.
+ * @since Version 2
+ */
+public interface WatchKind
+{
+       /* kind of a watchpoint (one of) */
+    public static final int NONE                                       =  0;
+    public static final int READ                                       =  1;
+    public static final int WRITE                                      =  2;
+    public static final int READWRITE                          =  3;
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java
----------------------------------------------------------------------
diff --git 
a/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java
new file mode 100644
index 0000000..2aeefd3
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java
@@ -0,0 +1,64 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+import java.io.File;
+
+import flash.tools.debugger.Browser;
+import flash.tools.debugger.Player;
+
+/**
+ * @author Mike Morearty
+ */
+public class AIRPlayer implements Player
+{
+       File m_adl;
+
+       /**
+        * @param adl
+        *            The path to adl (Mac/Linux) or adl.exe (Windows); may be 
null
+        */
+       public AIRPlayer(File adl)
+       {
+               m_adl = adl;
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getType()
+        */
+       public int getType()
+       {
+               return AIR;
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getPath()
+        */
+       public File getPath()
+       {
+               return m_adl;
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getBrowser()
+        */
+       public Browser getBrowser()
+       {
+               return null;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java
----------------------------------------------------------------------
diff --git 
a/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java
new file mode 100644
index 0000000..d147768
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java
@@ -0,0 +1,55 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+import java.io.File;
+
+import flash.tools.debugger.Browser;
+import flash.tools.debugger.Player;
+
+/**
+ * @author mmorearty
+ */
+public abstract class AbstractPlayer implements Player
+{
+       private Browser m_browser;
+       private File m_flashPlayer;
+
+       public AbstractPlayer(File webBrowser, File flashPlayer)
+       {
+               if (webBrowser != null)
+                       m_browser = new DBrowser(webBrowser);
+               m_flashPlayer = flashPlayer;
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getPath()
+        */
+       public File getPath()
+       {
+               return m_flashPlayer;
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getBrowser()
+        */
+       public Browser getBrowser()
+       {
+               return m_browser; // this is null if we're using the standalone 
player
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java
----------------------------------------------------------------------
diff --git 
a/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java
new file mode 100644
index 0000000..45cf5eb
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java
@@ -0,0 +1,39 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+import java.io.File;
+
+/**
+ * @author mmorearty
+ */
+public class ActiveXPlayer extends AbstractPlayer
+{
+       public ActiveXPlayer(File iexploreExe, File path)
+       {
+               super(iexploreExe, path);
+       }
+
+       /*
+        * @see flash.tools.debugger.Player#getType()
+        */
+       public int getType()
+       {
+               return ACTIVEX;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java
new file mode 100644
index 0000000..d5bd0b4
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java
@@ -0,0 +1,47 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+/**
+ * @author Mike Morearty
+ */
+public enum BinaryOp {
+       // These correspond to the values in the player, in playerdebugger.h,
+       // enum BinaryOp.  These values must be kept synchronized with those
+       // ones.
+       Is(0, "is"), //$NON-NLS-1$
+       Instanceof(1, "instanceof"), //$NON-NLS-1$
+       In(2, "in"), //$NON-NLS-1$
+       As(3, "as"); //$NON-NLS-1$
+
+       private int m_value;
+       private String m_name;
+
+       private BinaryOp(int value, String name) {
+               m_value = value;
+               m_name = name;
+       }
+
+       public int getValue() {
+               return m_value;
+       }
+
+       public String getName() {
+               return m_name;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java
new file mode 100644
index 0000000..cd69fa4
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java
@@ -0,0 +1,65 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+import java.io.File;
+
+import flash.tools.debugger.Browser;
+
+/**
+ * @author mmorearty
+ */
+public class DBrowser implements Browser
+{
+       private File m_path;
+       private int m_type;
+
+       public DBrowser(File exepath)
+       {
+               m_path = exepath;
+               String exename = exepath.getName().toLowerCase();
+               if (exename.equals("iexplore.exe")) //$NON-NLS-1$
+                       m_type = INTERNET_EXPLORER;
+               else if (exename.equals("mozilla.exe")) //$NON-NLS-1$
+                       m_type = MOZILLA;
+               else if (exename.equals("firefox.exe")) //$NON-NLS-1$
+                       m_type = MOZILLA_FIREFOX;
+               else if (exename.equals("opera.exe")) //$NON-NLS-1$
+                       m_type = OPERA;
+               else if (exename.equals("netscape.exe")) //$NON-NLS-1$
+                       m_type = NETSCAPE_NAVIGATOR;
+               else
+                       m_type = UNKNOWN;
+       }
+
+       /*
+        * @see flash.tools.debugger.Browser#getType()
+        */
+       public int getType()
+       {
+               return m_type;
+       }
+
+       /*
+        * @see flash.tools.debugger.Browser#getPath()
+        */
+       public File getPath()
+       {
+               return m_path;
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java
----------------------------------------------------------------------
diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java 
b/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java
new file mode 100644
index 0000000..3a0b21b
--- /dev/null
+++ b/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java
@@ -0,0 +1,49 @@
+/*
+ * 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 flash.tools.debugger.concrete;
+
+import flash.tools.debugger.Isolate;
+
+/**
+ * Concrete implementation of an Isolate.
+ * @author anirudhs
+ */
+public class DIsolate implements Isolate {
+
+       /** Isolate object behind the primordial or main thread (always exists) 
*/
+       public static final DIsolate DEFAULT_ISOLATE = new 
DIsolate(Isolate.DEFAULT_ID);
+       
+       private int id;
+       
+       public DIsolate(int id) {
+               this.id = id;
+       }
+       
+       /* (non-Javadoc)
+        * @see flash.tools.debugger.Isolate#getId()
+        */
+       @Override
+       public int getId() {
+               return id;
+       }
+
+       @Override
+       public String toString() {              
+               return "Worker " + getId(); //$NON-NLS-1$
+       }       
+
+}

Reply via email to