tcurdt 02/02/18 06:45:22 Added: src/scratchpad/src/org/apache/cocoon/acting AbstractMethodAction.java MultiAction.java Log: first version of the "multiple actions per class" action, the MultiAction is an example Revision Changes Path 1.1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/AbstractMethodAction.java Index: AbstractMethodAction.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache Cocoon" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.cocoon.acting; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.SourceResolver; import java.util.HashMap; import java.util.Map; import java.lang.reflect.Method; /** * The <code>AbstractMethodAction</code> provides a way * to call methods of an action specified by * the <code>method</code> parameter. * This can be extremly useful for action-sets. * * @author <a href="mailto:[EMAIL PROTECTED]">Torsten Curdt</a> */ public abstract class AbstractMethodAction extends ConfigurableComposerAction { private static final String ACTION_METHOD_PREFIX = "do"; private static final String ACTION_METHOD_PARAMETER = "method"; private HashMap methodIndex; public void configure(Configuration conf) throws ConfigurationException { super.configure(conf); try { Method[] methods = this.getClass().getMethods(); methodIndex = new HashMap(); int prefixLen = ACTION_METHOD_PREFIX.length(); for (int i = 0; i < methods.length; i++) { String methodName = methods[i].getName(); if (methodName.startsWith(ACTION_METHOD_PREFIX)) { String actionName = methodName.substring(prefixLen,prefixLen+1).toLowerCase() + methodName.substring(prefixLen+1); methodIndex.put(methodName, methods[i]); if (getLogger().isDebugEnabled()) { getLogger().debug("registered method \"" + methodName + "\" as action \"" + actionName + "\""); } } } } catch(Exception e) { throw new ConfigurationException("cannot get methods by reflection",e); } } public Map act( Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception { String actionMethod = parameters.getParameter(ACTION_METHOD_PARAMETER,null); if (actionMethod != null) { Method method = (Method) methodIndex.get(actionMethod); if (method != null) { return((Map) method.invoke(this, new Object[]{ redirector,resolver,objectModel,source,parameters })); } else { throw new Exception("action has no method \"" + actionMethod + "\""); } } else { throw new Exception("you need to specify the method with parameter \"" + ACTION_METHOD_PARAMETER + "\""); } } } 1.1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/MultiAction.java Index: MultiAction.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache Cocoon" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.cocoon.acting; import org.apache.cocoon.Constants; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.SourceResolver; import java.util.Map; /** * This is just a simple example how to use the new * action syntax. We should create a sample for this. * @author <a href="mailto:[EMAIL PROTECTED]">Torsten Curdt</a> */ public class MultiAction extends AbstractMethodAction implements ThreadSafe { public Map doAdd( Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters par ) throws Exception { getLogger().debug("add called"); return(EMPTY_MAP); } public Map doDelete( Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters par ) throws Exception { getLogger().debug("delete called"); return(EMPTY_MAP); } public Map doUpdate( Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters par ) throws Exception { getLogger().debug("update called"); return(EMPTY_MAP); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]