Title: [waffle-scm] [437] trunk/waffle-core/src/main/java/org/codehaus/waffle: WAFFLE-41: Added MessagesContext.

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/ComponentRegistry.java (436 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/ComponentRegistry.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/ComponentRegistry.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -24,6 +24,7 @@
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.codehaus.waffle.controller.ControllerNameResolver;
 import org.codehaus.waffle.i18n.MessageResources;
+import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ActionMonitor;
 import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.monitor.ContextMonitor;
@@ -71,6 +72,8 @@
 
     DataBinder getDataBinder();
 
+    MessagesContext getMessagesContext();
+
     MessageResources getMessageResources();
 
     MethodDefinitionFinder getMethodDefinitionFinder();

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/Constants.java (436 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/Constants.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/Constants.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -16,4 +16,5 @@
     String VIEW_SUFFIX_KEY = "view.suffix";
     String CONTROLLER_KEY = "controller";
     String ERRORS_KEY = "errors";
+    String MESSAGES_KEY = "messages";
 }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java (436 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -40,7 +40,9 @@
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.codehaus.waffle.controller.ControllerNameResolver;
 import org.codehaus.waffle.i18n.DefaultMessageResources;
+import org.codehaus.waffle.i18n.DefaultMessagesContext;
 import org.codehaus.waffle.i18n.MessageResources;
+import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ActionMonitor;
 import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.monitor.ContextMonitor;
@@ -91,6 +93,7 @@
         register(ContextContainerFactory.class, PicoContextContainerFactory.class, servletContext);
         register(ControllerDefinitionFactory.class, ContextControllerDefinitionFactory.class, servletContext);
         register(ControllerNameResolver.class, ContextPathControllerNameResolver.class, servletContext);
+        register(MessagesContext.class, DefaultMessagesContext.class, servletContext);
         register(MessageResources.class, DefaultMessageResources.class, servletContext);
         register(ActionMonitor.class, SilentMonitor.class, servletContext);
         register(BindMonitor.class, SilentMonitor.class, servletContext);
@@ -251,6 +254,10 @@
         return locateByType(ControllerDefinitionFactory.class);
     }
 
+    public MessagesContext getMessagesContext() {
+        return locateByType(MessagesContext.class);
+    }
+
     public MessageResources getMessageResources() {
         return locateByType(MessageResources.class);
     }

Added: trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/DefaultMessagesContext.java (0 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/DefaultMessagesContext.java	                        (rev 0)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/DefaultMessagesContext.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (C) 2005,2006 Michael Ward                                      *
+ * All rights reserved.                                                      *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD      *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file.                                                     *
+ *                                                                           *
+ * Original code by: Mauro Talevi                                            *
+ *****************************************************************************/
+package org.codehaus.waffle.i18n;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Default Map-based implementation of MessagesContext.
+ * 
+ * @author Mauro Talevi
+ */
+public class DefaultMessagesContext implements MessagesContext {
+    private final Map<String, String> messages = new HashMap<String, String>(); 
+    
+    public void addMessage(String key, String message) {
+        messages.put(key, message);
+    }
+
+    public String getMessage(String key) {
+        return messages.get(key);
+    }
+
+    public List<String> getMessages() {
+        return new ArrayList<String>(messages.values());
+    }
+
+    public int getMessagesCount() {
+        return messages.size();
+    }
+
+    public void clearMessages() {
+        messages.clear();
+    }
+
+}

Added: trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/MessagesContext.java (0 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/MessagesContext.java	                        (rev 0)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/i18n/MessagesContext.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (C) 2005,2006 Michael Ward                                      *
+ * All rights reserved.                                                      *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD      *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file.                                                     *
+ *                                                                           *
+ * Original code by: Mauro Talevi                                            *
+ *****************************************************************************/
+package org.codehaus.waffle.i18n;
+
+import java.util.List;
+
+
+/**
+ * MessagesContext holds user business-level messages. Controllers can depend on it and use it to pass messages to the
+ * view. It is not meant to display validation error messages, which are designed to be handled via the
+ * [EMAIL PROTECTED] ErrorsContext}.
+ * 
+ * @author Mauro Talevi
+ * @see ErrorsContext
+ */
+public interface MessagesContext {
+
+    void addMessage(String key, String message);
+
+    String getMessage(String key);
+
+    List<String> getMessages();
+
+    int getMessagesCount();
+
+    void clearMessages();
+    
+}
+

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java (436 => 437)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -11,6 +11,7 @@
 package org.codehaus.waffle.servlet;
 
 import static org.codehaus.waffle.Constants.ERRORS_KEY;
+import static org.codehaus.waffle.Constants.MESSAGES_KEY;
 import static org.codehaus.waffle.Constants.VIEW_PREFIX_KEY;
 import static org.codehaus.waffle.Constants.VIEW_SUFFIX_KEY;
 
@@ -31,6 +32,7 @@
 import org.codehaus.waffle.bind.RequestAttributeBinder;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ServletMonitor;
 import org.codehaus.waffle.validation.DefaultErrorsContext;
 import org.codehaus.waffle.validation.ErrorsContext;
@@ -58,6 +60,7 @@
     private DataBinder dataBinder;
     private RequestAttributeBinder requestAttributeBinder;
     private ControllerDefinitionFactory controllerDefinitionFactory;
+    private MessagesContext messagesContext;
     private Validator validator;
     private String viewPrefix;
     private String viewSuffix;
@@ -79,6 +82,7 @@
      * @param dataBinder
      * @param requestAttributeBinder
      * @param controllerDefinitionFactory
+     * @param messagesContext
      * @param validator
      */
     public WaffleServlet(ActionMethodExecutor actionMethodExecutor,
@@ -87,13 +91,14 @@
                          DataBinder dataBinder,
                          RequestAttributeBinder requestAttributeBinder,
                          ControllerDefinitionFactory controllerDefinitionFactory, 
-                         Validator validator) {
+                         MessagesContext messagesContext, Validator validator) {
         this.actionMethodExecutor = actionMethodExecutor;
         this.actionMethodResponseHandler = actionMethodResponseHandler;
         this.servletMonitor = servletMonitor;
         this.dataBinder = dataBinder;
         this.requestAttributeBinder = requestAttributeBinder;
         this.controllerDefinitionFactory = controllerDefinitionFactory;
+        this.messagesContext = messagesContext;
         this.validator = validator;
         componentsRetrieved = true;
     }
@@ -119,6 +124,7 @@
             dataBinder = componentRegistry.getDataBinder();
             requestAttributeBinder = componentRegistry.getRequestAttributeBinder();
             controllerDefinitionFactory = componentRegistry.getControllerDefinitionFactory();
+            messagesContext = componentRegistry.getMessagesContext();
             validator = componentRegistry.getValidator();
         }
     }
@@ -148,6 +154,7 @@
                            HttpServletResponse response) throws ServletException, IOException {
         ErrorsContext errorsContext = new DefaultErrorsContext();
         request.setAttribute(ERRORS_KEY, errorsContext);
+        request.setAttribute(MESSAGES_KEY, messagesContext);
 
         ControllerDefinition controllerDefinition = getControllerDefinition(request, response);
         dataBinder.bind(request, response, errorsContext, controllerDefinition.getController());

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java (436 => 437)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -39,7 +39,9 @@
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
 import org.codehaus.waffle.controller.ControllerNameResolver;
 import org.codehaus.waffle.i18n.DefaultMessageResources;
+import org.codehaus.waffle.i18n.DefaultMessagesContext;
 import org.codehaus.waffle.i18n.MessageResources;
+import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.AbstractWritingMonitor;
 import org.codehaus.waffle.monitor.ActionMonitor;
 import org.codehaus.waffle.monitor.BindMonitor;
@@ -58,6 +60,7 @@
 import org.codehaus.waffle.testmodel.StubControllerNameResolver;
 import org.codehaus.waffle.testmodel.StubDataBinder;
 import org.codehaus.waffle.testmodel.StubMessageResources;
+import org.codehaus.waffle.testmodel.StubMessagesContext;
 import org.codehaus.waffle.testmodel.StubMethodDefinitionFinder;
 import org.codehaus.waffle.testmodel.StubMethodNameResolver;
 import org.codehaus.waffle.testmodel.StubMonitor;
@@ -131,7 +134,7 @@
             {
                 one(servletContext).getInitParameterNames();
                 will(returnValue(EMPTY_ENUMERATION));
-                exactly(24).of(servletContext).getInitParameter(with(any(String.class)));
+                exactly(25).of(servletContext).getInitParameter(with(any(String.class)));
             }
         });
 
@@ -149,6 +152,7 @@
         assertTrue(componentRegistry.getControllerDefinitionFactory() instanceof ContextControllerDefinitionFactory);
         assertTrue(componentRegistry.getDataBinder() instanceof OgnlDataBinder);
         assertTrue(componentRegistry.getMethodNameResolver() instanceof RequestParameterMethodNameResolver);
+        assertTrue(componentRegistry.getMessagesContext() instanceof DefaultMessagesContext);
         assertTrue(componentRegistry.getMessageResources() instanceof DefaultMessageResources);
         assertTrue(componentRegistry.getRegistrarMonitor() instanceof AbstractWritingMonitor);
         assertTrue(componentRegistry.getServletMonitor() instanceof AbstractWritingMonitor);
@@ -172,6 +176,8 @@
                 will(returnValue(StubActionMethodExecutor.class.getName()));
                 one(servletContext).getInitParameter(Validator.class.getName());
                 will(returnValue(StubValidator.class.getName()));
+                one(servletContext).getInitParameter(MessagesContext.class.getName());
+                will(returnValue(StubMessagesContext.class.getName()));
                 one(servletContext).getInitParameter(MessageResources.class.getName());
                 will(returnValue(StubMessageResources.class.getName()));
                 one(servletContext).getInitParameter(MethodDefinitionFinder.class.getName());

Added: trunk/waffle-core/src/test/java/org/codehaus/waffle/i18n/DefaultMessagesContextTest.java (0 => 437)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/i18n/DefaultMessagesContextTest.java	                        (rev 0)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/i18n/DefaultMessagesContextTest.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -0,0 +1,34 @@
+package org.codehaus.waffle.i18n;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * 
+ * @author Mauro Talevi
+ */
+public class DefaultMessagesContextTest  {
+
+    @Test
+    public void canAddAndGetMessages() {
+        MessagesContext messages = new DefaultMessagesContext();
+        messages.addMessage("success", "Waffle action was executed");
+        assertEquals(1, messages.getMessagesCount());
+        assertEquals("Waffle action was executed", messages.getMessage("success"));
+        assertEquals("Waffle action was executed", messages.getMessages().iterator().next());                
+    }
+
+    @Test
+    public void canAddAndClearMessages() {
+        MessagesContext messages = new DefaultMessagesContext();
+        messages.addMessage("success", "Waffle action was executed");
+        assertEquals(1, messages.getMessagesCount());
+        messages.clearMessages();
+        assertEquals(0, messages.getMessagesCount());       
+        // add again
+        messages.addMessage("success", "Waffle action was executed");
+        assertEquals(1, messages.getMessagesCount());
+    }
+
+}

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java (436 => 437)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-26 16:53:47 UTC (rev 436)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -40,6 +40,8 @@
 import org.codehaus.waffle.context.pico.PicoContextContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.i18n.DefaultMessagesContext;
+import org.codehaus.waffle.i18n.MessagesContext;
 import org.codehaus.waffle.monitor.ServletMonitor;
 import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.validation.ErrorsContext;
@@ -84,6 +86,7 @@
             one(componentRegistry).getDataBinder();
             one(componentRegistry).getRequestAttributeBinder();
             one(componentRegistry).getControllerDefinitionFactory();
+            one(componentRegistry).getMessagesContext();
             one(componentRegistry).getValidator();
         }});
 
@@ -116,6 +119,7 @@
             one(request).getParameterNames();
             will(returnValue(enumeration));
             one(request).setAttribute(with(equal(Constants.ERRORS_KEY)), with(a(ErrorsContext.class)));
+            one(request).setAttribute(with(equal(Constants.MESSAGES_KEY)), with(a(MessagesContext.class)));
             one(request).getMethod(); // todo need to test post
             will(returnValue("get"));
         }});
@@ -151,7 +155,7 @@
                                                         monitor,
                                                         new OgnlDataBinder(new OgnlValueConverterFinder(), null, monitor),
                                                         requestAttributeBinder,
-                                                        null, validator) {
+                                                        null, new DefaultMessagesContext(), validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, methodDefinition);
@@ -176,6 +180,7 @@
             one(request).getParameterNames();
             will(returnValue(enumeration));
             one(request).setAttribute(with(equal(Constants.ERRORS_KEY)), with(a(ErrorsContext.class)));
+            one(request).setAttribute(with(equal(Constants.MESSAGES_KEY)), with(a(MessagesContext.class)));
             one(request).getMethod();
             will(returnValue("post"));
             one(request).getRequestURL();
@@ -213,7 +218,7 @@
                                                         monitor,
                                                         new OgnlDataBinder(new OgnlValueConverterFinder(), null, monitor),
                                                         requestAttributeBinder,
-                                                        null, validator) {
+                                                        null, new DefaultMessagesContext(), validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, methodDefinition);
@@ -230,6 +235,7 @@
         final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
         mockery.checking(new Expectations() {{
             one(request).setAttribute(with(equal(Constants.ERRORS_KEY)), with(any(ErrorsContext.class)));
+            one(request).setAttribute(with(equal(Constants.MESSAGES_KEY)), with(any(MessagesContext.class)));
             one(request).getServletPath();
             will(returnValue("/foobar"));
         }});
@@ -264,6 +270,7 @@
             one(request).getParameterNames();
             will(returnValue(enumeration));
             one(request).setAttribute(with(equal(Constants.ERRORS_KEY)), with(any(ErrorsContext.class)));
+            one(request).setAttribute(with(equal(Constants.MESSAGES_KEY)), with(a(MessagesContext.class)));
         }});
 
         // Mock HttpServletResponse
@@ -293,7 +300,7 @@
                 new SilentMonitor(),
                 new OgnlDataBinder(new OgnlValueConverterFinder(), null, new SilentMonitor()),
                 requestAttributeBinder,
-                null, validator) {
+                null, new DefaultMessagesContext(), validator) {
             @Override
             protected ControllerDefinition getControllerDefinition(HttpServletRequest request, HttpServletResponse response) {
                 return new ControllerDefinition("no name", nonDispatchingController, null);
@@ -321,6 +328,7 @@
             one(request).getParameterNames();
             will(returnValue(enumeration));
             one(request).setAttribute(with(equal(Constants.ERRORS_KEY)), with(any(ErrorsContext.class)));
+            one(request).setAttribute(with(equal(Constants.MESSAGES_KEY)), with(any(MessagesContext.class)));
         }});
 
         // Mock HttpServletResponse

Added: trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMessagesContext.java (0 => 437)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMessagesContext.java	                        (rev 0)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMessagesContext.java	2007-11-26 19:39:22 UTC (rev 437)
@@ -0,0 +1,27 @@
+package org.codehaus.waffle.testmodel;
+
+import java.util.List;
+
+import org.codehaus.waffle.i18n.MessagesContext;
+
+public class StubMessagesContext implements MessagesContext {
+
+    public void addMessage(String key, String message) {
+    }
+
+    public void clearMessages() {
+    }
+
+    public String getMessage(String key) {
+        return null;
+    }
+
+    public List<String> getMessages() {
+        return null;
+    }
+
+    public int getMessagesCount() {
+        return 0;
+    }
+
+}


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to