You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2002/06/27 11:48:06 UTC

cvs commit: jakarta-avalon-excalibur/microcontainer/src/test/org/apache/excalibur/microcontainer/test Chooser.java ChooserImpl.java SelectorTestCase.java

leosutic    2002/06/27 02:48:06

  Added:       microcontainer/src/java/org/apache/excalibur/microcontainer
                        AbstractManager.java
                        MicroContainerServiceManager.java
               microcontainer/src/test/org/apache/excalibur/microcontainer/test
                        Chooser.java ChooserImpl.java SelectorTestCase.java
  Log:
  no message
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/microcontainer/src/java/org/apache/excalibur/microcontainer/AbstractManager.java
  
  Index: AbstractManager.java
  ===================================================================
  package org.apache.excalibur.microcontainer;
  
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  
  /**
   * Abstract implementation of a lookup service.
   */
  abstract class AbstractManager 
  {
      private final HashMap handlers = new HashMap ();
      private final HashMap used = new HashMap ();
      
      protected AbstractManager( Map components ) 
      {
          Iterator iter = components.keySet().iterator();
          while (iter.hasNext()) 
          {
              Object key = iter.next();
              Object component = components.get( key );
              
              // Verify that component is a MicroContainerProxy...
              
              handlers.put( key, translateEntry(component) );
          }
      }
      
      protected abstract Object translateEntry( Object entry );
      
      protected boolean has( Object key ) 
      {
          return handlers.containsKey( key );
      }
      
      protected synchronized Object doLookup( Object key ) 
      {
          Object object = handlers.get( key );
          if( object instanceof MicroContainerProxy )
          {
              MicroContainerProxy handler = (MicroContainerProxy) object;
              
              Object component = handler.MicroContainerProxy__newInstance();
              
              used.put( component, handler );
              
              return component;
          }
          else
          {
              return object;
          }
      }
      
      protected synchronized void doRelease( Object instance ) 
      {
          if( instance instanceof AbstractManager )
          {
              // We're getting a XXXXSelector back.
          }
          else
          {
              MicroContainerProxy handler = (MicroContainerProxy) used.remove( instance );
              
              handler.MicroContainerProxy__releaseInstance( instance );
          }
      }    
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/microcontainer/src/java/org/apache/excalibur/microcontainer/MicroContainerServiceManager.java
  
  Index: MicroContainerServiceManager.java
  ===================================================================
  package org.apache.excalibur.microcontainer;
  
  import java.util.Map;
  
  import org.apache.avalon.framework.service.ServiceManager;
  
  /**
   * An implementation of the ServiceManager interface for
   * MicroContainers.
   */
  class MicroContainerServiceManager extends AbstractManager implements ServiceManager 
  {
      
      public MicroContainerServiceManager( Map components ) 
      {
          super( components );
      }
      
      public boolean hasService( String role ) 
      {
          return super.has( role );
      }
      
      public boolean isSelectable( Object hint ) 
      {
          return super.has( hint );
      }
      
      public Object lookup( String role ) 
      {
          return super.doLookup( role );
      }
      
      public synchronized void release( Object instance ) 
      {
          super.doRelease( instance );
      }    
      
      public Object select( Object hint ) 
      {
          return super.doLookup( hint );
      }
      
      protected Object translateEntry( Object entry )
      {
          if( entry instanceof Map )
          {
              return new MicroContainerServiceManager( (Map) entry );
          }
          else
          {
              return entry;
          }
      }
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/microcontainer/src/test/org/apache/excalibur/microcontainer/test/Chooser.java
  
  Index: Chooser.java
  ===================================================================
  package org.apache.excalibur.microcontainer.test;
  
  import org.apache.avalon.framework.component.Component;
  
  public interface Chooser extends Component 
  {
      public static final String ROLE = Chooser.class.getName();
      
      public int choose( String role, Object hint ) throws Exception;
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/microcontainer/src/test/org/apache/excalibur/microcontainer/test/ChooserImpl.java
  
  Index: ChooserImpl.java
  ===================================================================
  package org.apache.excalibur.microcontainer.test;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.ComponentSelector;
  import org.apache.avalon.framework.component.Composable;
  
  public class ChooserImpl implements Chooser, Composable {
      
      private ComponentManager manager;
      
      public void compose( ComponentManager manager ) 
      {
          this.manager = manager;
      }
      
      public int choose( String role, Object hint ) throws Exception
      {
          ComponentSelector selector = (ComponentSelector) manager.lookup( role );
          Supplier supplier = (Supplier) selector.select( hint );
          try
          {
              return supplier.getId();
          }
          finally
          {
              selector.release( supplier );
              manager.release( selector );
          }
      }
  }
  
  
  1.1                  jakarta-avalon-excalibur/microcontainer/src/test/org/apache/excalibur/microcontainer/test/SelectorTestCase.java
  
  Index: SelectorTestCase.java
  ===================================================================
  package org.apache.excalibur.microcontainer.test;
  
  import junit.framework.TestCase;
  
  import org.apache.excalibur.microcontainer.MicroContainer;
  
  public class SelectorTestCase extends TestCase
  {
      
      public SelectorTestCase(String name) 
      {
          super(name);
      }
      
      public void testChooserImpl() throws Exception 
      {
          Supplier supplier1 = SupplierImpl.getInstance (1);
          Supplier supplier2 = SupplierImpl.getInstance (2);
          
          Chooser chooser = (Chooser) new MicroContainer( ChooserImpl.class )
              .component( Supplier.ROLE, new Integer(1), supplier1 )
              .component( Supplier.ROLE, new Integer(2), supplier2 )
              .sharedInstance( true )
              .create();
          
          assertEquals( 1, chooser.choose( Supplier.ROLE, new Integer(1) ) );
          assertEquals( 2, chooser.choose( Supplier.ROLE, new Integer(2) ) );
          
          MicroContainer.release( chooser );
          MicroContainer.release( supplier2 );
          MicroContainer.release( supplier1 );
      }    
      
      public void testIllegalState() throws Exception 
      {
          Supplier supplier1 = SupplierImpl.getInstance (1);
          
          try 
          {
              Chooser chooser = (Chooser) new MicroContainer( ChooserImpl.class )
                  .component( Supplier.ROLE, supplier1 )
                  .component( Supplier.ROLE, new Integer(1), supplier1 )
                  .sharedInstance( true )
                  .create();
              fail( "IllegalStateException not thrown, although invalid mapping attempted." );
          } 
          catch( IllegalStateException ie )
          {
          }
          
          try 
          {
              Chooser chooser = (Chooser) new MicroContainer( ChooserImpl.class )
                  .component( Supplier.ROLE, new Integer(1), supplier1 )
                  .component( Supplier.ROLE, supplier1 )
                  .sharedInstance( true )
                  .create();
              fail( "IllegalStateException not thrown, although invalid mapping attempted." );
          } 
          catch( IllegalStateException ie )
          {
          }
      }
  }
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>