Author: trustin
Date: Wed Apr 18 01:10:25 2007
New Revision: 529908

URL: http://svn.apache.org/viewvc?view=rev&rev=529908
Log:
Related issue: DIRMINA-339 (IoFilterChain.replace())
* Added replace() to DefaultIoFilterChainBuilder too

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java?view=diff&rev=529908&r1=529907&r2=529908
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
 Wed Apr 18 01:10:25 2007
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.mina.common.IoFilter.NextFilter;
 import org.apache.mina.common.IoFilterChain.Entry;
@@ -68,7 +69,7 @@
     
     private void init()
     {
-        entries = new ArrayList<Entry>();
+        entries = new CopyOnWriteArrayList<Entry>();
         entriesByName = new HashMap<String, Entry>();
     }
 
@@ -227,6 +228,35 @@
         throw new IllegalArgumentException( "Unknown filter name: " + name );
     }
 
+    public synchronized IoFilter replace( String name, IoFilter newFilter ) {
+        checkBaseName(name);
+        EntryImpl e = (EntryImpl) get(name);
+        IoFilter oldFilter = e.getFilter();
+        e.setFilter(newFilter);
+        return oldFilter;
+    }
+
+    public synchronized void replace( IoFilter oldFilter, IoFilter newFilter ) 
{
+        for (Entry e: entries) {
+            if (e.getFilter() == oldFilter) {
+                ((EntryImpl) e).setFilter(newFilter);
+                return;
+            }
+        }
+        throw new IllegalArgumentException("Filter not found: " + 
oldFilter.getClass().getName());
+    }
+
+    public synchronized void replace( Class<? extends IoFilter> oldFilterType, 
IoFilter newFilter ) {
+        for (Entry e: entries) {
+            if( oldFilterType.isAssignableFrom( e.getFilter().getClass() ) )
+            {
+                ((EntryImpl) e).setFilter(newFilter);
+                return;
+            }
+        }
+        throw new IllegalArgumentException("Filter not found: " + 
oldFilterType.getName());
+    }
+
     /**
      * @see IoFilterChain#clear()
      */
@@ -335,7 +365,7 @@
     private static class EntryImpl implements Entry
     {
         private final String name;
-        private final IoFilter filter;
+        private IoFilter filter;
         
         private EntryImpl( String name, IoFilter filter )
         {
@@ -360,6 +390,10 @@
         public IoFilter getFilter()
         {
             return filter;
+        }
+        
+        private void setFilter(IoFilter filter) {
+            this.filter = filter;
         }
 
         public NextFilter getNextFilter()


Reply via email to