Title: [waffle-scm] [513] trunk/waffle-core/src/test/java/org/codehaus/waffle/registrar/pico: 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

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:

http://xircles.codehaus.org/manage_email

Reply via email to