You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/09/29 21:21:44 UTC

svn commit: r580628 - in /mina/trunk/core/src: main/java/org/apache/mina/common/ main/java/org/apache/mina/filter/logging/ main/java/org/apache/mina/filter/util/ test/java/org/apache/mina/filter/executor/ test/java/org/apache/mina/filter/util/

Author: trustin
Date: Sat Sep 29 12:21:43 2007
New Revision: 580628

URL: http://svn.apache.org/viewvc?rev=580628&view=rev
Log:
* Added more support methods for IoEvent
** Added IoFilter.NextFilter.filter(IoEvent)
** Added IoFilterChain.fire(IoEvent)
* Renamed WrappingFilter.wrap() to filter() because what it does it actually filtering
* Rewrote WrappingFilter using IoEvent


Modified:
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterChain.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/util/WrappingFilter.java
    mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java
    mina/trunk/core/src/test/java/org/apache/mina/filter/util/WrappingFilterTest.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChain.java Sat Sep 29 12:21:43 2007
@@ -270,6 +270,37 @@
                     "Other filter is using the same name '" + name + "'");
         }
     }
+    
+    public void fire(IoEventType eventType, Object parameter) {
+        switch (eventType) {
+        case MESSAGE_RECEIVED:
+            fireMessageReceived(parameter);
+            break;
+        case MESSAGE_SENT:
+            fireMessageSent((WriteRequest) parameter);
+            break;
+        case WRITE:
+            fireFilterWrite((WriteRequest) parameter);
+            break;
+        case CLOSE:
+            fireFilterClose();
+            break;
+        case EXCEPTION_CAUGHT:
+            fireExceptionCaught((Throwable) parameter);
+            break;
+        case SESSION_IDLE:
+            fireSessionIdle((IdleStatus) parameter);
+            break;
+        case SESSION_OPENED:
+            fireSessionOpened();
+            break;
+        case SESSION_CLOSED:
+            fireSessionClosed();
+            break;
+        default:
+            throw new IllegalArgumentException("Unknown event type: " + eventType);
+        }
+    }
 
     public void fireSessionCreated() {
         Entry head = this.head;
@@ -749,6 +780,38 @@
                 public void filterClose(IoSession session) {
                     Entry nextEntry = EntryImpl.this.prevEntry;
                     callPreviousFilterClose(nextEntry, session);
+                }
+                
+                public void filter(IoEvent event) {
+                    Object data = event.getParameter();
+                    switch (event.getType()) {
+                    case MESSAGE_RECEIVED:
+                        messageReceived(session, data);
+                        break;
+                    case MESSAGE_SENT:
+                        messageSent(session, (WriteRequest) data);
+                        break;
+                    case WRITE:
+                        filterWrite(session, (WriteRequest) data);
+                        break;
+                    case CLOSE:
+                        filterClose(session);
+                        break;
+                    case EXCEPTION_CAUGHT:
+                        exceptionCaught(session, (Throwable) data);
+                        break;
+                    case SESSION_IDLE:
+                        sessionIdle(session, (IdleStatus) data);
+                        break;
+                    case SESSION_OPENED:
+                        sessionOpened(session);
+                        break;
+                    case SESSION_CLOSED:
+                        sessionClosed(session);
+                        break;
+                    default:
+                        throw new IllegalArgumentException("Unknown event type: " + event.getType());
+                    }
                 }
             };
         }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoFilter.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoFilter.java Sat Sep 29 12:21:43 2007
@@ -251,5 +251,10 @@
          * Forwards <tt>filterClose</tt> event to next filter.
          */
         void filterClose(IoSession session);
+        
+        /**
+         * Forwards the specified {@link IoEvent} to next filter.
+         */
+        void filter(IoEvent event);
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterChain.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterChain.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterChain.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterChain.java Sat Sep 29 12:21:43 2007
@@ -176,6 +176,15 @@
     void clear() throws Exception;
 
     /**
+     * Fires an {@link IoEvent} of the specified {@link IoEventType}.  Most users don't
+     * need to call this method at all.  Please use this methos only when you implement a
+     * new transport or fire a virtual event.
+     * 
+     * @param parameter the data object associated with the event
+     */
+    public void fire(IoEventType eventType, Object parameter);
+    
+    /**
      * Fires a {@link IoHandler#sessionCreated(IoSession)} event.  Most users don't need to
      * call this method at all.  Please use this method only when you implement a new transport
      * or fire a virtual event.

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java Sat Sep 29 12:21:43 2007
@@ -4,7 +4,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.mina.common.IoEventType;
+import org.apache.mina.common.IoEvent;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.filter.util.WrappingFilter;
 import org.slf4j.MDC;
@@ -57,18 +57,18 @@
     };
 
     @Override
-    protected void wrap(IoEventType eventType, IoSession session, Runnable action) {
+    protected void filter(NextFilter nextFilter, IoEvent event) throws Exception {
         // since this method can potentially call into itself
         // we need to check the call depth before clearing the MDC
         callDepth.set (callDepth.get() + 1);
-        Context context = getContext(session);
+        Context context = getContext(event.getSession());
         /* copy context to the MDC */
         for (Map.Entry<String,String> e : context.entrySet()) {
             MDC.put(e.getKey(), e.getValue());
         }
         try {
             /* propagate event down the filter chain */
-            action.run();
+            nextFilter.filter(event);
         } finally {
             callDepth.set ( callDepth.get() - 1);
             if (callDepth.get() == 0) {

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/util/WrappingFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/util/WrappingFilter.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/util/WrappingFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/util/WrappingFilter.java Sat Sep 29 12:21:43 2007
@@ -1,6 +1,7 @@
 package org.apache.mina.filter.util;
 
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoEvent;
 import org.apache.mina.common.IoEventType;
 import org.apache.mina.common.IoFilterAdapter;
 import org.apache.mina.common.IoSession;
@@ -15,86 +16,50 @@
     public WrappingFilter() {
     }
 
-    protected abstract void wrap(IoEventType eventType, IoSession session, Runnable action);
+    protected abstract void filter(NextFilter nextFilter, IoEvent event) throws Exception;
 
     @Override
-    final public void sessionCreated(final NextFilter nextFilter, final IoSession session) throws Exception {
-        wrap(IoEventType.SESSION_CREATED, session, new Runnable() {
-            public void run() {
-                nextFilter.sessionCreated(session);
-            }
-        });
+    public final void sessionCreated(NextFilter nextFilter, IoSession session) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.SESSION_CREATED, session, null));
     }
 
     @Override
-    final public void sessionOpened(final NextFilter nextFilter, final IoSession session) throws Exception {
-        wrap(IoEventType.SESSION_OPENED, session, new Runnable() {
-            public void run() {
-                nextFilter.sessionOpened(session);
-            }
-        });
+    public final void sessionOpened(NextFilter nextFilter, IoSession session) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.SESSION_OPENED, session, null));
     }
 
     @Override
-    final public void sessionClosed(final NextFilter nextFilter, final IoSession session) throws Exception {
-        wrap(IoEventType.SESSION_CLOSED, session, new Runnable() {
-            public void run() {
-                nextFilter.sessionClosed(session);
-            }
-        });
+    public final void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.SESSION_CLOSED, session, null));
     }
 
     @Override
-    final public void sessionIdle(final NextFilter nextFilter, final IoSession session, final IdleStatus status) throws Exception {
-        wrap(IoEventType.SESSION_IDLE, session, new Runnable() {
-            public void run() {
-                nextFilter.sessionIdle(session, status);
-            }
-        });
+    public final void sessionIdle(NextFilter nextFilter, IoSession session, IdleStatus status) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.SESSION_IDLE, session, status));
     }
 
     @Override
-    final public void exceptionCaught(final NextFilter nextFilter, final IoSession session, final Throwable cause) throws Exception {
-        wrap(IoEventType.EXCEPTION_CAUGHT, session, new Runnable() {
-            public void run() {
-                nextFilter.exceptionCaught(session, cause);
-            }
-        });
+    public final void exceptionCaught(NextFilter nextFilter, IoSession session, Throwable cause) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.EXCEPTION_CAUGHT, session, cause));
     }
 
     @Override
-    final public void messageReceived(final NextFilter nextFilter, final IoSession session, final Object message) throws Exception {
-        wrap(IoEventType.MESSAGE_RECEIVED, session, new Runnable() {
-            public void run() {
-                nextFilter.messageReceived(session, message);
-            }
-        });
+    public final void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.MESSAGE_RECEIVED, session, message));
     }
 
     @Override
-    final public void messageSent(final NextFilter nextFilter, final IoSession session, final WriteRequest writeRequest) throws Exception {
-        wrap(IoEventType.MESSAGE_SENT, session, new Runnable() {
-            public void run() {
-                nextFilter.messageSent(session, writeRequest);
-            }
-        });
+    public final void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.MESSAGE_SENT, session, writeRequest));
     }
 
     @Override
-    final public void filterWrite(final NextFilter nextFilter, final IoSession session, final WriteRequest writeRequest) throws Exception {
-        wrap(IoEventType.WRITE, session, new Runnable() {
-            public void run() {
-                nextFilter.filterWrite(session, writeRequest);
-            }
-        });
+    public final void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.WRITE, session, writeRequest));
     }
 
     @Override
-    final public void filterClose(final NextFilter nextFilter, final IoSession session) throws Exception {
-        wrap(IoEventType.CLOSE, session, new Runnable() {
-            public void run() {
-                nextFilter.filterClose(session);
-            }
-        });
+    public final void filterClose(NextFilter nextFilter, IoSession session) throws Exception {
+        filter(nextFilter, new IoEvent(IoEventType.CLOSE, session, null));
     }
 }

Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java Sat Sep 29 12:21:43 2007
@@ -27,6 +27,7 @@
 
 import org.apache.mina.common.DummySession;
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoEvent;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.WriteRequest;
 import org.apache.mina.common.IoFilter.NextFilter;
@@ -130,6 +131,9 @@
         }
 
         public void sessionCreated(IoSession session) {
+        }
+
+        public void filter(IoEvent event) {
         }
     }
 

Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/util/WrappingFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/util/WrappingFilterTest.java?rev=580628&r1=580627&r2=580628&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/util/WrappingFilterTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/util/WrappingFilterTest.java Sat Sep 29 12:21:43 2007
@@ -8,6 +8,7 @@
 import org.apache.mina.common.DefaultWriteRequest;
 import org.apache.mina.common.DummySession;
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoEvent;
 import org.apache.mina.common.IoEventType;
 import org.apache.mina.common.IoFilter;
 import org.apache.mina.common.IoSession;
@@ -103,10 +104,10 @@
         private List<IoEventType> eventsAfter = new ArrayList<IoEventType>();
 
         @Override
-        protected void wrap(IoEventType eventType, IoSession session, Runnable action) {
-            eventsBefore.add(eventType);
-            action.run();
-            eventsAfter.add(eventType);
+        protected void filter(NextFilter nextFilter, IoEvent event) {
+            eventsBefore.add(event.getType());
+            nextFilter.filter(event);
+            eventsAfter.add(event.getType());
         }
     }
 }