Author: elecharny
Date: Tue Nov  4 10:02:53 2008
New Revision: 711331

URL: http://svn.apache.org/viewvc?rev=711331&view=rev
Log:
A new version (still with a lot or compilation errors), but where the Chat 
sample is starting to work (at least, the server is receiving the sessionOpened 
event and process it). The client seems to be blocked, I have to investigate.

Modified:
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoConnector.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandler.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandlerAdapter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
    
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
    
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/ChatProtocolHandler.java
    
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/Main.java
    
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java
    
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClientHandler.java

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilter.java
 Tue Nov  4 10:02:53 2008
@@ -96,7 +96,7 @@
     void destroy() throws Exception;
     
     /**
-     * Returns the next filter in the chain, or null if there is
+     * Returns the next filter in the incoming chain, or null if there is
      * no more filter (this will be the case when we call this
      * method on the last protocol Handler.
      * 
@@ -106,7 +106,21 @@
      *
      * @return The next filter in the chain
      */
-    IoFilter getNextFilter();
+    IoFilter getNextFilterIn(IoSession session);
+    
+    
+    /**
+     * Returns the next filter in the outgoing chain, or null if there is
+     * no more filter (this will be the case when we call this
+     * method on the last protocol Handler.
+     * 
+     * This method is <b>NOT</b> thread safe. If you want to keep
+     * the chain safe when moving or adding some new filter, please
+     * call the #getNextFilterLock() method.
+     *
+     * @return The next filter in the chain
+     */
+    IoFilter getNextFilterOut(IoSession session);
     
     /**
      * Returns the next filter in the chain, or null if there is
@@ -116,7 +130,7 @@
      * This method is thread safe. 
      *
      * @return The next filter in the chain
-     */
+     *
     IoFilter getNextFilterLock();
     
     /**

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
 Tue Nov  4 10:02:53 2008
@@ -33,9 +33,6 @@
  * @version $Rev: 591770 $, $Date: 2007-11-04 13:22:44 +0100 (Sun, 04 Nov 
2007) $
  */
 public class IoFilterAdapter implements IoFilter {
-    /** The next filter in the chain */
-    private IoFilter nextFilter;
-    
     /** The filter's name */
     private String name;
 
@@ -70,15 +67,22 @@
     /**
      * [EMAIL PROTECTED]
      */
-    public IoFilter getNextFilter() {
-        return nextFilter;
+    public IoFilter getNextFilterIn(IoSession session) {
+        return session.getNextFilterIn(this);
     }
     
     /**
      * [EMAIL PROTECTED]
      */
-    public IoFilter getNextFilterLock() {
-        synchronized(nextFilter) {
+    public IoFilter getNextFilterOut(IoSession session) {
+        return session.getNextFilterOut(this);
+    }
+    
+    /**
+     * [EMAIL PROTECTED]
+     *
+    public IoFilter getNextFilterLock(IoSession session) {
+        synchronized() {
             return nextFilter;
         }
     }
@@ -115,21 +119,21 @@
      * [EMAIL PROTECTED]
      */
     public void sessionCreated(IoSession session) {
-       getNextFilter().sessionCreated(session);
+       getNextFilterIn(session).sessionCreated(session);
     }
 
     /**
      * [EMAIL PROTECTED]
      */
     public void sessionOpened(IoSession session) {
-        getNextFilter().sessionOpened(session);
+        getNextFilterIn(session).sessionOpened(session);
     }
 
     /**
      * [EMAIL PROTECTED]
      */
     public void sessionClosed(IoSession session) {
-       getNextFilter().sessionClosed(session);
+       getNextFilterIn(session).sessionClosed(session);
     }
 
     /**
@@ -137,14 +141,14 @@
      */
     public void sessionIdle(IoSession session,
             IdleStatus status) {
-       getNextFilter().sessionIdle(session, status);
+       getNextFilterIn(session).sessionIdle(session, status);
     }
 
     /**
      * [EMAIL PROTECTED]
      */
     public void exceptionCaught(IoSession session, Throwable cause) {
-       getNextFilter().exceptionCaught(session, cause);
+       getNextFilterIn(session).exceptionCaught(session, cause);
     }
 
     /**
@@ -152,7 +156,7 @@
      */
     public void messageReceived(IoSession session,
             Object message) {
-       getNextFilter().messageReceived(session, message);
+       getNextFilterIn(session).messageReceived(session, message);
     }
 
     /**
@@ -160,21 +164,21 @@
      */
     public void messageSent(IoSession session,
             WriteRequest writeRequest) {
-       getNextFilter().messageSent(session, writeRequest);
+       getNextFilterOut(session).messageSent(session, writeRequest);
     }
 
     /**
      * [EMAIL PROTECTED]
      */
     public void filterWrite(IoSession session, WriteRequest writeRequest) {
-       getNextFilter().filterWrite(session, writeRequest);
+       getNextFilterOut(session).filterWrite(session, writeRequest);
     }
 
     /**
      * [EMAIL PROTECTED]
      */
     public void filterClose(IoSession session) {
-       getNextFilter().filterClose(session);
+       getNextFilterOut(session).filterClose(session);
     }
 
     /**

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
 Tue Nov  4 10:02:53 2008
@@ -36,6 +36,7 @@
 import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.future.DefaultIoFuture;
 import org.apache.mina.core.service.AbstractIoService;
+import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.service.IoProcessor;
 import org.apache.mina.core.session.AbstractIoSession;
 import org.apache.mina.core.session.IdleStatusChecker;
@@ -420,7 +421,7 @@
             ((IoSession)session).setFilterChainIn(chainIn);
             
             List<IoFilter> chainOut = ((IoSession)session). 
getService().getFilterChainOut();
-            ((IoSession)session).setFilterChainIn(chainOut);
+            ((IoSession)session).setFilterChainOut(chainOut);
             
             // DefaultIoFilterChain.CONNECT_FUTURE is cleared inside here
             // in AbstractIoFilterChain.fireSessionOpened().

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoConnector.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoConnector.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoConnector.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoConnector.java
 Tue Nov  4 10:02:53 2008
@@ -219,33 +219,28 @@
 
         if (getHandler() == null) {
             if (getSessionConfig().isUseReadOperation()) {
-                setHandler(new IoHandler() {
+                setHandler(new IoHandlerAdapter() {
                     public void exceptionCaught(IoSession session,
-                            Throwable cause) throws Exception {
+                            Throwable cause){
                     }
 
                     public void messageReceived(IoSession session,
-                            Object message) throws Exception {
+                            Object message) {
                     }
 
-                    public void messageSent(IoSession session, Object message)
-                            throws Exception {
+                    public void messageSent(IoSession session, Object message) 
{
                     }
 
-                    public void sessionClosed(IoSession session)
-                            throws Exception {
+                    public void sessionClosed(IoSession session) {
                     }
 
-                    public void sessionCreated(IoSession session)
-                            throws Exception {
+                    public void sessionCreated(IoSession session) {
                     }
 
-                    public void sessionIdle(IoSession session, IdleStatus 
status)
-                            throws Exception {
+                    public void sessionIdle(IoSession session, IdleStatus 
status) {
                     }
 
-                    public void sessionOpened(IoSession session)
-                            throws Exception {
+                    public void sessionOpened(IoSession session) {
                     }
                 });
             } else {

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
 Tue Nov  4 10:02:53 2008
@@ -20,6 +20,7 @@
 package org.apache.mina.core.service;
 
 import java.util.AbstractSet;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -243,6 +244,10 @@
      * [EMAIL PROTECTED]
      */
     public final List<IoFilter> getFilterChainIn() {
+       if (filterChainIn == null) {
+               filterChainIn = new ArrayList<IoFilter>();
+       }
+       
        return filterChainIn;
     }
 
@@ -250,6 +255,10 @@
      * [EMAIL PROTECTED]
      */
     public final List<IoFilter> getFilterChainOut() {
+       if (filterChainOut == null) {
+               filterChainOut = new ArrayList<IoFilter>();
+       }
+       
        return filterChainOut;
     }
 
@@ -373,6 +382,7 @@
                     "handler cannot be set while the service is active.");
         }
 
+        filterChainIn.add(handler);
         this.handler = handler;
     }
 

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandler.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandler.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandler.java
 Tue Nov  4 10:02:53 2008
@@ -21,6 +21,7 @@
 
 import java.io.IOException;
 
+import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
 
@@ -32,51 +33,5 @@
  *
  * @see IoHandlerAdapter
  */
-public interface IoHandler {
-    /**
-     * Invoked from an I/O processor thread when a new connection has been 
created.
-     * Because this method is supposed to be called from the same thread that
-     * handles I/O of multiple sessions, please implement this method to 
perform
-     * tasks that consumes minimal amount of time such as socket parameter
-     * and user-defined session attribute initialization.
-     */
-    void sessionCreated(IoSession session) throws Exception;
-
-    /**
-     * Invoked when a connection has been opened.  This method is invoked after
-     * [EMAIL PROTECTED] #sessionCreated(IoSession)}.  The biggest difference 
from
-     * [EMAIL PROTECTED] #sessionCreated(IoSession)} is that it's invoked from 
other thread
-     * than an I/O processor thread once thread model is configured properly.
-     */
-    void sessionOpened(IoSession session) throws Exception;
-
-    /**
-     * Invoked when a connection is closed.
-     */
-    void sessionClosed(IoSession session) throws Exception;
-
-    /**
-     * Invoked with the related [EMAIL PROTECTED] IdleStatus} when a 
connection becomes idle.
-     * This method is not invoked if the transport type is UDP; it's a known 
bug,
-     * and will be fixed in 2.0.
-     */
-    void sessionIdle(IoSession session, IdleStatus status) throws Exception;
-
-    /**
-     * Invoked when any exception is thrown by user [EMAIL PROTECTED] 
IoHandler}
-     * implementation or by MINA.  If <code>cause</code> is an instance of
-     * [EMAIL PROTECTED] IOException}, MINA will close the connection 
automatically.
-     */
-    void exceptionCaught(IoSession session, Throwable cause) throws Exception;
-
-    /**
-     * Invoked when a message is received.
-     */
-    void messageReceived(IoSession session, Object message) throws Exception;
-
-    /**
-     * Invoked when a message written by [EMAIL PROTECTED] 
IoSession#write(Object)} is
-     * sent out.
-     */
-    void messageSent(IoSession session, Object message) throws Exception;
+public interface IoHandler extends IoFilter{
 }
\ No newline at end of file

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandlerAdapter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandlerAdapter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandlerAdapter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoHandlerAdapter.java
 Tue Nov  4 10:02:53 2008
@@ -19,8 +19,12 @@
  */
 package org.apache.mina.core.service;
 
+import org.apache.mina.core.filterchain.IoFilter;
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.session.AttributeKey;
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.WriteRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,24 +38,34 @@
  * @version $Rev$, $Date$
  */
 public class IoHandlerAdapter implements IoHandler {
-
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    
+    public static final AttributeKey SESSION_CREATED_FUTURE = new AttributeKey(
+            IoFilter.class, "connectFuture");
 
-    public void sessionCreated(IoSession session) throws Exception {
+    public void init() throws Exception {
+    }
+    
+    public void destroy() throws Exception {
     }
 
-    public void sessionOpened(IoSession session) throws Exception {
+    public String getName() {
+       return null;
     }
 
-    public void sessionClosed(IoSession session) throws Exception {
+    public void sessionCreated(IoSession session) {
     }
 
-    public void sessionIdle(IoSession session, IdleStatus status)
-            throws Exception {
+    public void sessionOpened(IoSession session) {
     }
 
-    public void exceptionCaught(IoSession session, Throwable cause)
-            throws Exception {
+    public void sessionClosed(IoSession session) {
+    }
+
+    public void sessionIdle(IoSession session, IdleStatus status) {
+    }
+
+    public void exceptionCaught(IoSession session, Throwable cause) {
         if (logger.isWarnEnabled()) {
             logger.warn("EXCEPTION, please implement "
                     + getClass().getName()
@@ -59,10 +73,39 @@
         }
     }
 
-    public void messageReceived(IoSession session, Object message)
-            throws Exception {
+    public void messageReceived(IoSession session, Object message) {
     }
 
-    public void messageSent(IoSession session, Object message) throws 
Exception {
+    public void messageSent(IoSession session, WriteRequest message) {
+    }
+    
+    public void filterClose(IoSession session) {
+    }
+    
+    public void filterWrite(IoSession session, WriteRequest writeRequest) {
+    }
+    
+    public void onPreAdd(IoFilter parent, String name, IoFilter nextFilter)
+               throws Exception {
+    }
+
+    public void onPostAdd(IoFilter parent, String name, IoFilter nextFilter)
+               throws Exception {
+    }
+
+    public void onPreRemove(IoFilter parent, String name, IoFilter nextFilter)
+               throws Exception {
+    }
+
+    public void onPostRemove(IoFilter parent, String name, IoFilter nextFilter)
+               throws Exception {
+    }
+    
+    public IoFilter getNextFilterOut(IoSession session) {
+       return null;
+    }
+    
+    public IoFilter getNextFilterIn(IoSession session) {
+       return null;
     }
 }
\ No newline at end of file

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
 Tue Nov  4 10:02:53 2008
@@ -420,6 +420,51 @@
        return getFilterChainOut().get(0);
     }
 
+    /**
+     * Search for filter following the given filter in the incoming
+     * filter chain.
+     * 
+     * @param filter the filter we are looking for the follower
+     * @return The next filter in the chain, or null if none 
+     */
+    public IoFilter getNextFilterIn(IoFilter filter) {
+       boolean found = false;
+       
+       for (IoFilter f:getFilterChainIn()) {
+               if (found) {
+                       return f;
+               } else {
+                       if ( f == filter ) {
+                               found = true;
+                       }
+               }
+       }
+       
+       return null;
+    }
+    
+    /**
+     * Search for filter following the given filter in the incoming
+     * filter chain.
+     * 
+     * @param filter the filter we are looking for the follower
+     * @return The next filter in the chain, or null if none 
+     */
+    public IoFilter getNextFilterOut(IoFilter filter) {
+       boolean found = false;
+       
+       for (IoFilter f:getFilterChainOut()) {
+               if (found) {
+                       return f;
+               } else {
+                       if ( f == filter ) {
+                               found = true;
+                       }
+               }
+       }
+       
+       return null;
+    }
     
     /**
      * [EMAIL PROTECTED]

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
 Tue Nov  4 10:02:53 2008
@@ -130,6 +130,24 @@
     IoFilter getFirstFilterOut();
     
     /**
+     * Get the next filter in the ingoing chain, given a specific name
+     * @param name The current filter
+     * @return the following filter 
+     * @throws ArrayIndexOutOfBoundsException If this was the last filter
+     * in the chain
+     */
+    IoFilter getNextFilterIn(IoFilter filter);
+    
+    /**
+     * Get the next filter in the outgoing chain, given a specific name
+     * @param name The current filter
+     * @return the following filter 
+     * @throws ArrayIndexOutOfBoundsException If this was the last filter
+     * in the chain
+     */
+    IoFilter getNextFilterOut(IoFilter filter);
+    
+    /**
      * TODO Add method documentation
      */
     WriteRequestQueue getWriteRequestQueue();

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
 Tue Nov  4 10:02:53 2008
@@ -430,16 +430,21 @@
      */
     @Override
     public void sessionCreated(IoSession session) {
-        // Creates the decoder and stores it into the newly created session 
-        ProtocolDecoder decoder = factory.getDecoder(session);
-        session.setAttribute(DECODER, decoder);
-
-        // Creates the encoder and stores it into the newly created session 
-        ProtocolEncoder encoder = factory.getEncoder(session);
-        session.setAttribute(ENCODER, encoder);
-
-        // Call the next filter
-        getNextFilter().sessionCreated(session);
+       try
+       {
+               // Creates the decoder and stores it into the newly created 
session 
+               ProtocolDecoder decoder = factory.getDecoder(session);
+               session.setAttribute(DECODER, decoder);
+       
+               // Creates the encoder and stores it into the newly created 
session 
+               ProtocolEncoder encoder = factory.getEncoder(session);
+               session.setAttribute(ENCODER, encoder);
+       
+               // Call the next filter
+               session.getNextFilterIn(this).sessionCreated(session);
+       } catch (Exception e) {
+               // TODO : do nothing atm
+       }
     }
 
     @Override

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
 Tue Nov  4 10:02:53 2008
@@ -62,10 +62,8 @@
  * @version $Rev$, $Date$
  */
 public class WriteRequestFilter extends IoFilterAdapter {
-    // Set the filter's name
-    static {
-       name = "writeRequest";
-    }
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "writeRequest";
     
 
     private final IoEventQueueHandler queueHandler;
@@ -78,9 +76,29 @@
     }
 
     /**
+     * Creates a new instance with a new default [EMAIL PROTECTED] 
IoEventQueueThrottle}.
+     * 
+     * @param name The filter's name 
+     */
+    public WriteRequestFilter(String name) {
+        this(name, new IoEventQueueThrottle());
+    }
+
+    /**
      * Creates a new instance with the specified [EMAIL PROTECTED] 
IoEventQueueHandler}.
      */
     public WriteRequestFilter(IoEventQueueHandler queueHandler) {
+       this(DEFAULT_NAME, queueHandler);
+    }
+
+    /**
+     * Creates a new instance with the specified [EMAIL PROTECTED] 
IoEventQueueHandler}.
+     * 
+     * @param name The filter's name
+     */
+    public WriteRequestFilter(String name, IoEventQueueHandler queueHandler) {
+       super(name);
+       
         if (queueHandler == null) {
             throw new NullPointerException("queueHandler");
         }
@@ -102,7 +120,7 @@
         final IoEvent e = new IoEvent(IoEventType.WRITE, session, 
writeRequest);
 
         if (queueHandler.accept(this, e)) {
-            getNextFilter().filterWrite(session, writeRequest);
+            session.getNextFilterOut(this).filterWrite(session, writeRequest);
             WriteFuture writeFuture = writeRequest.getFuture();
             if (writeFuture == null) {
                 return;

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
 Tue Nov  4 10:02:53 2008
@@ -43,10 +43,8 @@
  * @org.apache.xbean.XBean
  */
 public class LoggingFilter extends IoFilterAdapter {
-    // Set the filter's name
-    static {
-       name = "logging";
-    }
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "logging";
     
        /** The logger name */
     private final String loggerName;
@@ -79,7 +77,7 @@
      * Default Constructor.
      */
     public LoggingFilter() {
-        this(LoggingFilter.class.getName());
+        this(DEFAULT_NAME, LoggingFilter.class);
     }
     
     /**
@@ -88,7 +86,16 @@
      * @param clazz the cass which name will be used to create the logger
      */
     public LoggingFilter(Class<?> clazz) {
-        this(clazz.getName());
+        this(DEFAULT_NAME, clazz);
+    }
+
+    /**
+     * Create a new NoopFilter using a class name
+     * 
+     * @param clazz the cass which name will be used to create the logger
+     */
+    public LoggingFilter(String name, Class<?> clazz) {
+        this(name, clazz.getName());
     }
 
     /**
@@ -96,14 +103,16 @@
      * 
      * @param name the name used to create the logger. If null, will default 
to "NoopFilter"
      */
-    public LoggingFilter(String loggerName) {
+    public LoggingFilter(String name, String loggerName) {
+       super(name);
+       
         if (loggerName == null) {
             this.loggerName = LoggingFilter.class.getName();
         } else {
                this.loggerName = loggerName;
         }
         
-        logger = LoggerFactory.getLogger(loggerName);
+        logger = LoggerFactory.getLogger(this.loggerName);
     }
 
     /**
@@ -175,43 +184,43 @@
     @Override
     public void exceptionCaught(IoSession session, Throwable cause) {
        log(exceptionCaughtLevel, "EXCEPTION :", cause);
-        getNextFilter().exceptionCaught(session, cause);
+        session.getNextFilterIn(this).exceptionCaught(session, cause);
     }
 
     @Override
     public void messageReceived(IoSession session, Object message) {
        log(messageReceivedLevel, "RECEIVED: {}", message );
-       getNextFilter().messageReceived(session, message);
+       session.getNextFilterIn(this).messageReceived(session, message);
     }
 
     @Override
     public void messageSent(IoSession session, WriteRequest writeRequest) {
        log(messageSentLevel, "SENT: {}", writeRequest.getMessage() );
-       getNextFilter().messageSent(session, writeRequest);
+       session.getNextFilterOut(this).messageSent(session, writeRequest);
     }
 
     @Override
     public void sessionCreated(IoSession session) {
        log(sessionCreatedLevel, "CREATED");
-       getNextFilter().sessionCreated(session);
+       session.getNextFilterIn(this).sessionCreated(session);
     }
 
     @Override
     public void sessionOpened(IoSession session) {
        log(sessionOpenedLevel, "OPENED");
-       getNextFilter().sessionOpened(session);
+       session.getNextFilterIn(this).sessionOpened(session);
     }
 
     @Override
     public void sessionIdle(IoSession session, IdleStatus status) {
        log(sessionIdleLevel, "IDLE");
-       getNextFilter().sessionIdle(session, status);
+       session.getNextFilterIn(this).sessionIdle(session, status);
     }
 
     @Override
     public void sessionClosed(IoSession session) {
        log(sessionClosedLevel, "CLOSED");
-       getNextFilter().sessionClosed(session);
+       session.getNextFilterIn(this).sessionClosed(session);
     }
     
     /**

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
 Tue Nov  4 10:02:53 2008
@@ -72,11 +72,8 @@
  */
 
 public class MdcInjectionFilter extends CommonEventFilter {
-
-    // Set the filter's name
-    static {
-       name = "mdcInjection";
-    }
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "mdcInjection";
     
     public enum MdcKey {
         handlerClass, remoteAddress, localAddress, remoteIp, remotePort, 
localIp, localPort
@@ -103,6 +100,18 @@
      * @see #setProperty(org.apache.mina.core.session.IoSession, String, 
String)
      */
     public MdcInjectionFilter(EnumSet<MdcKey> keys) {
+        this(DEFAULT_NAME, keys);
+    }
+
+    /**
+     * Use this constructor when you want to specify which keys to add to the 
MDC.
+     * You could still add custom keys via [EMAIL PROTECTED] 
#setProperty(IoSession, String, String)}
+     * @param keys set of keys that should be added to the MDC
+     *
+     * @see #setProperty(org.apache.mina.core.session.IoSession, String, 
String)
+     */
+    public MdcInjectionFilter(String name, EnumSet<MdcKey> keys) {
+       super(name);
         this.mdcKeys = keys.clone();
     }
 
@@ -119,6 +128,11 @@
     }
 
     public MdcInjectionFilter() {
+       this(DEFAULT_NAME);
+    }
+
+    public MdcInjectionFilter(String name) {
+       super(name);
         this.mdcKeys = EnumSet.allOf(MdcKey.class);
     }
 

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
 Tue Nov  4 10:02:53 2008
@@ -31,7 +31,6 @@
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.DefaultWriteFuture;
 import org.apache.mina.core.future.IoFuture;
 import org.apache.mina.core.future.IoFutureListener;
@@ -86,9 +85,7 @@
  */
 public class SslFilter extends IoFilterAdapter {
     // Set the filter's name
-    static {
-       name = "ssl";
-    }
+    private static final String DEFAULT_NAME = "ssl";
     
     /**
      * A session attribute key that stores underlying [EMAIL PROTECTED] 
SSLSession}
@@ -171,17 +168,33 @@
      * Creates a new SSL filter using the specified [EMAIL PROTECTED] 
SSLContext}.
      */
     public SslFilter(SSLContext sslContext) {
-        this(sslContext, true);
+       this(DEFAULT_NAME, sslContext);
+    }
+
+    /**
+     * Creates a new SSL filter using the specified [EMAIL PROTECTED] 
SSLContext}.
+     */
+    public SslFilter(String name, SSLContext sslContext) {
+        this(name, sslContext, true);
     }
 
     /**
      * Creates a new SSL filter using the specified [EMAIL PROTECTED] 
SSLContext}.
      */
     public SslFilter(SSLContext sslContext, boolean autoStart) {
+       this(DEFAULT_NAME, sslContext,autoStart);
+    }
+    
+    /**
+     * Creates a new SSL filter using the specified [EMAIL PROTECTED] 
SSLContext}.
+     */
+    public SslFilter(String name, SSLContext sslContext, boolean autoStart) {
+       super(name);
         if (sslContext == null) {
             throw new NullPointerException("sslContext");
         }
 
+        
         this.sslContext = sslContext;
         this.autoStart = autoStart;
     }

Modified: 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
 (original)
+++ 
mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
 Tue Nov  4 10:02:53 2008
@@ -57,46 +57,46 @@
 
     @Override
     public final void sessionCreated(IoSession session) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_CREATED, 
session, null));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.SESSION_CREATED, session, null));
     }
 
     @Override
     public final void sessionOpened(IoSession session) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_OPENED, 
session, null));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.SESSION_OPENED, session, null));
     }
 
     @Override
     public final void sessionClosed(IoSession session) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_CLOSED, 
session, null));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.SESSION_CLOSED, session, null));
     }
 
     @Override
     public final void sessionIdle(IoSession session, IdleStatus status) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_IDLE, 
session, status));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.SESSION_IDLE, session, status));
     }
 
     @Override
     public final void exceptionCaught(IoSession session, Throwable cause) {
-        filter(new IoFilterEvent(getNextFilter(), 
IoEventType.EXCEPTION_CAUGHT, session, cause));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.EXCEPTION_CAUGHT, session, cause));
     }
 
     @Override
     public final void messageReceived(IoSession session, Object message) {
-        filter(new IoFilterEvent(getNextFilter(), 
IoEventType.MESSAGE_RECEIVED, session, message));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.MESSAGE_RECEIVED, session, message));
     }
 
     @Override
     public final void messageSent(IoSession session, WriteRequest 
writeRequest) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.MESSAGE_SENT, 
session, writeRequest));
+        filter(new IoFilterEvent(session.getNextFilterOut(this), 
IoEventType.MESSAGE_SENT, session, writeRequest));
     }
 
     @Override
     public final void filterWrite(IoSession session, WriteRequest 
writeRequest) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.WRITE, session, 
writeRequest));
+        filter(new IoFilterEvent(session.getNextFilterOut(this), 
IoEventType.WRITE, session, writeRequest));
     }
 
     @Override
     public final void filterClose(IoSession session) {
-        filter(new IoFilterEvent(getNextFilter(), IoEventType.CLOSE, session, 
null));
+        filter(new IoFilterEvent(session.getNextFilterIn(this), 
IoEventType.CLOSE, session, null));
     }
 }

Modified: 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/ChatProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/ChatProtocolHandler.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/ChatProtocolHandler.java
 (original)
+++ 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/ChatProtocolHandler.java
 Tue Nov  4 10:02:53 2008
@@ -130,7 +130,7 @@
     }
 
     @Override
-    public void sessionClosed(IoSession session) throws Exception {
+    public void sessionClosed(IoSession session) {
         String user = (String) session.getAttribute("user");
         users.remove(user);
         sessions.remove(session);

Modified: 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/Main.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/Main.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/Main.java
 (original)
+++ 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/Main.java
 Tue Nov  4 10:02:53 2008
@@ -20,8 +20,9 @@
 package org.apache.mina.example.chat;
 
 import java.net.InetSocketAddress;
+import java.util.List;
 
-import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
+import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
@@ -45,20 +46,21 @@
 
     public static void main(String[] args) throws Exception {
         NioSocketAcceptor acceptor = new NioSocketAcceptor();
-        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
+        List<IoFilter> chainIn = acceptor.getFilterChainIn();
+        List<IoFilter> chainOut = acceptor.getFilterChainOut();
 
-        MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
-        chain.addLast("mdc", mdcInjectionFilter);
+        MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter("mdc");
+        chainIn.add(mdcInjectionFilter);
 
         // Add SSL filter if SSL is enabled.
         if (USE_SSL) {
-            addSSLSupport(chain);
+            addSSLSupport(chainIn, chainOut);
         }
 
-        chain.addLast("codec", new ProtocolCodecFilter(
+        chainIn.add(new ProtocolCodecFilter("codec",
                 new TextLineCodecFactory()));
 
-        addLogger(chain);
+        addLogger(chainIn, chainOut);
 
         // Bind
         acceptor.setHandler(new ChatProtocolHandler());
@@ -67,17 +69,20 @@
         System.out.println("Listening on port " + PORT);
     }
 
-    private static void addSSLSupport(DefaultIoFilterChainBuilder chain)
+    private static void addSSLSupport(List<IoFilter> chainIn, List<IoFilter> 
chainOut)
             throws Exception {
-        SslFilter sslFilter = new SslFilter(BogusSslContextFactory
+        SslFilter sslFilter = new SslFilter("sslFilter", BogusSslContextFactory
                 .getInstance(true));
-        chain.addLast("sslFilter", sslFilter);
+        chainIn.add(sslFilter);
+        chainOut.add(sslFilter);
         System.out.println("SSL ON");
     }
 
-    private static void addLogger(DefaultIoFilterChainBuilder chain)
+    private static void addLogger(List<IoFilter> chainIn, List<IoFilter> 
chainOut)
             throws Exception {
-        chain.addLast("logger", new LoggingFilter());
+       IoFilter loggerFilter = new LoggingFilter("logger", (String)null);
+        chainIn.add(loggerFilter);
+        chainOut.add(loggerFilter);
         System.out.println("Logging ON");
     }
 }

Modified: 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java
 (original)
+++ 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java
 Tue Nov  4 10:02:53 2008
@@ -20,6 +20,7 @@
 package org.apache.mina.example.chat.client;
 
 import java.net.SocketAddress;
+import java.util.List;
 
 import javax.net.ssl.SSLContext;
 
@@ -64,24 +65,35 @@
         }
 
         try {
-            IoFilter LOGGING_FILTER = new LoggingFilter();
+            IoFilter LOGGING_FILTER = new LoggingFilter("logger", 
(String)null);
 
-            IoFilter CODEC_FILTER = new ProtocolCodecFilter(
+            IoFilter CODEC_FILTER = new ProtocolCodecFilter("codec",
                     new TextLineCodecFactory());
             
-            connector.getFilterChain().addLast("mdc", new 
MdcInjectionFilter());
-            connector.getFilterChain().addLast("codec", CODEC_FILTER);
-            connector.getFilterChain().addLast("logger", LOGGING_FILTER);
+            List<IoFilter> chainIn = connector.getFilterChainIn();
+            List<IoFilter> chainOut = connector.getFilterChainOut();
+            
+            chainIn.add(new MdcInjectionFilter("mdc"));
+            chainIn.add(CODEC_FILTER);
+            chainIn.add(LOGGING_FILTER);
+
+            chainOut.add(new MdcInjectionFilter("mdc"));
+            chainOut.add(CODEC_FILTER);
+            chainOut.add(LOGGING_FILTER);
 
             if (useSsl) {
                 SSLContext sslContext = BogusSslContextFactory
                         .getInstance(false);
-                SslFilter sslFilter = new SslFilter(sslContext);
+                SslFilter sslFilter = new SslFilter("sslFilter", sslContext);
                 sslFilter.setUseClientMode(true);
-                connector.getFilterChain().addLast("sslFilter", sslFilter);
+                connector.getFilterChainIn().add(sslFilter);
+                connector.getFilterChainOut().add(sslFilter);
             }
 
+            // Add the handler to the incoming chain
             connector.setHandler(handler);
+            chainIn.add(handler);
+            
             ConnectFuture future1 = connector.connect(address);
             future1.awaitUninterruptibly();
             if (!future1.isConnected()) {

Modified: 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClientHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClientHandler.java?rev=711331&r1=711330&r2=711331&view=diff
==============================================================================
--- 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClientHandler.java
 (original)
+++ 
mina/branches/mina-new-chain/example/src/main/java/org/apache/mina/example/chat/client/SwingChatClientHandler.java
 Tue Nov  4 10:02:53 2008
@@ -53,13 +53,12 @@
     }
 
     @Override
-    public void sessionOpened(IoSession session) throws Exception {
+    public void sessionOpened(IoSession session) {
         callback.connected();
     }
 
     @Override
-    public void messageReceived(IoSession session, Object message)
-            throws Exception {
+    public void messageReceived(IoSession session, Object message) {
         String theMessage = (String) message;
         String[] result = theMessage.split(" ", 3);
         String status = result[1];
@@ -92,7 +91,7 @@
     }
 
     @Override
-    public void sessionClosed(IoSession session) throws Exception {
+    public void sessionClosed(IoSession session) {
         callback.disconnected();
     }
 


Reply via email to