- Revision
- 448
- Author
- mauro
- Date
- 2007-12-03 13:21:11 -0600 (Mon, 03 Dec 2007)
Log Message
WAFFLE-45: Allow RegistrarAssistant to register default implementation of ErrorsContext and MessagesContext only if these have not already been registered by user.
Modified Paths
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/AbstractRegistrar.java
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/Registrar.java
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/RegistrarAssistant.java
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/PicoRegistrar.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/RegistrarAssistantTest.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java
Added Paths
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:
