CVS: plexus-container-new/src/java/org/apache/plexus/lifecycle/avalon AvalonComponentRepository.java,NONE,1.1 AvalonServiceSelector.java,1.3,1.4

[email protected] Sat, 10 May 2003 11:39:32 -0500
Newsgroups gmane.comp.java.plexus.devel
Message-ID <[email protected]>
Update of /cvsroot/plexus/plexus-container-new/src/java/org/apache/plexus/lifecycle/avalon
In directory eng.werken.com:/tmp/cvs-serv21976/src/java/org/apache/plexus/lifecycle/avalon

Modified Files:
	AvalonServiceSelector.java 
Added Files:
	AvalonComponentRepository.java 
Log Message:
Add support for ServiceSelectors (again).  The new 
AvalonComponentRepository is now the default.

The addComponentDescriptor method had to be modified to allow
protected access.  This may or may not be the ideal way, but
now it all works with pretty minimal changes.

--- NEW FILE: AvalonComponentRepository.java ---
package org.apache.plexus.lifecycle.avalon;

import org.apache.plexus.configuration.DefaultConfiguration;
import org.apache.plexus.service.repository.ComponentDescriptor;
import org.apache.plexus.service.repository.DefaultComponentRepository;

/**
 * A ComponentRepository for Avalon services that creates ServiceSelectors
 * for id'd components.
 * 
 * @author <a href="mailto:[email protected]">Dan Diephouse</a>
 * @since May 10, 2003
 */
public class AvalonComponentRepository extends DefaultComponentRepository
{
    /**
     * Adds a ComponentDescriptor.  If the descriptor has an Id or a RoleHint
     * a ServiceSelector is created also.
     * 
     * @see org.apache.plexus.service.repository.DefaultComponentRepository#addComponentDescriptor(org.apache.plexus.service.repository.ComponentDescriptor)
     */
    protected void addComponentDescriptor(ComponentDescriptor descriptor)
    {   
        super.addComponentDescriptor( descriptor );
        
        if ( descriptor.getId() != null ||
             descriptor.getRoleHint() != null )
        {
            if ( !hasService( descriptor.getRole() + "Selector" ) )
            {
                addServiceSelector(descriptor);
            }
        }
    }

    /**
     * @param descriptor
     */
    private void addServiceSelector(ComponentDescriptor descriptor)
    {
        ComponentDescriptor selDesc = createSelectorDescriptor( descriptor );

        addComponentDescriptor( selDesc );
    }

    /**
     * Create a ComponentDescriptor that represents a ServiceSelector for
     * a specified descriptor.
     * 
     * @param descriptor
     * @return
     */
    private ComponentDescriptor createSelectorDescriptor(ComponentDescriptor descriptor)
    {
        ComponentDescriptor selector = new ComponentDescriptor();
        selector.setRole( descriptor.getRole() + "Selector" );
        selector.setImplementation( AvalonServiceSelector.class.getName() );
        selector.setInstantiationStrategy( SINGLETON_STRATEGY );
        
        DefaultConfiguration config = new DefaultConfiguration( selector.getRole() );
        config.setAttribute( AvalonServiceSelector.SELECTABLE_ROLE_KEY, 
                             descriptor.getRole() );
        
        selector.setConfiguration( config );
        return selector;
    }
}

Index: AvalonServiceSelector.java
===================================================================
RCS file: /cvsroot/plexus/plexus-container-new/src/java/org/apache/plexus/lifecycle/avalon/AvalonServiceSelector.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- AvalonServiceSelector.java	24 Apr 2003 17:31:33 -0000	1.3
+++ AvalonServiceSelector.java	10 May 2003 16:39:29 -0000	1.4
@@ -89,7 +89,7 @@
     public Object select( Object hint )
         throws ServiceException
     {
-        return broker.lookup( hint + "+" + selectableRole );
+        return broker.lookup( selectableRole + hint );
     }
 
     /**
@@ -97,21 +97,7 @@
      */
     public boolean isSelectable( Object hint )
     {
-        try
-        {
-            if ( select( hint ) != null )
-            {
-                return true;
-            }
-        }
-        catch ( ServiceException e )
-        {
-            return false;
-        }
-        finally
-        {
-            return false;
-        }
+        return broker.hasService( selectableRole + hint );
     }
 
     /**