001    /*******************************************************************************
002     * Copyright (C) PicoContainer Organization. All rights reserved. 
003     * ---------------------------------------------------------------------------
004     * The software in this package is published under the terms of the BSD style
005     * license a copy of which has been included with this distribution in the
006     * LICENSE.txt file.
007     ******************************************************************************/
008    package org.picocontainer.web.webwork;
009    
010    import webwork.action.Action;
011    import webwork.action.factory.ActionFactory;
012    import webwork.action.factory.AliasingActionFactoryProxy;
013    import webwork.action.factory.ChainingActionFactoryProxy;
014    import webwork.action.factory.CommandActionFactoryProxy;
015    import webwork.action.factory.ContextActionFactoryProxy;
016    import webwork.action.factory.ParametersActionFactoryProxy;
017    import webwork.action.factory.PrefixActionFactoryProxy;
018    import webwork.action.factory.PrepareActionFactoryProxy;
019    
020    /**
021     * Custom webwork action lifecycle that ensures actions are treated as pico components.
022     */
023    public class WebWorkActionFactory extends ActionFactory {
024    
025        private ActionFactory factory;
026    
027        public WebWorkActionFactory() {
028            // replace standard JavaActionFactory with PicoActionFactory
029            factory = new PicoActionFactory();
030            // the rest are the standard webwork ActionFactoryProxies
031            factory = new PrefixActionFactoryProxy(factory);
032            factory = new CommandActionFactoryProxy(factory);
033            factory = new AliasingActionFactoryProxy(factory);
034            factory = new CommandActionFactoryProxy(factory);
035            factory = new ContextActionFactoryProxy(factory);
036            factory = new PrepareActionFactoryProxy(factory);
037            factory = new ParametersActionFactoryProxy(factory);
038            factory = new ChainingActionFactoryProxy(factory);
039        }
040    
041        public Action getActionImpl(String actionName) throws Exception {
042            return factory.getActionImpl(actionName);
043        }
044    
045    }