avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From craft...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup FortressComponentManager.java FortressComponentSelector.java FortressServiceManager.java
Date Tue, 09 Jul 2002 10:40:26 GMT
crafterm    2002/07/09 03:40:26

  Modified:    fortress/src/java/org/apache/excalibur/fortress/lookup
                        FortressComponentManager.java
                        FortressComponentSelector.java
                        FortressServiceManager.java
  Log:
  Refactored Component/Service Manager and Component/Service Selector
  classes to remove duplicated code.
  
  ComponentManager is now implemented in terms of a ServiceManager, and
  likewise for ComponentSelector.
  
  Revision  Changes    Path
  1.4       +12 -82    jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressComponentManager.java
  
  Index: FortressComponentManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressComponentManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FortressComponentManager.java	8 Jul 2002 11:58:58 -0000	1.3
  +++ FortressComponentManager.java	9 Jul 2002 10:40:26 -0000	1.4
  @@ -16,6 +16,7 @@
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.excalibur.fortress.Container;
   import org.apache.excalibur.fortress.handler.ComponentHandler;
  +import org.apache.excalibur.fortress.lookup.FortressServiceManager;
   
   /**
    * This is the Default ComponentManager for the Container.  It provides
  @@ -23,13 +24,12 @@
    * the references.
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  + * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
    * @version CVS $Revision$ $Date$
    */
   public class FortressComponentManager implements ComponentManager
   {
  -    private final Container m_components;
  -    private final BucketMap m_used;
  -    private final ComponentManager m_parent;
  +    private final ServiceManager m_proxy;
   
       /**
        * This constructor is for a ContainerComponentManager with no parent
  @@ -53,103 +53,33 @@
        */
       public FortressComponentManager( final Container container, final ComponentManager
parent )
       {
  -        m_parent = parent;
  -        m_components = container;
  -        m_used = new BucketMap();
  +        m_proxy = new FortressServiceManager( container, parent );
       }
   
       public Component lookup( String role )
           throws ComponentException
       {
  -        Object temp = null;
  -
           try
           {
  -            temp = m_components.get( role, null );
  -        }
  -        catch( ServiceException ce )
  -        {
  -            /* Logic is thus:
  -             *  If we have the component and the get threw an exception, we need to report
that.
  -             *  Otherwise, do the lookup on our parent
  -             *  Otherwise, just throw the exception
  -             */
  -            if( m_components.has( role, null )  )
  -            {
  -                throw new ComponentException( role, ce.getMessage(), ce);
  -
  -            }
  -            else if( null != m_parent )
  -            {
  -                return m_parent.lookup( role );
  -            }
  -            else
  -            {
  -                throw new ComponentException( role, ce.getMessage(), ce);
  -            }
  -        }
  -
  -        if( temp instanceof ComponentSelector )
  -        {
  -            return (Component)temp;
  -        }
  -
  -        if( !( temp instanceof ComponentHandler ) )
  -        {
  -            throw new ComponentException( role, "Invalid entry in component manager" );
  +            return ( Component ) m_proxy.lookup( role );
           }
  -
  -        ComponentHandler handler = (ComponentHandler)temp;
  -
  -        final Component component;
  -
  -        try
  +        catch ( ClassCastException e )
           {
  -            if( !handler.isInitialized() )
  -            {
  -                handler.initialize();
  -            }
  -
  -            component = (Component)handler.get();
  +            throw new ComponentException( role, "FortressComponentManager only supports
Components", e );
           }
  -        catch( ComponentException ce )
  +        catch ( ServiceException e )
           {
  -            throw ce; // rethrow
  +            throw new ComponentException( role, "Exception thrown during lookup", e );
           }
  -        catch( Exception e )
  -        {
  -            throw new ComponentException( role, "Could not return a reference to the Component",
e );
  -        }
  -
  -        m_used.put( component, handler );
  -
  -        return component;
       }
   
       public boolean hasComponent( String role )
       {
  -        final boolean hasComponent = m_components.has( role, null );
  -
  -        if( !hasComponent && null != m_parent )
  -        {
  -            return m_parent.hasComponent( role );
  -        }
  -
  -        return hasComponent;
  +        return m_proxy.hasService( role );
       }
   
       public void release( Component component )
       {
  -        final ComponentHandler handler;
  -
  -        handler = (ComponentHandler)m_used.remove( component );
  -
  -        if( null == handler && null != m_parent )
  -        {
  -            m_parent.release( component );
  -            return;
  -        }
  -
  -        handler.put( component );
  +        m_proxy.release( component );
       }
   }
  
  
  
  1.3       +13 -46    jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressComponentSelector.java
  
  Index: FortressComponentSelector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressComponentSelector.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FortressComponentSelector.java	8 Jul 2002 11:58:58 -0000	1.2
  +++ FortressComponentSelector.java	9 Jul 2002 10:40:26 -0000	1.3
  @@ -12,8 +12,10 @@
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.service.ServiceException;
  +import org.apache.avalon.framework.service.ServiceSelector;
   import org.apache.excalibur.fortress.Container;
   import org.apache.excalibur.fortress.handler.ComponentHandler;
  +import org.apache.excalibur.fortress.lookup.FortressServiceSelector;
   
   /**
    * This is the Default ComponentSelector for the Container.  It provides
  @@ -21,79 +23,44 @@
    * the references.
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  + * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
    * @version CVS $Revision$ $Date$
    */
   public class FortressComponentSelector implements ComponentSelector
   {
  +    private final ServiceSelector m_proxy;
       private final String m_role;
  -    private final Container m_components;
  -    private final BucketMap m_used;
   
       public FortressComponentSelector( final Container container, final String role )
       {
  +        m_proxy = new FortressServiceSelector( container, role );
           m_role = role;
  -        m_components = container;
  -        m_used = new BucketMap();
       }
   
       public Component select( final Object hint )
           throws ComponentException
       {
  -        if( null == hint )
  -        {
  -            throw new IllegalArgumentException( "hint cannot be null" );
  -        }
  -
  -        ComponentHandler handler = null;
           try
           {
  -        	handler = (ComponentHandler)m_components.get( m_role, hint );
  -        } catch (ServiceException se)
  -        {
  -            throw new ComponentException( hint.toString(), se.getMessage(), se);
  +            return (Component) m_proxy.select( hint );
           }
  -
  -        if( null == handler )
  +        catch( ClassCastException e )
           {
  -            throw new ComponentException( m_role + "/" + hint.toString(), "The hint does
not exist in the ComponentSelector" );
  +            throw new ComponentException( m_role, "FortressComponentSelector only supports
Components", e );
           }
  -
  -        final Component component;
  -
  -        try
  +        catch( ServiceException e )
           {
  -            if( !handler.isInitialized() )
  -            {
  -                handler.initialize();
  -            }
  -
  -            component = (Component)handler.get();
  +            throw new ComponentException( m_role, "Exception thrown during select", e );
           }
  -        catch( ComponentException ce )
  -        {
  -            throw ce; // rethrow
  -        }
  -        catch( Exception e )
  -        {
  -            throw new ComponentException( m_role + "/" + hint.toString(), "Could not return
a reference to the Component", e );
  -        }
  -
  -        m_used.put( component, handler );
  -
  -        return component;
       }
   
       public boolean hasComponent( Object hint )
       {
  -        return m_components.has( m_role, hint );
  +        return m_proxy.isSelectable( hint );
       }
   
       public void release( Component component )
       {
  -        final ComponentHandler handler;
  -
  -        handler = (ComponentHandler)m_used.remove( component );
  -
  -        handler.put( component );
  +        m_proxy.release( component );
       }
   }
  
  
  
  1.3       +3 -2      jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java
  
  Index: FortressServiceManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FortressServiceManager.java	8 Jul 2002 11:58:58 -0000	1.2
  +++ FortressServiceManager.java	9 Jul 2002 10:40:26 -0000	1.3
  @@ -9,6 +9,7 @@
   
   import org.apache.avalon.excalibur.collections.BucketMap;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.ServiceSelector;
  @@ -89,7 +90,7 @@
               }
           }
   
  -        if( temp instanceof ServiceSelector )
  +        if( temp instanceof ServiceSelector || temp instanceof ComponentSelector )
           {
               return temp;
           }
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message