You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/12/01 04:36:28 UTC
svn commit: r350130 - in
/directory/network/branches/chain_refactor/src/java/org/apache/mina:
common/ common/support/ filter/ filter/codec/
Author: trustin
Date: Wed Nov 30 19:36:21 2005
New Revision: 350130
URL: http://svn.apache.org/viewcvs?rev=350130&view=rev
Log:
* Added IoFilterChain.contains()
* Added DefaultIoFilterChainBuilder.contains()
* Prevented ProtocolCodecFilter and SSLFilter from duplicate addition
Modified:
directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
directory/network/branches/chain_refactor/src/java/org/apache/mina/common/IoFilterChain.java
directory/network/branches/chain_refactor/src/java/org/apache/mina/common/support/AbstractIoFilterChain.java
directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/SSLFilter.java
directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
Modified: directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java?rev=350130&r1=350129&r2=350130&view=diff
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java (original)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java Wed Nov 30 19:36:21 2005
@@ -106,6 +106,50 @@
}
/**
+ * Returns <tt>true</tt> if this chain contains an {@link IoFilter} with the
+ * specified <tt>name</tt>.
+ */
+ public boolean contains( String name )
+ {
+ return getEntry( name ) != null;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this chain contains the specified <tt>filter</tt>.
+ */
+ public boolean contains( IoFilter filter )
+ {
+ for( Iterator i = entries.iterator(); i.hasNext(); )
+ {
+ Entry e = ( Entry ) i.next();
+ if( e.getFilter() == filter )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this chain contains an {@link IoFilter} of the
+ * specified <tt>filterType</tt>.
+ */
+ public boolean contains( Class filterType )
+ {
+ for( Iterator i = entries.iterator(); i.hasNext(); )
+ {
+ Entry e = ( Entry ) i.next();
+ if( filterType.isAssignableFrom( e.getFilter().getClass() ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* Adds the specified filter with the specified name at the beginning
* of the filter list.
*/
Modified: directory/network/branches/chain_refactor/src/java/org/apache/mina/common/IoFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/chain_refactor/src/java/org/apache/mina/common/IoFilterChain.java?rev=350130&r1=350129&r2=350130&view=diff
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/common/IoFilterChain.java (original)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/common/IoFilterChain.java Wed Nov 30 19:36:21 2005
@@ -65,7 +65,24 @@
* Returns the reversed list of all {@link Entry}s this chain contains.
*/
List getAllReversed();
-
+
+ /**
+ * Returns <tt>true</tt> if this chain contains an {@link IoFilter} with the
+ * specified <tt>name</tt>.
+ */
+ boolean contains( String name );
+
+ /**
+ * Returns <tt>true</tt> if this chain contains the specified <tt>filter</tt>.
+ */
+ boolean contains( IoFilter filter );
+
+ /**
+ * Returns <tt>true</tt> if this chain contains an {@link IoFilter} of the
+ * specified <tt>filterType</tt>.
+ */
+ boolean contains( Class filterType );
+
/**
* Adds the specified filter with the specified name at the beginning of this chain.
* @throws IoFilterLifeCycleException
Modified: directory/network/branches/chain_refactor/src/java/org/apache/mina/common/support/AbstractIoFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/chain_refactor/src/java/org/apache/mina/common/support/AbstractIoFilterChain.java?rev=350130&r1=350129&r2=350130&view=diff
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/common/support/AbstractIoFilterChain.java (original)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/common/support/AbstractIoFilterChain.java Wed Nov 30 19:36:21 2005
@@ -20,7 +20,6 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -54,7 +53,6 @@
private final IoSession session;
private final Map name2entry = new HashMap();
- private final Map filter2entry = new IdentityHashMap();
private final EntryImpl head;
private final EntryImpl tail;
@@ -351,7 +349,6 @@
prevEntry.nextEntry.prevEntry = newEntry;
prevEntry.nextEntry = newEntry;
name2entry.put( name, newEntry );
- filter2entry.put( filter, newEntry );
try
{
@@ -394,8 +391,6 @@
nextEntry.prevEntry = prevEntry;
name2entry.remove( entry.name );
- IoFilter filter = entry.getFilter();
- filter2entry.remove( filter );
}
/**
@@ -630,6 +625,39 @@
return list;
}
+ public boolean contains( String name )
+ {
+ return getEntry( name ) != null;
+ }
+
+ public boolean contains( IoFilter filter )
+ {
+ EntryImpl e = head.nextEntry;
+ while( e != tail )
+ {
+ if( e.getFilter() == filter )
+ {
+ return true;
+ }
+ e = e.nextEntry;
+ }
+ return false;
+ }
+
+ public boolean contains( Class filterType )
+ {
+ EntryImpl e = head.nextEntry;
+ while( e != tail )
+ {
+ if( filterType.isAssignableFrom( e.getFilter().getClass() ) )
+ {
+ return true;
+ }
+ e = e.nextEntry;
+ }
+ return false;
+ }
+
public String toString()
{
StringBuffer buf = new StringBuffer();
Modified: directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/SSLFilter.java?rev=350130&r1=350129&r2=350130&view=diff
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/SSLFilter.java (original)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/SSLFilter.java Wed Nov 30 19:36:21 2005
@@ -332,6 +332,11 @@
public void onAdd( IoFilterChain parent, String name, NextFilter nextFilter ) throws SSLException
{
+ if( parent.contains( SSLFilter.class ) )
+ {
+ throw new IllegalStateException( "A filter chain cannot contain more than one SSLFilter." );
+ }
+
// FIXME This filter should work fine even if it is added more than once to one chain.
parent.getSession().setAttribute( NEXT_FILTER, nextFilter );
Object managerOrSession = parent.getSession();
Modified: directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=350130&r1=350129&r2=350130&view=diff
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Wed Nov 30 19:36:21 2005
@@ -3,6 +3,7 @@
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.ByteBufferProxy;
import org.apache.mina.common.IoFilterAdapter;
+import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.WriteFuture;
import org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput;
@@ -28,6 +29,14 @@
this.factory = factory;
}
+ public void onAdd( IoFilterChain parent, String name, NextFilter nextFilter ) throws Exception
+ {
+ if( parent.contains( ProtocolCodecFilter.class ) )
+ {
+ throw new IllegalStateException( "A filter chain cannot contain more than one ProtocolCodecFilter." );
+ }
+ }
+
public void messageReceived( NextFilter nextFilter, IoSession session, Object message ) throws Exception
{
if( !( message instanceof ByteBuffer ) )