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 ); } /**