Author: cziegeler Date: Mon Nov 1 10:21:13 2004 New Revision: 56265 Added: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentHandler.java Modified: cocoon/trunk/src/blocks/python/java/org/apache/cocoon/components/language/programming/python/PythonProgram.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/acting/ServerPagesAction.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/XSPUtil.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/Program.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaProgram.java cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/javascript/JavascriptProgram.java cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java Log: Introduce ComponentHandler interface
Modified: cocoon/trunk/src/blocks/python/java/org/apache/cocoon/components/language/programming/python/PythonProgram.java ============================================================================== --- cocoon/trunk/src/blocks/python/java/org/apache/cocoon/components/language/programming/python/PythonProgram.java (original) +++ cocoon/trunk/src/blocks/python/java/org/apache/cocoon/components/language/programming/python/PythonProgram.java Mon Nov 1 10:21:13 2004 @@ -24,6 +24,7 @@ import org.apache.cocoon.components.language.programming.Program; import org.apache.cocoon.components.language.generator.CompiledComponent; import org.apache.cocoon.core.container.AbstractComponentHandler; +import org.apache.cocoon.core.container.ComponentHandler; import java.io.File; import java.util.Collection; @@ -61,9 +62,9 @@ return file.toString(); } - public AbstractComponentHandler getHandler(ServiceManager manager, + public ComponentHandler getHandler(ServiceManager manager, Context context) - throws Exception { + throws Exception { return AbstractComponentHandler.getComponentHandler( clazz, config, manager, context, getLogger(), null, null); Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/acting/ServerPagesAction.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/acting/ServerPagesAction.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/acting/ServerPagesAction.java Mon Nov 1 10:21:13 2004 @@ -28,6 +28,7 @@ import org.apache.cocoon.components.sax.XMLByteStreamCompiler; import org.apache.cocoon.components.sax.XMLByteStreamFragment; import org.apache.cocoon.core.container.AbstractComponentHandler; +import org.apache.cocoon.core.container.ComponentHandler; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.Request; @@ -79,7 +80,7 @@ public static final String ACTION_RESULT_OBJECT = "xsp-action:result"; public static final String ACTION_SUCCESS_OBJECT = "xsp-action:success"; - private AbstractComponentHandler generatorHandler; + private ComponentHandler generatorHandler; /* (non-Javadoc) * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java Mon Nov 1 10:21:13 2004 @@ -22,6 +22,7 @@ import org.apache.cocoon.components.language.programming.Program; import org.apache.cocoon.core.container.AbstractComponentHandler; import org.apache.cocoon.core.container.CocoonServiceSelector; +import org.apache.cocoon.core.container.ComponentHandler; import java.io.File; import java.util.ArrayList; @@ -99,7 +100,7 @@ Object hint, Program generator) throws Exception { try { - final AbstractComponentHandler handler = + final ComponentHandler handler = generator.getHandler(newManager, this.context ); handler.initialize(); this.componentHandlers.put(hint, handler); @@ -116,7 +117,7 @@ } public void removeGenerator(Object hint) { - AbstractComponentHandler handler = (AbstractComponentHandler) this.componentHandlers.remove(hint); + ComponentHandler handler = (ComponentHandler) this.componentHandlers.remove(hint); if (handler != null) { handler.dispose(); this.classManager.reinstantiate(); Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/XSPUtil.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/XSPUtil.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/markup/xsp/XSPUtil.java Mon Nov 1 10:21:13 2004 @@ -133,12 +133,12 @@ } public static String formEncode(String text) throws Exception { - return URLEncoder.encode(text); + return URLEncoder.encode(text, "utf-8"); } // Shameless, ain't it? public static String formDecode(String s) throws Exception { - return URLDecoder.decode(s); + return URLDecoder.decode(s, "utf-8"); } /* Logicsheet Utility Methods */ Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/Program.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/Program.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/Program.java Mon Nov 1 10:21:13 2004 @@ -19,7 +19,7 @@ import org.apache.avalon.framework.service.ServiceManager; import org.apache.cocoon.components.language.generator.CompiledComponent; -import org.apache.cocoon.core.container.AbstractComponentHandler; +import org.apache.cocoon.core.container.ComponentHandler; /** * This interface states the functionality of a program. @@ -38,7 +38,7 @@ /** * Get ComponentHandler which holds instances of this program. */ - AbstractComponentHandler getHandler(ServiceManager manager, + ComponentHandler getHandler(ServiceManager manager, Context context) throws Exception; /** Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaProgram.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaProgram.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/java/JavaProgram.java Mon Nov 1 10:21:13 2004 @@ -23,6 +23,7 @@ import org.apache.cocoon.components.language.generator.CompiledComponent; import org.apache.cocoon.components.language.programming.Program; import org.apache.cocoon.core.container.AbstractComponentHandler; +import org.apache.cocoon.core.container.ComponentHandler; /** * This represents program in Java language. @@ -43,7 +44,7 @@ return program.getName(); } - public AbstractComponentHandler getHandler(ServiceManager manager, + public ComponentHandler getHandler(ServiceManager manager, Context context) throws Exception { Modified: cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/javascript/JavascriptProgram.java ============================================================================== --- cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/javascript/JavascriptProgram.java (original) +++ cocoon/trunk/src/blocks/xsp/java/org/apache/cocoon/components/language/programming/javascript/JavascriptProgram.java Mon Nov 1 10:21:13 2004 @@ -24,6 +24,7 @@ import org.apache.cocoon.components.language.generator.CompiledComponent; import org.apache.cocoon.components.language.programming.Program; import org.apache.cocoon.core.container.AbstractComponentHandler; +import org.apache.cocoon.core.container.ComponentHandler; import java.io.File; import java.util.Collection; @@ -63,7 +64,7 @@ return file.toString(); } - public AbstractComponentHandler getHandler(ServiceManager manager, + public ComponentHandler getHandler(ServiceManager manager, Context context) throws Exception { Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java Mon Nov 1 10:21:13 2004 @@ -32,7 +32,8 @@ * * @version CVS $Id: AbstractComponentHandler.java 55144 2004-10-20 12:26:09Z ugo $ */ -public abstract class AbstractComponentHandler { +public abstract class AbstractComponentHandler +implements ComponentHandler { private final Object referenceSemaphore = new Object(); private int references = 0; @@ -61,7 +62,7 @@ * * @throws Exception If there were any problems obtaining a ComponentHandler */ - public static AbstractComponentHandler getComponentHandler( final Class componentClass, + public static ComponentHandler getComponentHandler( final Class componentClass, final Configuration configuration, final ServiceManager serviceManager, final Context context, @@ -217,15 +218,15 @@ return ( this.references == 0 ); } - /** - * Dispose of the component handler and any associated Pools and Factories. + /* (non-Javadoc) + * @see org.apache.cocoon.core.container.ComponentHandler#dispose() */ public void dispose() { this.disposed = true; } - /** - * Initialize this handler + /* (non-Javadoc) + * @see org.apache.cocoon.core.container.ComponentHandler#initialize() */ public void initialize() throws Exception { if( this.initialized ) { Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java Mon Nov 1 10:21:13 2004 @@ -105,7 +105,7 @@ * * @throws Exception If there were any problems obtaining a ComponentHandler */ - protected AbstractComponentHandler getComponentHandler( final Class componentClass, + protected ComponentHandler getComponentHandler( final Class componentClass, final Configuration configuration, final ServiceManager serviceManager) throws Exception { Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java Mon Nov 1 10:21:13 2004 @@ -84,7 +84,7 @@ throw new ServiceException( role, message ); } - AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( role ); + ComponentHandler handler = (ComponentHandler)this.componentHandlers.get( role ); // Retrieve the instance of the requested component if ( handler == null ) { @@ -226,8 +226,8 @@ // will never be released by more than one thread, this method does not need any // synchronization around the access to the map. - final AbstractComponentHandler handler = - (AbstractComponentHandler)this.componentMapping.get( component ); + final ComponentHandler handler = + (ComponentHandler)this.componentMapping.get( component ); if ( handler != null ) { // ThreadSafe components will always be using a ThreadSafeComponentHandler, @@ -312,8 +312,8 @@ super.initialize(); for( int i = 0; i < this.newComponentHandlers.size(); i++ ) { - final AbstractComponentHandler handler = - (AbstractComponentHandler)this.newComponentHandlers.get( i ); + final ComponentHandler handler = + (ComponentHandler)this.newComponentHandlers.get( i ); try { handler.initialize(); } catch( Exception e ) { @@ -332,8 +332,8 @@ for( int i = 0; i < keys.size(); i++ ) { final Object key = keys.get( i ); - final AbstractComponentHandler handler = - (AbstractComponentHandler)this.componentHandlers.get( key ); + final ComponentHandler handler = + (ComponentHandler)this.componentHandlers.get( key ); if( !this.newComponentHandlers.contains( handler ) ) { try { @@ -366,8 +366,8 @@ iterator.hasNext(); ) { final Object role = iterator.next(); - final AbstractComponentHandler handler = - (AbstractComponentHandler)componentHandlers.get( role ); + final ComponentHandler handler = + (ComponentHandler)componentHandlers.get( role ); if( forceDisposal || handler.canBeDisposed() ) { if( forceDisposal && getLogger().isWarnEnabled() ) { @@ -416,7 +416,7 @@ this.getLogger().debug( "Attempting to get handler for role [" + role + "]" ); } - final AbstractComponentHandler handler = this.getComponentHandler( component, + final ComponentHandler handler = this.getComponentHandler( component, configuration, this); Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java ============================================================================== --- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java (original) +++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java Mon Nov 1 10:21:13 2004 @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; @@ -83,7 +82,7 @@ "You cannot select a component from a disposed service selector." ); } - AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( key ); + ComponentHandler handler = (ComponentHandler)this.componentHandlers.get( key ); // Retrieve the instance of the requested component if( null == handler ) { @@ -152,7 +151,7 @@ boolean exists = false; try { - AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( key ); + ComponentHandler handler = (ComponentHandler)this.componentHandlers.get( key ); exists = (handler != null); } catch( Throwable t ) { // We can safely ignore all exceptions @@ -178,8 +177,8 @@ this.parentSelector.release(component); } else { - final AbstractComponentHandler handler = - (AbstractComponentHandler)this.componentMapping.get( component ); + final ComponentHandler handler = + (ComponentHandler)this.componentMapping.get( component ); if( null == handler ) { this.getLogger().warn( "Attempted to release a " + component.getClass().getName() @@ -281,8 +280,8 @@ for( int i = 0; i < keys.size(); i++ ) { final Object key = keys.get( i ); - final AbstractComponentHandler handler = - (AbstractComponentHandler)this.componentHandlers.get( key ); + final ComponentHandler handler = + (ComponentHandler)this.componentHandlers.get( key ); try { handler.initialize(); @@ -305,8 +304,8 @@ while( keys.hasNext() ) { Object key = keys.next(); - AbstractComponentHandler handler = - (AbstractComponentHandler)this.componentHandlers.get( key ); + ComponentHandler handler = + (ComponentHandler)this.componentHandlers.get( key ); handler.dispose(); @@ -330,15 +329,6 @@ super.dispose(); } - /** - * Makes the ComponentHandlers available to subclasses. - * - * @return A reference to the componentHandler Map. - */ - protected Map getComponentHandlers() { - return this.componentHandlers; - } - /** Add a new component to the manager. * @param key the key for the new component. * @param component the class of this component. @@ -354,7 +344,7 @@ } try { - final AbstractComponentHandler handler = getComponentHandler( component, + final ComponentHandler handler = getComponentHandler( component, configuration, this.serviceManager); @@ -460,7 +450,5 @@ } return this.componentMapping.containsKey( component ); } - - } Added: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentHandler.java ============================================================================== --- (empty file) +++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentHandler.java Mon Nov 1 10:21:13 2004 @@ -0,0 +1,64 @@ +/* + * Copyright 2002-2004 The Apache Software Foundation + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.core.container; + +/** + * This class acts like a Factory to instantiate the correct version + * of the component handler that you need. + * + * @version CVS $Id: AbstractComponentHandler.java 55144 2004-10-20 12:26:09Z ugo $ + */ +public interface ComponentHandler { + + /** + * Get an instance of the type of component handled by this handler. + * + * @return an instance + * @exception Exception if an error occurs + */ + Object get() throws Exception; + + /** + * Put back an instance of the type of component handled by this handler. + * + * @param component a service + * @exception Exception if an error occurs + */ + void put( Object component ) + throws Exception; + + /** + * Returns <code>true</code> if this component handler can safely be + * disposed (i.e. none of the components it is handling are still + * being used). + * + * @return <code>true</code> if this component handler can safely be + * disposed; <code>false</code> otherwise + */ + boolean canBeDisposed(); + + /** + * Dispose of the component handler and any associated Pools and Factories. + */ + public void dispose(); + + /** + * Initialize this handler + */ + void initialize() throws Exception; + +}