You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ad...@apache.org on 2011/08/06 19:53:10 UTC

svn commit: r1154561 - in /mina/sandbox/adc/ahc/mina3/src: main/java/org/apache/ahc/mina3/ main/java/org/apache/group/ main/java/org/apache/link/ main/java/org/apache/mina/core/ main/java/org/apache/mina/core/api/ main/java/org/apache/mina/core/state/ ...

Author: adc
Date: Sat Aug  6 17:53:08 2011
New Revision: 1154561

URL: http://svn.apache.org/viewvc?rev=1154561&view=rev
Log:
Some refinements for state machine

Added:
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDown.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDown.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFuture.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFuture.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFutureListener.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFutureListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoListener.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUp.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUp.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Context.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineContext.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Event.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/EventListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java
      - copied, changed from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/
      - copied from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/group/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/
      - copied from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/link/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/LinkListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/State.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/TimeoutEvent.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Token.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/paxos/
      - copied from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/paxos/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslEvent.java
    mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/
    mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/EquipmentStackTest.java
Removed:
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/group/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/link/
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDown.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFuture.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFutureListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUp.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineContext.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/paxos/
Modified:
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/HttpClientFutureAdaptor.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFuture.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/BaseChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoConnector.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/AcceptMessage.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/CommitMessage.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/LocalDetectorListener.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Member.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Message.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/MessageByteBufferTransformer.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/ProposeMessage.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/RetryMessage.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/nio/NioSocketConnector.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosedChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosingChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
    mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/mina/core/AbstractIoFutureTest.java

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java Sat Aug  6 17:53:08 2011
@@ -22,8 +22,8 @@ import java.util.concurrent.ExecutionExc
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.mina.core.IoFuture;
-import org.apache.mina.core.IoFutureListener;
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoFutureListener;
 
 import org.apache.ahc.api.HttpResponse;
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java Sat Aug  6 17:53:08 2011
@@ -22,7 +22,7 @@ import java.net.InetSocketAddress;
 import java.net.URL;
 
 import org.apache.mina.core.IoConnector;
-import org.apache.mina.core.IoFuture;
+import org.apache.mina.core.api.IoFuture;
 import org.apache.mina.core.IoSession;
 
 import org.apache.ahc.api.HttpClient;

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/HttpClientFutureAdaptor.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/HttpClientFutureAdaptor.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/HttpClientFutureAdaptor.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/HttpClientFutureAdaptor.java Sat Aug  6 17:53:08 2011
@@ -26,8 +26,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.apache.mina.core.IoFuture;
-import org.apache.mina.core.IoFutureListener;
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoFutureListener;
 
 import org.apache.ahc.api.FutureListener;
 import org.apache.ahc.api.HttpClientFuture;

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java Sat Aug  6 17:53:08 2011
@@ -18,6 +18,7 @@
  */
 package org.apache.mina.core;
 
+import org.apache.mina.core.api.IoListener;
 import org.apache.mina.impl.EquipmentStack;
 
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFuture.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFuture.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFuture.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFuture.java Sat Aug  6 17:53:08 2011
@@ -30,15 +30,18 @@ import java.util.concurrent.atomic.Atomi
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoFutureListener;
+
 
 /**
- * An abstract implementation of {@link IoFuture}.  Owners of this future
+ * An abstract implementation of {@link org.apache.mina.core.api.IoFuture}.  Owners of this future
  * must implement {@link #cancelOwner(boolean)} to receive notifications of
  * when the future should be canceled.
  * <p/>
  * Concrete implementations of this abstract class should consider overriding
- * the two methods {@link #scheduleResult(IoFutureListener, Object)}
- * and {@link #scheduleException(IoFutureListener, Throwable)}
+ * the two methods {@link #scheduleResult(org.apache.mina.core.api.IoFutureListener, Object)}
+ * and {@link #scheduleException(org.apache.mina.core.api.IoFutureListener, Throwable)}
  * so that listeners are called in a separate thread.  The default
  * implementations may end up calling the listener in the same thread that is
  * registering the listener, before the registration has completed.
@@ -218,7 +221,7 @@ public abstract class AbstractIoFuture<V
     abstract protected boolean cancelOwner(boolean mayInterruptIfRunning);
 
     /**
-     * Default implementation to call a listener's {@link IoFutureListener#completed(Object)}
+     * Default implementation to call a listener's {@link org.apache.mina.core.api.IoFutureListener#completed(Object)}
      * method.  Owners may override this method so that the listener is called
      * from a thread pool.
      *
@@ -239,7 +242,7 @@ public abstract class AbstractIoFuture<V
     }
 
     /**
-     * Default implementation to call a listener's {@link IoFutureListener#exception(Throwable)}
+     * Default implementation to call a listener's {@link org.apache.mina.core.api.IoFutureListener#exception(Throwable)}
      * method.  Owners may override this method so that the listener is called
      * from a thread pool.
      *
@@ -261,7 +264,7 @@ public abstract class AbstractIoFuture<V
 
 
     /**
-     * Set the future result of the executing task.  Any {@link IoFutureListener}s
+     * Set the future result of the executing task.  Any {@link org.apache.mina.core.api.IoFutureListener}s
      * are notified of the
      *
      * @param value the value returned by the executing task.
@@ -289,7 +292,7 @@ public abstract class AbstractIoFuture<V
      * throwable was thrown while executing the task.  This value is usually
      * set by the future result owner.
      * <p/>
-     * Any {@link IoFutureListener}s are notified of the exception.
+     * Any {@link org.apache.mina.core.api.IoFutureListener}s are notified of the exception.
      *
      * @param t the throwable that was thrown while executing the task.
      */

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/BaseChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/BaseChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/BaseChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/BaseChannelState.java Sat Aug  6 17:53:08 2011
@@ -21,11 +21,13 @@ package org.apache.mina.core;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.mina.core.state.Event;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public abstract class BaseChannelState<R, P, E extends Enum> implements IoChannelState<R, P, E>
+public abstract class BaseChannelState<R, P, S extends Enum, E extends Event> implements IoChannelState<R, P, S, E>
 {
     private final static Logger LOGGER = LoggerFactory.getLogger(BaseChannelState.class);
 

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java Sat Aug  6 17:53:08 2011
@@ -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 org.apache.mina.core;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class EquipmentStack implements Cloneable
+{
+    public void inject(IoChannelState channelState)
+    {
+        //Todo change body of created methods use File | Settings | File Templates.
+    }
+}

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java Sat Aug  6 17:53:08 2011
@@ -18,6 +18,11 @@
  */
 package org.apache.mina.core;
 
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoListener;
+import org.apache.mina.core.api.IoUp;
+
+
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannelState.java Sat Aug  6 17:53:08 2011
@@ -18,16 +18,22 @@
  */
 package org.apache.mina.core;
 
+import org.apache.mina.core.state.Context;
+import org.apache.mina.core.state.Event;
+
+
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public interface IoChannelState<R, P, E extends Enum>
+public interface IoChannelState<U, D, S extends Enum, E extends Event>
 {
     void init();
 
     void destroy();
 
-    R send(StateMachineContext<E> context, P message) throws Exception;
+    U send(Context<S> context, D message) throws Exception;
+
+    D receive(Context<S> context, U message) throws Exception;
 
-    R receive(StateMachineContext<E> context, P message) throws Exception;
+    void handle(Context<S> context, E event) throws Exception;
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoConnector.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoConnector.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoConnector.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoConnector.java Sat Aug  6 17:53:08 2011
@@ -21,6 +21,9 @@ package org.apache.mina.core;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoListener;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java Sat Aug  6 17:53:08 2011
@@ -28,5 +28,7 @@ public @interface IoProperty
 {
     public String name() default "<bean name>";
 
+    public String type() default "<use signature>";
+
     public IoPropertyScope scope() default IoPropertyScope.PRIVATE;
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java Sat Aug  6 17:53:08 2011
@@ -25,5 +25,6 @@ public enum IoPropertyScope
 {
     GLOBAL,
     SESSION,
-    PRIVATE
+    PRIVATE,
+    MINA
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java Sat Aug  6 17:53:08 2011
@@ -21,6 +21,9 @@ package org.apache.mina.core;
 import java.security.GeneralSecurityException;
 import java.util.Set;
 
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoListener;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDown.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDown.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDown.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDown.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDown.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDown.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDown.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownMux.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownMux.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownMux.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.Map;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownSet.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownSet.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoDownSet.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.Set;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFuture.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFuture.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFuture.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFuture.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFuture.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFuture.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFuture.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.concurrent.Future;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFutureListener.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFutureListener.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFutureListener.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFutureListener.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFutureListener.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFutureListener.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoFutureListener.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoListener.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoListener.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoListener.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoListener.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoListener.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoListener.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoListener.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.EventListener;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUp.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUp.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUp.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUp.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUp.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUp.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUp.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpMux.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpMux.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpMux.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.Map;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpSet.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpSet.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoUpSet.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 import java.util.Set;
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Context.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineContext.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Context.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Context.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineContext.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineContext.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Context.java Sat Aug  6 17:53:08 2011
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.state;
+
+import org.apache.mina.link.Token;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public interface StateMachineContext<E extends Enum>
+public interface Context<E extends Enum>
 {
     E getState();
 

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Event.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Event.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Event.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/Event.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.core.state;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class Event
+{
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/EventListener.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/EventListener.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/EventListener.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/EventListener.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.core.state;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public interface EventListener
+{
+    void fired(Event event);
+}

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java (from r1152600, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineChannel.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineChannel.java&r1=1152600&r2=1154561&rev=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/StateMachineChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java Sat Aug  6 17:53:08 2011
@@ -16,48 +16,125 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.state;
 
+import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Queue;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.mina.core.AbstractIoChannel;
+import org.apache.mina.core.EquipmentStack;
+import org.apache.mina.core.IoChannelState;
+import org.apache.mina.core.IoProperty;
+import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoUp;
+
 
 /**
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
-public abstract class StateMachineChannel<U, D, E extends Enum> extends AbstractIoChannel<U, D> implements IoDown<D>, IoUp<U>
+public abstract class StateMachineChannel<U, D, S extends Enum, E extends Event> extends AbstractIoChannel<U, D> implements IoDown<D>, IoUp<U>
 {
-    private final static Logger LOGGER = LoggerFactory.getLogger(StateMachineChannel.class);
-    private final Object lock = new Object();
-    private E state;
-    private Map<E, List<IoChannelState>> states = new HashMap<E, List<IoChannelState>>();
+    private final static Logger LOG = LoggerFactory.getLogger(StateMachineChannel.class);
+    private final Map<S, IoChannelState<U, D, S, E>> states = new HashMap<S, IoChannelState<U, D, S, E>>();
+    private final Queue<E> events = new LinkedList<E>();
+    private EquipmentStack equipmentStack;
+    private volatile S state;
+
+    @IoProperty(name = "equipmentStack", scope = IoPropertyScope.MINA)
+    public void setEquipmentStack(EquipmentStack equipmentStack)
+    {
+        assert equipmentStack != null;
+        this.equipmentStack = equipmentStack;
+    }
 
-    public E getState()
+    public Queue<E> getEvents()
+    {
+        return events;
+    }
+
+    public final S getState()
     {
         return state;
     }
 
-    public void setState(E state)
+    public final void setState(S state)
     {
+        assert state != null;
         this.state = state;
     }
 
-    public Map<E, List<IoChannelState>> getStates()
+    public final Map<S, IoChannelState<U, D, S, E>> getStates()
     {
-        return states;
+        return Collections.unmodifiableMap(states);
     }
 
-    public void init() throws Exception
+    protected final void register(S state, IoChannelState<U, D, S, E> channelState)
     {
-        LOGGER.trace("init called");
+        assert state != null;
+        assert channelState != null;
+
+        IoChannelState previous = states.put(state, channelState);
+        assert previous == null;
     }
 
     public void destroy() throws Exception
     {
-        LOGGER.trace("destroy called");
+        LOG.trace("destroy called");
+    }
+
+    public final void send(D message) throws Exception
+    {
+        assert message != null;
+
+        IoChannelState<U, D, S, E> channelState = states.get(state);
+        equipmentStack.inject(channelState);
+
+        channelState.send(new StateMachineContext(), message);
+    }
+
+    public final void receive(U message) throws Exception
+    {
+        assert message != null;
+
+        IoChannelState<U, D, S, E> channelState = states.get(state);
+        equipmentStack.inject(channelState);
+
+        channelState.receive(new StateMachineContext(), message);
+    }
+
+    public final void fire(E event) throws Exception
+    {
+        assert event != null;
+
+        IoChannelState<U, D, S, E> channelState = states.get(state);
+        equipmentStack.inject(channelState);
+
+        channelState.handle(new StateMachineContext(), event);
+    }
+
+    protected final void queue(E event)
+    {
+        assert event != null;
+        events.offer(event);
+    }
+
+    private class StateMachineContext implements Context<S>
+    {
+        public S getState()
+        {
+            return StateMachineChannel.this.getState();
+        }
+
+        public void setState(S state)
+        {
+            StateMachineChannel.this.setState(state);
+        }
     }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/AcceptMessage.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/AcceptMessage.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/AcceptMessage.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/AcceptMessage.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/CommitMessage.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/CommitMessage.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/CommitMessage.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/CommitMessage.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/LocalDetectorListener.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/LocalDetectorListener.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/LocalDetectorListener.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/LocalDetectorListener.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 import java.util.List;
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Member.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Member.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Member.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Member.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Message.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Message.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Message.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/Message.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/MessageByteBufferTransformer.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/MessageByteBufferTransformer.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/MessageByteBufferTransformer.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/MessageByteBufferTransformer.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 import java.nio.ByteBuffer;
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/ProposeMessage.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/ProposeMessage.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/ProposeMessage.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/ProposeMessage.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/RetryMessage.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/RetryMessage.java?rev=1154561&r1=1152600&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/RetryMessage.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/group/RetryMessage.java Sat Aug  6 17:53:08 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.group;
+package org.apache.mina.group;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java Sat Aug  6 17:53:08 2011
@@ -28,7 +28,7 @@ import java.util.Set;
 import java.util.Stack;
 
 import org.apache.mina.core.IoConfig;
-import org.apache.mina.core.IoListener;
+import org.apache.mina.core.api.IoListener;
 import org.apache.mina.core.IoPropertyScope;
 
 

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.BaseChannelState;
+import org.apache.mina.core.IoProperty;
+import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.state.Context;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class DownState extends BaseChannelState<Token, Token, State, TimeoutEvent>
+{
+    static final Logger LOG = LoggerFactory.getLogger(DownState.class);
+    private Set<LinkListener> listeners;
+    private int numTokens;
+    private IoDown<Token> child;
+
+    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
+    public void setListeners(Set<LinkListener> listeners)
+    {
+        this.listeners = listeners;
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public int getNumTokens()
+    {
+        return numTokens;
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public void setNumTokens(int numTokens)
+    {
+        this.numTokens = numTokens;
+    }
+
+    @IoProperty(name = "child", scope = IoPropertyScope.MINA)
+    public void setChild(IoDown<Token> child)
+    {
+        this.child = child;
+    }
+
+    @Override
+    public Token send(Context<State> stateContext, Token message) throws Exception
+    {
+        LOG.error("Should not have been sent a token");
+        throw new UnsupportedOperationException("Link state channel does not support message sending");
+    }
+
+    @Override
+    public Token receive(Context<State> stateContext, Token message) throws Exception
+    {
+        LOG.debug("Received token, tokens={}", numTokens);
+
+        if (numTokens == 2)
+        {
+            for (LinkListener listener : listeners) listener.up();
+
+            stateContext.setState(State.UP);
+            child.send(new Token());
+        }
+        else if (numTokens == 1)
+        {
+            for (LinkListener listener : listeners) listener.up();
+
+            stateContext.setState(State.UP);
+            child.send(new Token());
+        }
+        else if (numTokens == 0)
+        {
+            numTokens++;
+        }
+
+        return null;
+    }
+
+    @Override
+    public void handle(Context<State> stateContext, TimeoutEvent event) throws Exception
+    {
+        LOG.trace("Ignored timeout event");
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.IoProperty;
+import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.state.StateMachineChannel;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class Link extends StateMachineChannel<Token, Token, State, TimeoutEvent>
+{
+    static final Logger LOG = LoggerFactory.getLogger(Link.class);
+    private Set<LinkListener> listeners;
+    private int numTokens;
+
+    public Link()
+    {
+        register(State.UP, new UpState());
+        register(State.UP, new DownState());
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public int getNumTokens()
+    {
+        return numTokens;
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public void setNumTokens(int numTokens)
+    {
+        this.numTokens = numTokens;
+    }
+
+    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
+    public void setListeners(Set<LinkListener> listeners)
+    {
+        this.listeners = listeners;
+    }
+
+    @Override
+    public void init() throws Exception
+    {
+        setState(State.UP);
+        numTokens = 2;
+
+        for (LinkListener listener : listeners) listener.up();
+
+        LOG.trace("Initialized link");
+    }
+
+    public void timeout()
+    {
+        LOG.debug("Timeout called");
+        queue(new TimeoutEvent());
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/LinkListener.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/LinkListener.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/LinkListener.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/LinkListener.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public interface LinkListener
+{
+    public void up();
+
+    public void down();
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/State.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/State.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/State.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/State.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public enum State
+{
+    UP,
+    DOWN
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/TimeoutEvent.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/TimeoutEvent.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/TimeoutEvent.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/TimeoutEvent.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+import org.apache.mina.core.state.Event;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class TimeoutEvent extends Event
+{
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Token.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Token.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Token.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Token.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class Token
+{
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,116 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.link;
+
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.BaseChannelState;
+import org.apache.mina.core.IoProperty;
+import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.state.Context;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class UpState extends BaseChannelState<Token, Token, State, TimeoutEvent>
+{
+    static final Logger LOG = LoggerFactory.getLogger(UpState.class);
+    private Set<LinkListener> listeners;
+    private int numTokens;
+    private IoDown<Token> child;
+
+    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
+    public void setListeners(Set<LinkListener> listeners)
+    {
+        this.listeners = listeners;
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public int getNumTokens()
+    {
+        return numTokens;
+    }
+
+    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
+    public void setNumTokens(int numTokens)
+    {
+        this.numTokens = numTokens;
+    }
+
+    @IoProperty(name = "child", scope = IoPropertyScope.MINA)
+    public void setChild(IoDown<Token> child)
+    {
+        this.child = child;
+    }
+
+    @Override
+    public Token send(Context<State> stateContext, Token message) throws Exception
+    {
+        LOG.error("Should not have been sent a token");
+        throw new UnsupportedOperationException("Link state channel does not support message sending");
+    }
+
+    @Override
+    public Token receive(Context<State> stateContext, Token message) throws Exception
+    {
+        LOG.debug("Received token, tokens={}", numTokens);
+
+        if (numTokens == 2)
+        {
+            for (LinkListener listener : listeners) listener.down();
+
+            stateContext.setState(State.DOWN);
+            child.send(new Token());
+        }
+        else if (numTokens == 1)
+        {
+            numTokens++;
+        }
+
+        return null;
+    }
+
+    @Override
+    public void handle(Context<State> stateContext, TimeoutEvent event) throws Exception
+    {
+        LOG.debug("Received timeout event, tokens={}", numTokens);
+
+        if (numTokens == 2)
+        {
+            for (LinkListener listener : listeners) listener.down();
+
+            numTokens--;
+            stateContext.setState(State.DOWN);
+            child.send(new Token());
+        }
+        else if (numTokens == 1)
+        {
+            for (LinkListener listener : listeners) listener.down();
+
+            numTokens--;
+            stateContext.setState(State.DOWN);
+            child.send(new Token());
+        }
+    }
+}

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/nio/NioSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/nio/NioSocketConnector.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/nio/NioSocketConnector.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/nio/NioSocketConnector.java Sat Aug  6 17:53:08 2011
@@ -23,8 +23,8 @@ import java.net.SocketAddress;
 
 import org.apache.mina.core.IoConfig;
 import org.apache.mina.core.IoConnector;
-import org.apache.mina.core.IoFuture;
-import org.apache.mina.core.IoListener;
+import org.apache.mina.core.api.IoFuture;
+import org.apache.mina.core.api.IoListener;
 import org.apache.mina.core.IoSession;
 
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosedChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosedChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosedChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosedChannelState.java Sat Aug  6 17:53:08 2011
@@ -19,13 +19,14 @@
 package org.apache.mina.ssl;
 
 import org.apache.mina.core.IoChannelState;
-import org.apache.mina.core.StateMachineContext;
+import org.apache.mina.core.state.Context;
+import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class ClosedChannelState<R, P> implements IoChannelState<R, P, SslStates>
+public class ClosedChannelState implements IoChannelState<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     public void init()
     {
@@ -37,13 +38,21 @@ public class ClosedChannelState<R, P> im
         //Todo change body of implemented methods use File | Settings | File Templates.
     }
 
-    public R send(StateMachineContext<SslStates> sslStatesStateMachineContext, P message) throws Exception
+    @Override
+    public IoByteBuffer send(Context<SslStates> sslStatesPContext, IoByteBuffer message) throws Exception
     {
         return null;  //Todo change body of implemented methods use File | Settings | File Templates.
     }
 
-    public R receive(StateMachineContext<SslStates> sslStatesStateMachineContext, P message) throws Exception
+    @Override
+    public IoByteBuffer receive(Context<SslStates> sslStatesContext, IoByteBuffer message) throws Exception
     {
         return null;  //Todo change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public void handle(Context<SslStates> sslStatesPContext, SslEvent event) throws Exception
+    {
+        //Todo change body of implemented methods use File | Settings | File Templates.
+    }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosingChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosingChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosingChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/ClosingChannelState.java Sat Aug  6 17:53:08 2011
@@ -19,13 +19,14 @@
 package org.apache.mina.ssl;
 
 import org.apache.mina.core.IoChannelState;
-import org.apache.mina.core.StateMachineContext;
+import org.apache.mina.core.state.Context;
+import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class ClosingChannelState<R, P> implements IoChannelState<R, P, SslStates>
+public class ClosingChannelState implements IoChannelState<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     public void init()
     {
@@ -37,13 +38,21 @@ public class ClosingChannelState<R, P> i
         //Todo change body of implemented methods use File | Settings | File Templates.
     }
 
-    public R send(StateMachineContext<SslStates> stateMachine, P message) throws Exception
+    @Override
+    public IoByteBuffer send(Context<SslStates> sslStatesPContext, IoByteBuffer message) throws Exception
     {
         return null;  //Todo change body of implemented methods use File | Settings | File Templates.
     }
 
-    public R receive(StateMachineContext<SslStates> stateMachine, P message) throws Exception
+    @Override
+    public IoByteBuffer receive(Context<SslStates> sslStatesPContext, IoByteBuffer message) throws Exception
     {
         return null;  //Todo change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public void handle(Context<SslStates> sslStatesPContext, SslEvent event) throws Exception
+    {
+        //Todo change body of implemented methods use File | Settings | File Templates.
+    }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java Sat Aug  6 17:53:08 2011
@@ -28,14 +28,14 @@ import org.apache.mina.core.BaseChannelS
 import org.apache.mina.core.IoBuffer;
 import org.apache.mina.core.IoProperty;
 import org.apache.mina.core.IoPropertyScope;
-import org.apache.mina.core.StateMachineContext;
+import org.apache.mina.core.state.Context;
 import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class FinishedChannelState extends BaseChannelState<IoByteBuffer, IoByteBuffer, SslStates>
+public class FinishedChannelState extends BaseChannelState<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     private final static Logger LOGGER = LoggerFactory.getLogger(FinishedChannelState.class);
     private ByteBuffer byteBuffer;
@@ -53,28 +53,21 @@ public class FinishedChannelState extend
         this.engine = engine;
     }
 
-    public IoByteBuffer send(StateMachineContext<SslStates> stateMachine, IoByteBuffer message) throws Exception
+    @Override
+    public IoByteBuffer send(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
-        IoBuffer ioBuffer = (IoBuffer)message;
-
-//        engine.wrap(ioBuffer.getMessages(), byteBuffer);
-
-        return new IoByteBuffer(byteBuffer);
+        return null;  //Todo change body of implemented methods use File | Settings | File Templates.
     }
 
-    public IoByteBuffer receive(StateMachineContext<SslStates> stateMachine, IoByteBuffer message) throws Exception
+    @Override
+    public IoByteBuffer receive(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
-        IoBuffer ioBuffer = (IoBuffer)message;
+        return null;  //Todo change body of implemented methods use File | Settings | File Templates.
+    }
 
-//        SSLEngineResult result = engine.unwrap(ioBuffer.getMessages()[0], byteBuffer);
-//
-//        if (result.getStatus() != SSLEngineResult.Status.BUFFER_UNDERFLOW)
-//        {
-//            return new IoByteBuffer(byteBuffer);
-//        }
-//        else
-//        {
-        return null;
-//        }
+    @Override
+    public void handle(Context<SslStates> context, SslEvent event) throws Exception
+    {
+        //Todo change body of implemented methods use File | Settings | File Templates.
     }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java Sat Aug  6 17:53:08 2011
@@ -27,14 +27,14 @@ import org.apache.mina.core.BaseChannelS
 import org.apache.mina.core.IoBufferFactory;
 import org.apache.mina.core.IoProperty;
 import org.apache.mina.core.IoPropertyScope;
-import org.apache.mina.core.StateMachineContext;
+import org.apache.mina.core.state.Context;
 import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class HandshakeChannelState extends BaseChannelState<IoByteBuffer, IoByteBuffer, SslStates>
+public class HandshakeChannelState extends BaseChannelState<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     private final static Logger LOGGER = LoggerFactory.getLogger(HandshakeChannelState.class);
     private IoBufferFactory<IoByteBuffer> factory;
@@ -52,7 +52,7 @@ public class HandshakeChannelState exten
         this.engine = engine;
     }
 
-    public IoByteBuffer send(StateMachineContext<SslStates> context, IoByteBuffer message) throws Exception
+    public IoByteBuffer send(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
         IoByteBuffer ioByteBuffer = (IoByteBuffer)message;
 
@@ -80,7 +80,7 @@ public class HandshakeChannelState exten
         return byteBuffer;
     }
 
-    public IoByteBuffer receive(StateMachineContext<SslStates> context, IoByteBuffer message) throws Exception
+    public IoByteBuffer receive(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
         IoByteBuffer byteBuffer = factory.allocate(engine.getSession().getPacketBufferSize()).get();
 //        SSLEngineResult result = engine.unwrap(message.getMessages()[0], byteBuffer);
@@ -114,4 +114,10 @@ public class HandshakeChannelState exten
 
         return byteBuffer;
     }
+
+    @Override
+    public void handle(Context<SslStates> sslStatesIoByteBufferContext, SslEvent event) throws Exception
+    {
+        //Todo change body of implemented methods use File | Settings | File Templates.
+    }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java Sat Aug  6 17:53:08 2011
@@ -20,19 +20,20 @@ package org.apache.mina.ssl;
 
 import javax.net.ssl.SSLEngine;
 import java.util.Collections;
+import java.util.concurrent.Executor;
 
 import org.apache.mina.core.IoBufferFactory;
 import org.apache.mina.core.IoChannelState;
 import org.apache.mina.core.IoProperty;
 import org.apache.mina.core.IoPropertyScope;
-import org.apache.mina.core.StateMachineChannel;
+import org.apache.mina.core.state.StateMachineChannel;
 import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class SslChannel extends StateMachineChannel<IoByteBuffer, IoByteBuffer, SslStates>
+public class SslChannel extends StateMachineChannel<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     private SslConfig sslConfig;
     private IoBufferFactory factory;
@@ -40,10 +41,10 @@ public class SslChannel extends StateMac
 
     public SslChannel()
     {
-        getStates().put(SslStates.HANDSHAKE, Collections.<IoChannelState>singletonList(new HandshakeChannelState()));
-        getStates().put(SslStates.FINISHED, Collections.<IoChannelState>singletonList(new FinishedChannelState()));
-        getStates().put(SslStates.CLOSING, Collections.<IoChannelState>singletonList(new ClosingChannelState()));
-        getStates().put(SslStates.CLOSED, Collections.<IoChannelState>singletonList(new ClosedChannelState()));
+        register(SslStates.HANDSHAKE, new HandshakeChannelState());
+        register(SslStates.FINISHED, new FinishedChannelState());
+        register(SslStates.CLOSING, new ClosingChannelState());
+        register(SslStates.CLOSED, new ClosedChannelState());
     }
 
     @IoProperty(name = "sslConfig", scope = IoPropertyScope.GLOBAL)
@@ -75,7 +76,7 @@ public class SslChannel extends StateMac
 
         if (!sslConfig.isLazyHandshake())
         {
-            HandshakeChannelState state = (HandshakeChannelState)getStates().get(SslStates.HANDSHAKE).get(0);
+            HandshakeChannelState state = (HandshakeChannelState)getStates().get(SslStates.HANDSHAKE);
             state.setFactory(factory);
             state.setEngine(engine);
 
@@ -95,14 +96,4 @@ public class SslChannel extends StateMac
     {
         return engine;
     }
-
-    public void send(IoByteBuffer message) throws Exception
-    {
-        //Todo change body of implemented methods use File | Settings | File Templates.
-    }
-
-    public void receive(IoByteBuffer message) throws Exception
-    {
-        //Todo change body of implemented methods use File | Settings | File Templates.
-    }
 }

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslEvent.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslEvent.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslEvent.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslEvent.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.ssl;
+
+import org.apache.mina.core.state.Event;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class SslEvent extends Event
+{
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/EquipmentStackTest.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/EquipmentStackTest.java?rev=1154561&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/EquipmentStackTest.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/mina3/EquipmentStackTest.java Sat Aug  6 17:53:08 2011
@@ -0,0 +1,319 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ahc.mina3;
+
+import java.util.EmptyStackException;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
+
+import org.apache.ahc.api.HttpConfig;
+import org.apache.ahc.api.HttpListener;
+import org.apache.ahc.mina3.EquipmentStack;
+
+
+/**
+ * @version $Revision: 1141808 $ $Date: 2011-06-30 22:27:33 -0700 (Thu, 30 Jun 2011) $
+ */
+public class EquipmentStackTest
+{
+    @Test
+    public void testPropertiesStack() throws Exception
+    {
+        EquipmentStack stack = new EquipmentStack();
+
+        stack.equipWith("FOO", "BAR");
+
+        assertEquals("BAR", stack.get("FOO"));
+
+        stack.push();
+        stack.equipWith("CDR", "CAR");
+        stack.equipWith("FOO", "CAT");
+
+        assertEquals("CAR", stack.get("CDR"));
+        assertEquals("CAT", stack.get("FOO"));
+
+        stack.push();
+
+        assertEquals("CAR", stack.get("CDR"));
+        assertEquals("CAT", stack.get("FOO"));
+
+        stack.pop();
+
+        assertEquals("CAR", stack.get("CDR"));
+        assertEquals("CAT", stack.get("FOO"));
+
+        stack.pop();
+
+        assertEquals(null, stack.get("CAR"));
+        assertEquals("BAR", stack.get("FOO"));
+
+        try
+        {
+            stack.pop();
+            fail("Should have thrown a EmptyStackException");
+        }
+        catch (EmptyStackException ignore)
+        {
+        }
+    }
+
+    @Test
+    @SuppressWarnings({"unchecked"})
+    public void testListeners() throws Exception
+    {
+        EquipmentStack stack = new EquipmentStack();
+
+        stack.equipWith(new A("A1"));
+
+        Set set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(1, set.size());
+        assertEquals("A1", ((A)set.iterator().next()).getS());
+
+        stack.push();
+        stack.equipWith(new A("A2"));
+
+        set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(2, set.size());
+        boolean a1 = false, a2 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("A2".equals(a.getS())) a2 = true;
+        }
+        assertTrue(a1);
+        assertTrue(a2);
+
+        stack.pop();
+
+        set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(1, set.size());
+        assertEquals("A1", ((A)set.iterator().next()).getS());
+
+        stack.equipWith(new B("B1"));
+
+        set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(2, set.size());
+        boolean b1 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("B1".equals(a.getS())) b1 = true;
+        }
+        assertTrue(a1);
+        assertTrue(b1);
+
+        stack.equipWith(new C("C1"));
+
+        set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(3, set.size());
+        boolean c1 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("B1".equals(a.getS())) b1 = true;
+            else if ("C1".equals(a.getS())) c1 = true;
+        }
+        assertTrue(a1);
+        assertTrue(b1);
+        assertTrue(c1);
+
+        set = stack.getListeners(CListener.class);
+        assertNotNull(set);
+        assertEquals(1, set.size());
+        a1 = b1 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("B1".equals(a.getS())) b1 = true;
+            else if ("C1".equals(a.getS())) c1 = true;
+        }
+        assertFalse(a1);
+        assertFalse(b1);
+        assertTrue(c1);
+
+        stack.equipWith(new D("D1"));
+
+        set = stack.getListeners(AListener.class);
+        assertNotNull(set);
+        assertEquals(4, set.size());
+        boolean d1 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("B1".equals(a.getS())) b1 = true;
+            else if ("C1".equals(a.getS())) c1 = true;
+            else if ("D1".equals(a.getS())) d1 = true;
+        }
+        assertTrue(a1);
+        assertTrue(b1);
+        assertTrue(c1);
+        assertTrue(d1);
+
+        set = stack.getListeners(CListener.class);
+        assertNotNull(set);
+        assertEquals(2, set.size());
+        a1 = b1 = false;
+        for (A a : (Set<A>)set)
+        {
+            if ("A1".equals(a.getS())) a1 = true;
+            else if ("B1".equals(a.getS())) b1 = true;
+            else if ("C1".equals(a.getS())) c1 = true;
+            else if ("D1".equals(a.getS())) d1 = true;
+        }
+        assertFalse(a1);
+        assertFalse(b1);
+        assertTrue(c1);
+        assertTrue(d1);
+    }
+
+    @Test
+    public void testConfig() throws Exception
+    {
+        EquipmentStack stack = new EquipmentStack();
+
+        stack.equipWith(new X("X1"));
+
+        X x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("X1", x.getS());
+
+        stack.push();
+        stack.equipWith(new X("X2"));
+
+        x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("X2", x.getS());
+
+        stack.pop();
+
+        x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("X1", x.getS());
+
+        stack.push();
+
+        x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("X1", x.getS());
+
+        stack.equipWith(new Y("Y1"));
+
+        x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("Y1", x.getS());
+        x = stack.getConfig(Y.class);
+        assertNotNull(x);
+        assertEquals("Y1", x.getS());
+
+        stack.pop();
+
+        x = stack.getConfig(X.class);
+        assertNotNull(x);
+        assertEquals("X1", x.getS());
+    }
+
+    static interface AListener extends HttpListener
+    {
+    }
+
+    static class A implements AListener
+    {
+        private final String s;
+
+        public A(String s)
+        {
+            this.s = s;
+        }
+
+        public String getS()
+        {
+            return s;
+        }
+    }
+
+    static class B extends A
+    {
+        public B(String s)
+        {
+            super(s);
+        }
+    }
+
+    static interface CListener extends AListener
+    {
+    }
+
+    static class C extends B implements CListener
+    {
+        public C(String s)
+        {
+            super(s);
+        }
+    }
+
+    static class D extends C implements CListener, AListener
+    {
+        public D(String s)
+        {
+            super(s);
+        }
+    }
+
+    static class W
+    {
+        private final String s;
+
+        public W(String s)
+        {
+            this.s = s;
+        }
+
+        public String getS()
+        {
+            return s;
+        }
+    }
+
+    static class X extends W implements HttpConfig
+    {
+        public X(String s)
+        {
+            super(s);
+        }
+    }
+
+    static class Y extends X
+    {
+        public Y(String s)
+        {
+            super(s);
+        }
+    }
+}

Modified: mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/mina/core/AbstractIoFutureTest.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/mina/core/AbstractIoFutureTest.java?rev=1154561&r1=1154560&r2=1154561&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/mina/core/AbstractIoFutureTest.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/mina/core/AbstractIoFutureTest.java Sat Aug  6 17:53:08 2011
@@ -39,6 +39,8 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
+import org.apache.mina.core.api.IoFutureListener;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>