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;
+ }
+
}
}