Title: [waffle-scm] [448] trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel: WAFFLE-45: Allow RegistrarAssistant to register default implementation of ErrorsContext and MessagesContext only if these have not already been registered by user.

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/AbstractRegistrar.java (447 => 448)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/AbstractRegistrar.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/AbstractRegistrar.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -23,6 +23,10 @@
         this.delegate = delegate;
     }
 
+    public boolean isRegistered(Object typeOrInstance){
+        return delegate.isRegistered(typeOrInstance);
+    }
+    
     public void register(Class<?> type, Object... parameters) {
         delegate.register(type, parameters);
     }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/Registrar.java (447 => 448)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/Registrar.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/Registrar.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -17,6 +17,8 @@
  * @author Mauro Talevi
  */
 public interface Registrar {
+
+    boolean isRegistered(Object typeOrInstance);
     
     void register(Class<?> type, Object... parameters);
 

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/RegistrarAssistant.java (447 => 448)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/RegistrarAssistant.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/RegistrarAssistant.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -48,8 +48,12 @@
                 registrar.session();
             } else if (ContextLevel.REQUEST.equals(contextLevel)) {
                 registrar.request();
-                registrar.register((Object)ErrorsContext.class, DefaultErrorsContext.class);
-                registrar.register((Object)MessagesContext.class, DefaultMessagesContext.class);
+                if ( !registrar.isRegistered(ErrorsContext.class) ){
+                    registrar.register((Object)ErrorsContext.class, DefaultErrorsContext.class);                    
+                }
+                if ( !registrar.isRegistered(MessagesContext.class) ){
+                    registrar.register((Object)MessagesContext.class, DefaultMessagesContext.class);
+                }
             }
         } catch (Exception e) {
             throw new WaffleException("Unable to use registrar [" + registrarClass + "]", e);

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/PicoRegistrar.java (447 => 448)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/PicoRegistrar.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/PicoRegistrar.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -36,6 +36,14 @@
         this.registrarMonitor = registrarMonitor;
     }
 
+    public boolean isRegistered(Object typeOrInstance) {
+        if ( typeOrInstance instanceof Class ){
+            Class<?> type = (Class<?>)typeOrInstance;
+            return picoContainer.getComponentInstancesOfType(type).size() > 0;
+        }
+        return picoContainer.getComponentInstance(typeOrInstance) != null;
+    }
+
     public void register(Class<?> type, Object ... parameters) {
         this.register(type, type, parameters);
     }
@@ -104,4 +112,5 @@
     public void request() {
         // does nothing!
     }
+
 }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/RegistrarAssistantTest.java (447 => 448)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/RegistrarAssistantTest.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/RegistrarAssistantTest.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -10,20 +10,35 @@
 
 import java.util.Hashtable;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.context.ContextLevel;
+import org.codehaus.waffle.i18n.DefaultMessagesContext;
 import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.registrar.pico.PicoRegistrar;
+import org.codehaus.waffle.testmodel.CustomErrorsContext;
+import org.codehaus.waffle.testmodel.CustomMessagesContext;
 import org.codehaus.waffle.testmodel.CustomRegistrar;
+import org.codehaus.waffle.testmodel.CustomRegistrarWithContexts;
+import org.codehaus.waffle.validation.DefaultErrorsContext;
+import org.jmock.Mockery;
+import org.jmock.integration.junit4.JMock;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.picocontainer.defaults.DefaultPicoContainer;
 
[EMAIL PROTECTED](JMock.class)
 public class RegistrarAssistantTest {
 
+    private Mockery mockery = new Mockery();
+    
     @Test
-    public void canExecute() {
+    public void canExecuteWithDefaultErrorsAndMessagesContexts() {
         DefaultPicoContainer picoContainer = new DefaultPicoContainer();
         Registrar registrar = new PicoRegistrar(picoContainer, new SilentMonitor());
+        final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
+        registrar.registerInstance(request);
         RegistrarAssistant registrarAssistant = new RegistrarAssistant(CustomRegistrar.class);
 
         registrarAssistant.executeDelegatingRegistrar(registrar, ContextLevel.APPLICATION);
@@ -33,8 +48,29 @@
         assertNotNull(picoContainer.getComponentInstance("application"));
         assertNotNull(picoContainer.getComponentInstance("session"));
         assertNotNull(picoContainer.getComponentInstance("request"));
+        assertNotNull(picoContainer.getComponentInstanceOfType(DefaultErrorsContext.class));
+        assertNotNull(picoContainer.getComponentInstanceOfType(DefaultMessagesContext.class));        
     }
+    
+    @Test
+    public void canExecuteWithCustomErrorsAndMessagesContexts() {
+        DefaultPicoContainer picoContainer = new DefaultPicoContainer();
+        Registrar registrar = new PicoRegistrar(picoContainer, new SilentMonitor());
+        final HttpServletRequest request = mockery.mock(HttpServletRequest.class);
+        registrar.registerInstance(request);
+        RegistrarAssistant registrarAssistant = new RegistrarAssistant(CustomRegistrarWithContexts.class);
 
+        registrarAssistant.executeDelegatingRegistrar(registrar, ContextLevel.APPLICATION);
+        registrarAssistant.executeDelegatingRegistrar(registrar, ContextLevel.SESSION);
+        registrarAssistant.executeDelegatingRegistrar(registrar, ContextLevel.REQUEST);
+
+        assertNotNull(picoContainer.getComponentInstance("application"));
+        assertNotNull(picoContainer.getComponentInstance("session"));
+        assertNotNull(picoContainer.getComponentInstance("request"));
+        assertNotNull(picoContainer.getComponentInstanceOfType(CustomErrorsContext.class));
+        assertNotNull(picoContainer.getComponentInstanceOfType(CustomMessagesContext.class));
+    }
+
     @Test(expected = WaffleException.class)
     public void cannotCreateForBadClass() {
         new RegistrarAssistant(Hashtable.class); // bad class

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java (447 => 448)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java	2007-12-01 06:09:42 UTC (rev 447)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -12,6 +12,7 @@
 
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import org.codehaus.waffle.monitor.RegistrarMonitor;
 import org.codehaus.waffle.monitor.SilentMonitor;
@@ -51,6 +52,7 @@
         
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.register(type);
+        assertTrue(registrar.isRegistered(type));
 
         FakeController controllerOne = (FakeController) pico.getComponentInstance(FakeController.class);
         FakeController controllerTwo = (FakeController) pico.getComponentInstance(FakeController.class);
@@ -73,7 +75,8 @@
 
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.register(key, type);
-
+        assertTrue(registrar.isRegistered(type));
+        
         FakeController controllerOne = (FakeController) pico.getComponentInstance(key);
         FakeController controllerTwo = (FakeController) pico.getComponentInstance(key);
 
@@ -96,7 +99,8 @@
         
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.registerInstance(fakeController);
-
+        assertTrue(registrar.isRegistered(fakeController));
+        
         assertSame(fakeController, pico.getComponentInstanceOfType(FakeController.class));
     }
 
@@ -115,11 +119,12 @@
         
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.registerInstance(key, fakeController);
-
+        assertTrue(registrar.isRegistered(key));
+        
         assertSame(fakeController, pico.getComponentInstance("foobar"));
         assertSame(fakeController, pico.getComponentInstanceOfType(FakeController.class));
     }
-
+     
     @Test
     public void canRegisterNonCachingComponent() {
         MutablePicoContainer pico = new DefaultPicoContainer();
@@ -134,7 +139,8 @@
 
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.registerNonCaching(type);
-
+        assertTrue(registrar.isRegistered(type));
+        
         FakeController controllerOne = (FakeController) pico.getComponentInstance(FakeController.class);
         FakeController controllerTwo = (FakeController) pico.getComponentInstance(FakeController.class);
 
@@ -156,7 +162,8 @@
 
         Registrar registrar = new PicoRegistrar(pico, registrarMonitor);
         registrar.registerNonCaching(key, type);
-
+        assertTrue(registrar.isRegistered(type));
+        
         FakeController controllerOne = (FakeController) pico.getComponentInstance("foobar");
         FakeController controllerTwo = (FakeController) pico.getComponentInstance("foobar");
 

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

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomErrorsContext.java	                        (rev 0)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomErrorsContext.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -0,0 +1,13 @@
+package org.codehaus.waffle.testmodel;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.codehaus.waffle.validation.DefaultErrorsContext;
+
+public class CustomErrorsContext extends DefaultErrorsContext {
+
+    public CustomErrorsContext(HttpServletRequest request) {
+        super(request);
+    }
+
+}

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

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomMessagesContext.java	                        (rev 0)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomMessagesContext.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -0,0 +1,13 @@
+package org.codehaus.waffle.testmodel;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.codehaus.waffle.i18n.DefaultMessagesContext;
+
+public class CustomMessagesContext extends DefaultMessagesContext {
+
+    public CustomMessagesContext(HttpServletRequest request) {
+        super(request);
+    }
+
+}

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

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomRegistrarWithContexts.java	                        (rev 0)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/CustomRegistrarWithContexts.java	2007-12-03 19:21:11 UTC (rev 448)
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * 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: Michael Ward                                            *
+ *****************************************************************************/
+package org.codehaus.waffle.testmodel;
+
+import org.codehaus.waffle.registrar.AbstractRegistrar;
+import org.codehaus.waffle.registrar.Registrar;
+
+public class CustomRegistrarWithContexts extends AbstractRegistrar {
+    public CustomRegistrarWithContexts(Registrar delegate) {
+        super(delegate);
+    }
+
+    @Override
+    public void application() {
+        register("application", ApplicationLevelComponent.class);
+    }
+
+    @Override
+    public void session() {
+        register("session", SessionLevelComponent.class);
+    }
+
+    @Override
+    public void request() {
+        register("request", RequestLevelComponent.class);
+        register("FakeController", FakeController.class);
+        register("errors", CustomErrorsContext.class);
+        register("messages", CustomMessagesContext.class);        
+    }
+}


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to