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());
}
}
}