cziegeler    2004/05/16 08:20:48

  Modified:    src/blocks/xmldb/java/org/apache/cocoon/components/source/impl
                        XMLDBSource.java
               src/java/org/apache/cocoon/components ComponentContext.java
  Log:
  A service manager should return a service selector
  (Using proxies would be better)
  
  Revision  Changes    Path
  1.16      +4 -4      
cocoon-2.1/src/blocks/xmldb/java/org/apache/cocoon/components/source/impl/XMLDBSource.java
  
  Index: XMLDBSource.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/xmldb/java/org/apache/cocoon/components/source/impl/XMLDBSource.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XMLDBSource.java  16 May 2004 12:19:18 -0000      1.15
  +++ XMLDBSource.java  16 May 2004 15:20:48 -0000      1.16
  @@ -15,13 +15,13 @@
    */
   package org.apache.cocoon.components.source.impl;
   
  -import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.ServiceSelector;
   import org.apache.cocoon.CascadingIOException;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.ResourceNotFoundException;
  @@ -441,12 +441,12 @@
       throws IOException {
   
           ServiceManager manager = null;
  -        ComponentSelector serializerSelector = null;
  +        ServiceSelector serializerSelector = null;
           Serializer serializer = null;
           // this.manager does not have Serializer
           try {
               manager = (ServiceManager) 
this.context.get(ContextHelper.CONTEXT_SITEMAP_SERVICE_MANAGER);
  -            serializerSelector = (ComponentSelector) 
manager.lookup(Serializer.ROLE + "Selector");
  +            serializerSelector = (ServiceSelector) 
manager.lookup(Serializer.ROLE + "Selector");
               serializer = (Serializer)serializerSelector.select("xml");
               ByteArrayOutputStream os = new ByteArrayOutputStream();
               serializer.setOutputStream(os);
  
  
  
  1.6       +54 -2     
cocoon-2.1/src/java/org/apache/cocoon/components/ComponentContext.java
  
  Index: ComponentContext.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/ComponentContext.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ComponentContext.java     5 Mar 2004 13:02:45 -0000       1.5
  +++ ComponentContext.java     16 May 2004 15:20:48 -0000      1.6
  @@ -20,11 +20,13 @@
   import org.apache.avalon.framework.component.Component;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.context.DefaultContext;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.ServiceSelector;
   import org.apache.cocoon.environment.Environment;
   
   /**
  @@ -141,7 +143,11 @@
            */
           public Object lookup(String role) throws ServiceException {
               try {
  -                return this.manager.lookup(role);
  +                Object o = this.manager.lookup(role);
  +                if ( o instanceof ComponentSelector ) {
  +                    o = new ComponentSelectorWrapper((ComponentSelector)o);
  +                }
  +                return o;
               } catch (ComponentException ce) {
                   throw new ServiceException("ComponentManagerWrapper", 
"Unable to lookup component: " + role, ce);
               }
  @@ -151,7 +157,53 @@
            * @see 
org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object)
            */
           public void release(Object c) {
  +            if ( c instanceof ComponentSelectorWrapper ) {
  +                c = ((ComponentSelectorWrapper)c).getComponent();
  +            }
               this.manager.release((Component)c);
           }
  +    }
  +    
  +    public static final class ComponentSelectorWrapper implements 
ServiceSelector {
  +        
  +        protected final ComponentSelector selector;
  +        
  +        public ComponentSelectorWrapper(ComponentSelector s) {
  +            this.selector = s;
  +        }
  +
  +        /* (non-Javadoc)
  +         * @see 
org.apache.avalon.framework.service.ServiceSelector#isSelectable(java.lang.Object)
  +         */
  +        public boolean isSelectable(Object role) {
  +            return this.selector.hasComponent(role);
  +        }
  +        
  +        /* (non-Javadoc)
  +         * @see 
org.apache.avalon.framework.service.ServiceSelector#release(java.lang.Object)
  +         */
  +        public void release(Object role) {
  +            this.selector.release((Component)role);
  +        }
  +        
  +        /* (non-Javadoc)
  +         * @see 
org.apache.avalon.framework.service.ServiceSelector#select(java.lang.Object)
  +         */
  +        public Object select(Object role) throws ServiceException {
  +            try {
  +                Object o = this.selector.select(role);
  +                if ( o instanceof ComponentSelector ) {
  +                    o = new ComponentSelectorWrapper((ComponentSelector)o);
  +                }
  +                return o;
  +            } catch (ComponentException ce) {
  +                throw new ServiceException("ComponentServiceWrapper", 
"Unable to lookup component: " + role, ce);
  +            }
  +        }
  +        
  +        public ComponentSelector getComponent() {
  +            return this.selector;
  +        }
  +        
       }
   }
  
  
  

Reply via email to