- Revision
- 513
- Author
- mward
- Date
- 2007-12-19 00:18:16 -0600 (Wed, 19 Dec 2007)
Log Message
WAFFLE-52 - wired StringTransmuter into RequestParameterParameter so that string values from a request parameter can be converted into the correct type before satisfying the component dependency
Modified Paths
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/DefaultParameterResolver.java
- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/RequestParameterParameter.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/DefaultPicoContainerParameterResolverTest.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/RequestParameterParameterTest.java
Diff
Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/DefaultParameterResolver.java (512 => 513)
--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/DefaultParameterResolver.java 2007-12-19 05:53:36 UTC (rev 512) +++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/DefaultParameterResolver.java 2007-12-19 06:18:16 UTC (rev 513) @@ -17,12 +17,18 @@ import org.codehaus.waffle.registrar.ServletContextAttributeReference; import org.codehaus.waffle.registrar.RequestParameterReference; import org.codehaus.waffle.WaffleException; +import org.codehaus.waffle.bind.StringTransmuter; import org.picocontainer.Parameter; import org.picocontainer.defaults.ComponentParameter; import org.picocontainer.defaults.ConstantParameter; public class DefaultParameterResolver implements ParameterResolver { + private final StringTransmuter stringTransmuter; + public DefaultParameterResolver(StringTransmuter stringTransmuter) { + this.stringTransmuter = stringTransmuter; + } + public Parameter resolve(Object argument) { if (argument instanceof Reference) { Reference reference = (Reference) argument; @@ -30,7 +36,7 @@ if (reference instanceof ComponentReference) { return new ComponentParameter(reference.getKey()); } else if(reference instanceof RequestParameterReference) { - return new RequestParameterParameter(reference.getKey().toString()); + return new RequestParameterParameter(reference.getKey().toString(), stringTransmuter); } else if(reference instanceof RequestAttributeReference) { return new RequestAttributeParameter(reference.getKey().toString()); } else if(reference instanceof HttpSessionAttributeReference) {
Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/RequestParameterParameter.java (512 => 513)
--- trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/RequestParameterParameter.java 2007-12-19 05:53:36 UTC (rev 512) +++ trunk/waffle-core/src/main/java/org/codehaus/waffle/registrar/pico/RequestParameterParameter.java 2007-12-19 06:18:16 UTC (rev 513) @@ -12,18 +12,30 @@ import org.picocontainer.ComponentAdapter; import org.picocontainer.PicoContainer; +import org.codehaus.waffle.bind.StringTransmuter; import javax.servlet.http.HttpServletRequest; +/** + * This class is dependent on <code>StringTransmuter</code> so that a parameter value can + * be converted into the correct type before satisfying the dependency. This is useful + * because request parameters are required to be String. + * + * @see StringTransmuter + */ class RequestParameterParameter extends AbstractWaffleParameter { - - protected RequestParameterParameter(String key) { + private final StringTransmuter stringTransmuter; + + protected RequestParameterParameter(String key, StringTransmuter stringTransmuter) { super(key); + this.stringTransmuter = stringTransmuter; } + @SuppressWarnings({"unchecked"}) public Object resolveInstance(PicoContainer picoContainer, ComponentAdapter adapter, Class expectedType) { HttpServletRequest request = (HttpServletRequest) picoContainer .getComponentInstanceOfType(HttpServletRequest.class); - return request.getParameter(getKey()); + String value = request.getParameter(getKey()); + return stringTransmuter.transmute(value, expectedType); } }
Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/DefaultPicoContainerParameterResolverTest.java (512 => 513)
--- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/DefaultPicoContainerParameterResolverTest.java 2007-12-19 05:53:36 UTC (rev 512) +++ trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/DefaultPicoContainerParameterResolverTest.java 2007-12-19 06:18:16 UTC (rev 513) @@ -25,13 +25,13 @@ @Test public void canResolveConstantParameters() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Assert.assertTrue(parameterResolver.resolve("foobar") instanceof ConstantParameter); } @Test public void canResolveComponentParameters() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Reference reference = new ComponentReference("foo"); Assert.assertTrue(parameterResolver.resolve(reference) instanceof ComponentParameter); @@ -39,7 +39,7 @@ @Test public void canResolveRequestParameterParameter() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Reference reference = new RequestParameterReference("foo"); Assert.assertTrue(parameterResolver.resolve(reference) instanceof RequestParameterParameter); @@ -47,7 +47,7 @@ @Test public void canResolveRequestAttributeParameter() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Reference reference = new RequestAttributeReference("foo"); Assert.assertTrue(parameterResolver.resolve(reference) instanceof RequestAttributeParameter); @@ -55,7 +55,7 @@ @Test public void canResolveHttpSessionAttributeParameter() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Reference reference = new HttpSessionAttributeReference("foo"); Assert.assertTrue(parameterResolver.resolve(reference) instanceof HttpSessionAttributeParameter); @@ -63,7 +63,7 @@ @Test public void canResolveServletContextAttributeParameter() { - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); Reference reference = new ServletContextAttributeReference("foo"); Assert.assertTrue(parameterResolver.resolve(reference) instanceof ServletContextAttributeParameter);
Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java (512 => 513)
--- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java 2007-12-19 05:53:36 UTC (rev 512) +++ trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/PicoRegistrarTest.java 2007-12-19 06:18:16 UTC (rev 513) @@ -214,7 +214,7 @@ @Test public void canRegisterComponentWithConstantParameters() { MutablePicoContainer pico = new DefaultPicoContainer(); - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); PicoRegistrar picoRegistrar = new PicoRegistrar(pico, parameterResolver, lifecycleStrategy, new SilentMonitor()); picoRegistrar.register("component", ComponentWithParameterDependencies.class, "foo", "bar"); @@ -229,7 +229,7 @@ @Test public void canRegisterComponentWithNamedDependecy() { MutablePicoContainer pico = new DefaultPicoContainer(); - ParameterResolver parameterResolver = new DefaultParameterResolver(); + ParameterResolver parameterResolver = new DefaultParameterResolver(null); PicoRegistrar picoRegistrar = new PicoRegistrar(pico, parameterResolver, lifecycleStrategy, new SilentMonitor()); picoRegistrar.registerInstance("one", "foo")
Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/RequestParameterParameterTest.java (512 => 513)
--- trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/RequestParameterParameterTest.java 2007-12-19 05:53:36 UTC (rev 512) +++ trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico/RequestParameterParameterTest.java 2007-12-19 06:18:16 UTC (rev 513) @@ -20,26 +20,31 @@ import org.picocontainer.MutablePicoContainer; import org.picocontainer.defaults.DefaultPicoContainer; import org.codehaus.waffle.testmodel.DependsOnValue; +import org.codehaus.waffle.bind.StringTransmuter; import javax.servlet.http.HttpServletRequest; @RunWith(JMock.class) public class RequestParameterParameterTest { - private Mockery mockery = new Mockery(); @Test public void componentDependsOnRequestParameter() { + // Mock + final StringTransmuter stringTransmuter = mockery.mock(StringTransmuter.class); + // Mock HttpServletRequest final HttpServletRequest request = mockery.mock(HttpServletRequest.class); mockery.checking(new Expectations() { { exactly(2).of(request).getParameter("foobar"); will(returnValue("helloWorld")); + exactly(2).of(stringTransmuter).transmute("helloWorld", String.class); + will(returnValue("helloWorld")); } }); - Parameter[] parameters = {new RequestParameterParameter("foobar")}; + Parameter[] parameters = {new RequestParameterParameter("foobar", stringTransmuter)}; MutablePicoContainer pico = new DefaultPicoContainer(); pico.registerComponentInstance(request);
To unsubscribe from this list please visit:
