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 }