Title: [waffle-scm] [886] sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java: better composition
Revision
886
Author
paul
Date
2009-01-15 16:31:21 -0600 (Thu, 15 Jan 2009)

Log Message

better composition

Modified Paths


Diff

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java (885 => 886)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	2009-01-15 20:24:08 UTC (rev 885)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	2009-01-15 22:31:21 UTC (rev 886)
@@ -2,9 +2,7 @@
 
 import org.picocontainer.web.WebappComposer;
 import org.picocontainer.MutablePicoContainer;
-import org.picocontainer.Characteristics;
 import org.picocontainer.Parameter;
-import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.registrar.pico.ParameterResolver;
 import org.codehaus.waffle.view.ViewDispatcher;
 import org.codehaus.waffle.view.DefaultViewDispatcher;
@@ -12,6 +10,8 @@
 import org.codehaus.waffle.view.DefaultViewResolver;
 import org.codehaus.waffle.validation.Validator;
 import org.codehaus.waffle.validation.DefaultValidator;
+import org.codehaus.waffle.validation.ErrorsContext;
+import org.codehaus.waffle.validation.DefaultErrorsContext;
 import org.codehaus.waffle.monitor.ActionMonitor;
 import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.monitor.BindMonitor;
@@ -47,130 +47,146 @@
 import org.codehaus.waffle.action.RequestParameterMethodNameResolver;
 
 import javax.servlet.ServletContext;
-import java.util.Enumeration;
 
-public class WaffleWebappComposer implements WebappComposer {
+public abstract class WaffleWebappComposer implements WebappComposer {
 
-    private static final String REGISTER_KEY = "register:";
-    private static final String REGISTER_NON_CACHING_KEY = "registerNonCaching:";
-
     private ParameterResolver parameterResolver;
 
     public void composeApplication(MutablePicoContainer picoContainer, ServletContext servletContext) {
         picoContainer.addComponent(servletContext);
 
         // add all known components
-        picoContainer.addComponent(ActionMethodExecutor.class, locateComponentClass((Object) ActionMethodExecutor.class, (Class<?>) InterceptingActionMethodExecutor.class, servletContext));
-        picoContainer.addComponent(ActionMethodResponseHandler.class, locateComponentClass((Object) ActionMethodResponseHandler.class, (Class<?>) DefaultActionMethodResponseHandler.class, servletContext));
-        picoContainer.addComponent(ArgumentResolver.class, locateComponentClass((Object) ArgumentResolver.class, (Class<?>) HierarchicalArgumentResolver.class, servletContext));
-        picoContainer.addComponent(MethodDefinitionFinder.class, locateComponentClass((Object) MethodDefinitionFinder.class, (Class<?>) AnnotatedMethodDefinitionFinder.class, servletContext));
-        picoContainer.addComponent(MethodNameResolver.class, locateComponentClass((Object) MethodNameResolver.class, (Class<?>) RequestParameterMethodNameResolver.class, servletContext));
-        picoContainer.addComponent(BindErrorMessageResolver.class, locateComponentClass((Object) BindErrorMessageResolver.class, (Class<?>) OgnlBindErrorMessageResolver.class, servletContext));
-        picoContainer.addComponent(ControllerDataBinder.class, locateComponentClass((Object) ControllerDataBinder.class, (Class<?>) OgnlControllerDataBinder.class, servletContext));
-        picoContainer.addComponent(ViewDataBinder.class, locateComponentClass((Object) ViewDataBinder.class, (Class<?>) IntrospectingViewDataBinder.class, servletContext));
-        picoContainer.addComponent(StringTransmuter.class, locateComponentClass((Object) StringTransmuter.class, (Class<?>) DefaultStringTransmuter.class, servletContext));
-        picoContainer.addComponent(ValueConverterFinder.class, locateComponentClass((Object) ValueConverterFinder.class, (Class<?>) OgnlValueConverterFinder.class, servletContext));
-        picoContainer.addComponent(ControllerDefinitionFactory.class, locateComponentClass((Object) ControllerDefinitionFactory.class, (Class<?>) ContextControllerDefinitionFactory.class, servletContext));
-        picoContainer.addComponent(ControllerNameResolver.class, locateComponentClass((Object) ControllerNameResolver.class, (Class<?>) ContextPathControllerNameResolver.class, servletContext));
-        picoContainer.addComponent(MessageResources.class, locateComponentClass((Object) MessageResources.class, (Class<?>) DefaultMessageResources.class, servletContext));
-        picoContainer.addComponent(ActionMonitor.class, locateComponentClass((Object) ActionMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(BindMonitor.class, locateComponentClass((Object) BindMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(ControllerMonitor.class, locateComponentClass((Object) ControllerMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(ServletMonitor.class, locateComponentClass((Object) ServletMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(ValidationMonitor.class, locateComponentClass((Object) ValidationMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(ViewMonitor.class, locateComponentClass((Object) ViewMonitor.class, (Class<?>) SilentMonitor.class, servletContext));
-        picoContainer.addComponent(Validator.class, locateComponentClass((Object) Validator.class, (Class<?>) DefaultValidator.class, servletContext));
-        picoContainer.addComponent(ViewDispatcher.class, locateComponentClass((Object) ViewDispatcher.class, (Class<?>) DefaultViewDispatcher.class, servletContext));
-        picoContainer.addComponent(ViewResolver.class, locateComponentClass((Object) ViewResolver.class, (Class<?>) DefaultViewResolver.class, servletContext));
-        picoContainer.addComponent(ParameterResolver.class, locateComponentClass((Object) ParameterResolver.class, (Class<?>) ParameterResolver.class, servletContext));
+        picoContainer.addComponent(ActionMethodExecutor.class, actionMethodExecutor());
+        picoContainer.addComponent(ActionMethodResponseHandler.class, actionMethodResponseHandler());
+        picoContainer.addComponent(ArgumentResolver.class, argumentResolver());
+        picoContainer.addComponent(MethodDefinitionFinder.class, methodDefinitionFinder());
+        picoContainer.addComponent(MethodNameResolver.class, methodNameResolver());
+        picoContainer.addComponent(BindErrorMessageResolver.class, bindErrorMessageResolver());
+        picoContainer.addComponent(ControllerDataBinder.class, controllerDataBinder());
+        picoContainer.addComponent(ViewDataBinder.class, viewDataBinder());
+        picoContainer.addComponent(StringTransmuter.class, stringTransmuter());
+        picoContainer.addComponent(ValueConverterFinder.class, valueConverterFinder());
+        picoContainer.addComponent(ControllerDefinitionFactory.class, controllerDefinitionFactory());
+        picoContainer.addComponent(ControllerNameResolver.class, controllerNameResolver());
+        picoContainer.addComponent(MessageResources.class, messageResources());
+        picoContainer.addComponent(ActionMonitor.class, actionMonitor());
+        picoContainer.addComponent(BindMonitor.class, bindMonitor());
+        picoContainer.addComponent(ControllerMonitor.class, bindMonitor());
+        picoContainer.addComponent(ServletMonitor.class, servletMonitor());
+        picoContainer.addComponent(ValidationMonitor.class, validationMonitor());
+        picoContainer.addComponent(ViewMonitor.class, viewMonitor());
+        picoContainer.addComponent(Validator.class, validator());
+        picoContainer.addComponent(ViewDispatcher.class, viewDispatcher());
+        picoContainer.addComponent(ViewResolver.class, viewResolver());
+        picoContainer.addComponent(ParameterResolver.class, parameterResolver());
 
-        // register other components
-        addOtherComponents(picoContainer, servletContext);
 
         parameterResolver = picoContainer.getComponent(ParameterResolver.class);
 
     }
 
-    @SuppressWarnings("unchecked")
-    protected void addOtherComponents(MutablePicoContainer picoContainer, ServletContext servletContext) {
-        //noinspection unchecked
-        Enumeration<String> enums = servletContext.getInitParameterNames();
+    protected Class<InterceptingActionMethodExecutor> actionMethodExecutor() {
+        return InterceptingActionMethodExecutor.class;
+    }
 
-        while (enums != null && enums.hasMoreElements()) {
-            String name = enums.nextElement();
+    protected Class<DefaultActionMethodResponseHandler> actionMethodResponseHandler() {
+        return DefaultActionMethodResponseHandler.class;
+    }
 
-            if (name.startsWith(REGISTER_KEY)) {
-                String key = name.split(REGISTER_KEY)[1];
-                Class concreteClass = loadClass(servletContext.getInitParameter(name));
+    protected Class<HierarchicalArgumentResolver> argumentResolver() {
+        return HierarchicalArgumentResolver.class;
+    }
 
-                picoContainer.addComponent(key, concreteClass);
-            } else if (name.startsWith(REGISTER_NON_CACHING_KEY)) {
-                String key = name.split(REGISTER_NON_CACHING_KEY)[1];
-                Class concreteClass = loadClass(servletContext.getInitParameter(name));
-                picoContainer.as(Characteristics.NO_CACHE).addComponent(key, concreteClass);
-            }
-        }
+    protected Class<AnnotatedMethodDefinitionFinder> methodDefinitionFinder() {
+        return AnnotatedMethodDefinitionFinder.class;
     }
 
+    protected Class<RequestParameterMethodNameResolver> methodNameResolver() {
+        return RequestParameterMethodNameResolver.class;
+    }
 
-    public void composeSession(MutablePicoContainer picoContainer) {
+    protected Class<OgnlBindErrorMessageResolver> bindErrorMessageResolver() {
+        return OgnlBindErrorMessageResolver.class;
     }
 
-    public void composeRequest(MutablePicoContainer picoContainer) {
+    protected Class<OgnlControllerDataBinder> controllerDataBinder() {
+        return OgnlControllerDataBinder.class;
     }
 
+    protected Class<IntrospectingViewDataBinder> viewDataBinder() {
+        return IntrospectingViewDataBinder.class;
+    }
 
-    /**
-     * This method will locate the component Class to use.  Each of the components can be
-     * overwritten by setting <code>context-param</code> in the applications <code>web.xml</code>.
-     * <p/>
-     * <code>
-     * &lt;context-param&gt;
-     * &lt;param-name&gt;org.codehaus.waffle.actions.ControllerDefinitionFactory&lt;/param-name&gt;
-     * &lt;param-value&gt;org.myurl.FooBarControllerFactory&lt;/param-value&gt;
-     * &lt;/context-param&gt;
-     * </code>
-     *
-     * @param key            represents the component key which the implementation should be registered under.
-     * @param defaultClass   represents the Class to use by default (when not over-written).
-     * @param servletContext required to obtain the InitParameter defined for the web application.
-     * @throws org.codehaus.waffle.WaffleException
-     */
-    protected Class<?> locateComponentClass(Object key, Class<?> defaultClass, ServletContext servletContext) throws WaffleException {
-        String parameterName;
-        if (key instanceof Class) {
-            parameterName = ((Class<?>) key).getName();
-        } else if (key instanceof String) {
-            parameterName = (String) key;
-        } else {
-            return defaultClass;
-        }
+    protected Class<DefaultStringTransmuter> stringTransmuter() {
+        return DefaultStringTransmuter.class;
+    }
 
-        String className = servletContext.getInitParameter(parameterName);
+    protected Class<OgnlValueConverterFinder> valueConverterFinder() {
+        return OgnlValueConverterFinder.class;
+    }
 
-        if (className == null || className.length() == 0) {
-            return defaultClass;
-        } else {
-            return loadClass(className);
-        }
+    protected Class<ContextControllerDefinitionFactory> controllerDefinitionFactory() {
+        return ContextControllerDefinitionFactory.class;
     }
 
-    /**
-     * Loads class for a given name
-     *
-     * @param className the Class name
-     * @return The Class for the name
-     * @throws WaffleException if class not found
-     */
-    private Class<?> loadClass(String className) {
-        try {
-            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-            return classLoader.loadClass(className);
-        } catch (ClassNotFoundException e) {
-            throw new WaffleException(e.getMessage(), e);
-        }
+    protected Class<ContextPathControllerNameResolver> controllerNameResolver() {
+        return ContextPathControllerNameResolver.class;
     }
 
+    protected Class<DefaultMessageResources> messageResources() {
+        return DefaultMessageResources.class;
+    }
+
+    protected Class<ParameterResolver> parameterResolver() {
+        return ParameterResolver.class;
+    }
+
+    protected Class<DefaultViewResolver> viewResolver() {
+        return DefaultViewResolver.class;
+    }
+
+    protected Class<DefaultViewDispatcher> viewDispatcher() {
+        return DefaultViewDispatcher.class;
+    }
+
+    protected Class<DefaultValidator> validator() {
+        return DefaultValidator.class;
+    }
+
+    protected Class<SilentMonitor> viewMonitor() {
+        return SilentMonitor.class;
+    }
+
+    protected Class<SilentMonitor> validationMonitor() {
+        return SilentMonitor.class;
+    }
+
+    protected Class<SilentMonitor> servletMonitor() {
+        return SilentMonitor.class;
+    }
+
+    protected Class<SilentMonitor> bindMonitor() {
+        return SilentMonitor.class;
+    }
+
+    protected Class<SilentMonitor> actionMonitor() {
+        return SilentMonitor.class;
+    }
+
+
+    public void composeSession(MutablePicoContainer picoContainer) {
+        // nothing yet
+    }
+
+    public void composeRequest(MutablePicoContainer picoContainer) {
+        picoContainer.addComponent(ErrorsContext.class, errorsContext());
+    }
+
+    protected Class<DefaultErrorsContext> errorsContext() {
+        return DefaultErrorsContext.class;
+    }
+
+
     protected Parameter[] picoParameters(Object... parameters) {
         if (parameters.length == 0) {
             return null; // pico expects a null when no parameters


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to