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/11/30 07:59:08 UTC

svn commit: r349900 - in /directory/network/branches/chain_refactor/src/java/org/apache/mina/common: DefaultIoFilterChainBuilder.java IoFilterChain.java support/AbstractIoFilterChain.java

Author: trustin
Date: Tue Nov 29 22:58:56 2005
New Revision: 349900

URL: http://svn.apache.org/viewcvs?rev=349900&view=rev
Log:
* Added DefaultIoFilterChainBuilder
* Removed IoFilterChain manipulation methods based on IoFilter reference

Added:
    directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java   (with props)
Modified:
    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

Added: 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=349900&view=auto
==============================================================================
--- directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java (added)
+++ directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java Tue Nov 29 22:58:56 2005
@@ -0,0 +1,260 @@
+package org.apache.mina.common;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import org.apache.mina.common.IoFilter.NextFilter;
+import org.apache.mina.common.IoFilterChain.Entry;
+
+public class DefaultIoFilterChainBuilder implements IoFilterChainBuilder
+{
+    private List entries = new ArrayList();
+    private final Map entriesByName = new HashMap();
+    private final Map entriesByFilter = new IdentityHashMap();
+    
+    /**
+     * Creates a new instance with an empty filter list.
+     */
+    public DefaultIoFilterChainBuilder()
+    {
+    }
+
+    /**
+     * Returns the {@link IoFilter} with the specified <tt>name</tt> in the filter
+     * list.
+     * 
+     * @return <tt>null</tt> if there's no such filter in the filter list
+     */
+    public synchronized Entry get( String name )
+    {
+        return ( Entry ) entriesByName.get( name );
+    }
+    
+    /**
+     * Returns the name of the specified {@link IoFilter} in the filter list.
+     * @return <tt>null</tt> if there's no such filter in the filter list.
+     */
+    public synchronized Entry get( IoFilter filter )
+    {
+        return ( Entry ) entriesByFilter.get( filter );
+    }
+    
+    /**
+     * Returns the list of all {@link Entry}s the filter list contains.
+     */
+    public List getAll()
+    {
+        return new ArrayList( entries );
+    }
+    
+    /**
+     * Returns the reversed list of all {@link Entry}s the filter list contains.
+     */
+    public List getAllReversed()
+    {
+        List result = getAll();
+        Collections.reverse( result );
+        return result;
+    }
+
+    /**
+     * Adds the specified filter with the specified name at the beginning
+     * of the filter list.
+     */
+    public synchronized void addFirst( String name, IoFilter filter )
+    {
+        register( 0, new EntryImpl( name, filter ) );
+    }
+    
+    /**
+     * Adds the specified filter with the specified name at the end of
+     * the filter list.
+     */
+    public synchronized void addLast( String name, IoFilter filter )
+    {
+        register( entries.size(), new EntryImpl( name, filter ) );
+    }
+
+    /**
+     * Adds the specified filter with the specified name just before the filter whose name is
+     * <code>baseName</code> in this chain.
+     */
+    public synchronized void addBefore( String baseName, String name, IoFilter filter )
+    {
+        checkBaseName( baseName );
+        
+        for( ListIterator i = entries.listIterator(); i.hasNext(); )
+        {
+            Entry base = ( Entry ) i.next();
+            if( base.getName().equals( baseName ) )
+            {
+                register( i.previousIndex(), new EntryImpl( name, filter ) );
+                break;
+            }
+        }
+    }
+
+    /**
+     * Adds the specified filter with the specified name just after the filter whose name is
+     * <code>baseName</code> in this chain.
+     */
+    public synchronized void addAfter( String baseName, String name, IoFilter filter )
+    {
+        checkBaseName( baseName );
+        
+        List entries = new ArrayList( this.entries );
+        
+        for( ListIterator i = entries.listIterator(); i.hasNext(); )
+        {
+            Entry base = ( Entry ) i.next();
+            if( base.getName().equals( baseName ) )
+            {
+                register( i.nextIndex(), new EntryImpl( name, filter ) );
+                break;
+            }
+        }
+    }
+
+    /**
+     * Removes the filter with the specified name from this chain.
+     */
+    public synchronized IoFilter remove( String name )
+    {
+        if( name == null )
+        {
+            throw new NullPointerException( "name" );
+        }
+
+        for( ListIterator i = entries.listIterator(); i.hasNext(); )
+        {
+            Entry e = ( Entry ) i.next();
+            if( e.getName().equals( name ) )
+            {
+                deregister( i.previousIndex(), e );
+                return e.getFilter();
+            }
+        }
+        
+        throw new IllegalArgumentException( "Unknown filter name: " + name );
+    }
+
+    /**
+     * Removes the specifiec <tt>filter</tt> from this chain.
+     * 
+     * @return the name of the removed {@link IoFilter}
+     */
+    public synchronized String remove( IoFilter filter )
+    {
+        if( filter == null )
+        {
+            throw new NullPointerException( "filter" );
+        }
+        
+        Entry e = get( filter );
+        if( e == null )
+        {
+            throw new IllegalArgumentException( "The specified filter doesn't belong to this builder." );
+        }
+        
+        String name = e.getName();
+        remove( name );
+        return name;
+    }
+
+    /**
+     * Removes all filters added to this chain.
+     * @throws Exception if {@link IoFilter#destroy(IoFilterChain, NextFilter)} thrown an exception.
+     */
+    public synchronized void clear() throws Exception
+    {
+        entries = new ArrayList();
+        entriesByName.clear();
+        entriesByFilter.clear();
+    }
+    
+    public void buildFilterChain( IoFilterChain chain ) throws Exception
+    {
+        for( Iterator i = entries.iterator(); i.hasNext(); )
+        {
+            Entry e = ( Entry ) i.next();
+            chain.addLast( e.getName(), e.getFilter() );
+        }
+    }
+
+    private void checkBaseName( String baseName )
+    {
+        if( baseName == null )
+        {
+            throw new NullPointerException( "baseName" );
+        }
+        if( !entriesByName.containsKey( baseName ) )
+        {
+            throw new IllegalArgumentException( "Unknown filter name: " + baseName );
+        }
+    }
+
+    private void register( int index, Entry e )
+    {
+        if( entriesByName.containsKey( e.getName() ) )
+        {
+            throw new IllegalArgumentException( "Other filter is using the same name: " + e.getName() );
+        }
+
+        List newEntries = new ArrayList( entries );
+        newEntries.add( index, e );
+        this.entries = newEntries;
+        entriesByName.put( e.getName(), e );
+        entriesByFilter.put( e.getFilter(), e );
+    }
+    
+    private void deregister( int index, Entry e )
+    {
+        List newEntries = new ArrayList( entries );
+        newEntries.remove( index );
+        this.entries = newEntries;
+        entriesByName.remove( e.getName() );
+        entriesByFilter.remove( e.getFilter() );
+    }
+
+    public static class EntryImpl implements Entry
+    {
+        private final String name;
+        private final IoFilter filter;
+        
+        private EntryImpl( String name, IoFilter filter )
+        {
+            if( name == null )
+            {
+                throw new NullPointerException( "name" );
+            }
+            if( filter == null )
+            {
+                throw new NullPointerException( "filter" );
+            }
+            
+            this.name = name;
+            this.filter = filter;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+        
+        public IoFilter getFilter()
+        {
+            return filter;
+        }
+
+        public NextFilter getNextFilter()
+        {
+            throw new IllegalStateException();
+        }
+    }
+}

Propchange: directory/network/branches/chain_refactor/src/java/org/apache/mina/common/DefaultIoFilterChainBuilder.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

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=349900&r1=349899&r2=349900&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 Tue Nov 29 22:58:56 2005
@@ -43,12 +43,6 @@
     Entry get( String name );
     
     /**
-     * Returns the {@link Entry} with the specified {@link IoFilter} in this chain.
-     * @return <tt>null</tt> if there's no such filter in this chain.
-     */
-    Entry get( IoFilter filter );
-    
-    /**
      * Returns the list of all {@link Entry}s this chain contains.
      */
     List getAll();
@@ -78,25 +72,11 @@
     void addBefore( String baseName, String name, IoFilter filter ) throws Exception;
 
     /**
-     * Adds the specified filter with the specified name just before the specified
-     * <code>baseFilter</code> in this chain.
-     * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception.
-     */
-    void addBefore( IoFilter baseFilter, String name, IoFilter filter ) throws Exception;
-
-    /**
      * Adds the specified filter with the specified name just after the filter whose name is
      * <code>baseName</code> in this chain.
      * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception.
      */
     void addAfter( String baseName, String name, IoFilter filter ) throws Exception;
-
-    /**
-     * Adds the specified filter with the specified name just after the
-     * specified <tt>baseFilter</tt> in this chain.
-     * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception.
-     */
-    void addAfter( IoFilter baseFilter, String name, IoFilter filter ) throws Exception;
 
     /**
      * Removes the filter with the specified name from this chain.

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=349900&r1=349899&r2=349900&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 Tue Nov 29 22:58:56 2005
@@ -251,17 +251,6 @@
         return e;
     }
     
-    public Entry get( IoFilter filter )
-    {
-        Entry e = ( Entry ) filter2entry.get( filter );
-        if( e == null )
-        {
-            return null;
-        }
-        
-        return e;
-    }
-    
     public synchronized void addFirst( String name,
                                        IoFilter filter ) throws Exception
     {
@@ -285,29 +274,11 @@
         register( baseEntry.prevEntry, name, filter );
     }
 
-    public synchronized void addBefore( IoFilter baseFilter,
-                                        String name,
-                                        IoFilter filter ) throws Exception
-    {
-        EntryImpl baseEntry = getEntry( baseFilter );
-        checkAddable( name );
-        register( baseEntry.prevEntry, name, filter );
-    }
-
     public synchronized void addAfter( String baseName,
                                        String name,
                                        IoFilter filter ) throws Exception
     {
         EntryImpl baseEntry = checkOldName( baseName );
-        checkAddable( name );
-        register( baseEntry, name, filter );
-    }
-
-    public synchronized void addAfter( IoFilter baseFilter,
-                                       String name,
-                                       IoFilter filter ) throws Exception
-    {
-        EntryImpl baseEntry = getEntry( baseFilter );
         checkAddable( name );
         register( baseEntry, name, filter );
     }