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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] IoEvent} of the specified [EMAIL PROTECTED]
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 [EMAIL PROTECTED] 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());
}
}
}