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