Author: tv
Date: Wed Nov 14 21:18:20 2012
New Revision: 1409409

URL: http://svn.apache.org/viewvc?rev=1409409&view=rev
Log:
Add Annotation @InjectService to inject Turbine service instance into assemblers
such as screens, actions, navigations etc. 
See VelocityActionWithServiceInjection for an example.

Added:
    turbine/core/trunk/src/java/org/apache/turbine/annotation/
    
turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java   
(with props)
    
turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java
   (with props)
Modified:
    turbine/core/trunk/src/changes/changes.xml
    
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
    turbine/core/trunk/src/test/org/apache/turbine/modules/ActionLoaderTest.java

Modified: turbine/core/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/changes/changes.xml?rev=1409409&r1=1409408&r2=1409409&view=diff
==============================================================================
--- turbine/core/trunk/src/changes/changes.xml (original)
+++ turbine/core/trunk/src/changes/changes.xml Wed Nov 14 21:18:20 2012
@@ -26,6 +26,11 @@
   <body>
     <release version="4.0-M2" date="in Subversion">
       <action type="add" dev="tv">
+        Add Annotation @InjectService to inject Turbine service instance into 
assemblers
+        such as screens, actions, navigations etc. 
+        See VelocityActionWithServiceInjection for an example.
+      </action>
+      <action type="add" dev="tv">
         Add class cache for TurbineRunDataService
       </action>
       <action type="update" dev="tv">

Added: 
turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java?rev=1409409&view=auto
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java 
(added)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java 
Wed Nov 14 21:18:20 2012
@@ -0,0 +1,40 @@
+package org.apache.turbine.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Annotation to mark fields in modules that require a service to be injected
+ */
+@Retention( RetentionPolicy.RUNTIME )
+@Target( ElementType.FIELD )
+public @interface InjectService
+{
+    /**
+     * Get the name of the service to inject
+     *
+     * @return the service name or role
+     */
+    String value();
+}

Propchange: 
turbine/core/trunk/src/java/org/apache/turbine/annotation/InjectService.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java?rev=1409409&r1=1409408&r2=1409409&view=diff
==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
 (original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
 Wed Nov 14 21:18:20 2012
@@ -21,6 +21,7 @@ package org.apache.turbine.services.asse
  */
 
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -33,10 +34,13 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.turbine.Turbine;
 import org.apache.turbine.TurbineConstants;
+import org.apache.turbine.annotation.InjectService;
 import org.apache.turbine.modules.Assembler;
 import org.apache.turbine.modules.Loader;
 import org.apache.turbine.services.InitializationException;
+import org.apache.turbine.services.ServiceManager;
 import org.apache.turbine.services.TurbineBaseService;
+import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
 import org.apache.turbine.util.TurbineException;
 
@@ -232,9 +236,42 @@ public class TurbineAssemblerBrokerServi
                                                + fac.getClass().getName(), e);
                 }
 
-                if (isCaching && assembler != null)
+                if (assembler != null)
                 {
-                    assemblerCache.put(key, assembler);
+                    // Search for annotated fields and provide them with the 
appropriate
+                    // TurbineService
+                    ServiceManager manager = TurbineServices.getInstance();
+                    Field[] fields = assembler.getClass().getDeclaredFields();
+
+                    for (Field field : fields)
+                    {
+                        if (field.isAnnotationPresent(InjectService.class))
+                        {
+                            InjectService sa = 
field.getAnnotation(InjectService.class);
+                            Object service = manager.getService(sa.value()); 
// throws Exception on unknown service
+                            field.setAccessible(true);
+
+                            try
+                            {
+                                field.set(assembler, service);
+                            }
+                            catch (IllegalArgumentException e)
+                            {
+                                throw new TurbineException("Could not inject 
service "
+                                        + sa.value() + " into assembler " + 
assembler, e);
+                            }
+                            catch (IllegalAccessException e)
+                            {
+                                throw new TurbineException("Could not inject 
service "
+                                        + sa.value() + " into assembler " + 
assembler, e);
+                            }
+                        }
+                    }
+
+                    if (isCaching)
+                    {
+                        assemblerCache.put(key, assembler);
+                    }
                 }
             }
         }

Modified: 
turbine/core/trunk/src/test/org/apache/turbine/modules/ActionLoaderTest.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/test/org/apache/turbine/modules/ActionLoaderTest.java?rev=1409409&r1=1409408&r2=1409409&view=diff
==============================================================================
--- 
turbine/core/trunk/src/test/org/apache/turbine/modules/ActionLoaderTest.java 
(original)
+++ 
turbine/core/trunk/src/test/org/apache/turbine/modules/ActionLoaderTest.java 
Wed Nov 14 21:18:20 2012
@@ -19,7 +19,6 @@ package org.apache.turbine.modules;
  * under the License.
  */
 
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
@@ -41,239 +40,308 @@ import org.apache.turbine.util.TurbineCo
 
 import com.mockobjects.servlet.MockHttpServletResponse;
 import com.mockobjects.servlet.MockServletConfig;
+
 /**
  * This test case is to verify whether exceptions in Velocity actions are
- * properly bubbled up when action.event.bubbleexception=true.  Or, if
- * action.event.bubbleexception=false, then the exceptions should be
- * logged and sunk.
+ * properly bubbled up when action.event.bubbleexception=true. Or, if
+ * action.event.bubbleexception=false, then the exceptions should be logged and
+ * sunk.
  *
- * @author     <a href="mailto:[email protected]";>Eric Pugh</a>
+ * @author <a href="mailto:[email protected]";>Eric Pugh</a>
  * @author <a href="mailto:[email protected]";>Peter Courcoux</a>
  */
-public class ActionLoaderTest extends BaseTestCase {
-       private static TurbineConfig tc = null;
-       private MockServletConfig config = null;
-       private EnhancedMockHttpServletRequest request = null;
-       private EnhancedMockHttpSession session = null;
-       private HttpServletResponse response = null;
+public class ActionLoaderTest extends BaseTestCase
+{
+    private static TurbineConfig tc = null;
+    private MockServletConfig config = null;
+    private EnhancedMockHttpServletRequest request = null;
+    private EnhancedMockHttpSession session = null;
+    private HttpServletResponse response = null;
+
+    /*
+     * @see TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        config = new MockServletConfig();
+        config.setupNoParameters();
+        request = new EnhancedMockHttpServletRequest();
+        request.setupServerName("bob");
+        request.setupGetProtocol("http");
+        request.setupScheme("scheme");
+        request.setupPathInfo("damn");
+        request.setupGetServletPath("damn2");
+        request.setupGetContextPath("wow");
+        request.setupGetContentType("html/text");
+        request.setupAddHeader("Content-type", "html/text");
+        request.setupAddHeader("Accept-Language", "en-US");
+        Vector v = new Vector();
+        request.setupGetParameterNames(v.elements());
+        session = new EnhancedMockHttpSession();
+        response = new MockHttpServletResponse();
+        session.setupGetAttribute(User.SESSION_KEY, null);
+        request.setSession(session);
+        tc = new TurbineConfig(".", 
"/conf/test/CompleteTurbineResources.properties");
+        tc.initialize();
+    }
 
     /*
-        * @see TestCase#setUp()
-        */
-       protected void setUp() throws Exception {
-               super.setUp();
-               config = new MockServletConfig();
-               config.setupNoParameters();
-               request = new EnhancedMockHttpServletRequest();
-               request.setupServerName("bob");
-               request.setupGetProtocol("http");
-               request.setupScheme("scheme");
-               request.setupPathInfo("damn");
-               request.setupGetServletPath("damn2");
-               request.setupGetContextPath("wow");
-               request.setupGetContentType("html/text");
-               request.setupAddHeader("Content-type", "html/text");
-               request.setupAddHeader("Accept-Language", "en-US");
-               Vector v = new Vector();
-               request.setupGetParameterNames(v.elements());
-               session = new EnhancedMockHttpSession();
-               response = new MockHttpServletResponse();
-               session.setupGetAttribute(User.SESSION_KEY, null);
-               request.setSession(session);
-               tc =
-                       new TurbineConfig(
-                               ".",
-                               
"/conf/test/CompleteTurbineResources.properties");
-               tc.initialize();
-       }
-       /*
-        * @see TestCase#tearDown()
-        */
-       protected void tearDown() throws Exception {
-               super.tearDown();
-               if (tc != null) {
-                       tc.dispose();
-               }
-       }
-       /**
-        * Constructor for VelocityErrorScreenTest.
-        * @param arg0
-        */
-       public ActionLoaderTest(String arg0) throws Exception {
-               super(arg0);
-       }
-       /**
-        * This unit test verifies that if your standard doPerform is called,
-        * and it throws an Exception, the exception is bubbled up out of the 
ActionLoader...
-        *
-        * @throws Exception If something goes wrong with the unit test
-        */
-       public void testDoPerformBubblesException() throws Exception {
-               RunData data = getRunData(request,response,config);
-               PipelineData pipelineData = new DefaultPipelineData();
-               Map runDataMap = new HashMap();
-               runDataMap.put(RunData.class, data);
-               pipelineData.put(RunData.class, runDataMap);
-               data.setAction("VelocityActionThrowsException");
-               try {
-                       ActionLoader.getInstance().exec(data, data.getAction());
-                       fail("Should have thrown an exception");
-               } catch (Exception e) {
-                       //good
-               }
-
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, 
data.getAction());
-                       fail("Should have thrown an exception");
-               } catch (Exception e) {
-                       //good
-               }
-       }
-       /**
-          * This unit test verifies that if an Action Event doEventSubmit_ is 
called, and it throws an Exception, the
-          * exception is bubbled up out of the ActionLoader...
-          *
-          * @throws Exception If something goes wrong with the unit test
-          */
-       public void testActionEventBubblesException() throws Exception {
-               // can't seem to figure out how to setup the Mock Request with 
the right parameters...
-               request.setupAddParameter("eventSubmit_doCauseexception", 
"foo");
-               RunData data = getRunData(request,response,config);
-               PipelineData pipelineData = new DefaultPipelineData();
-               Map runDataMap = new HashMap();
-               runDataMap.put(RunData.class, data);
-               pipelineData.put(RunData.class, runDataMap);
-               data.setAction("VelocityActionThrowsException");
-               data.getParameters().add("eventSubmit_doCauseexception", "foo");
-               assertTrue(
-                       
data.getParameters().containsKey("eventSubmit_doCauseexception"));
-               try {
-                       ActionLoader.getInstance().exec(data, data.getAction());
-                       fail("Should have bubbled out an exception thrown by 
the action.");
-               } catch (Exception e) {
-                       //good
-               }
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, 
data.getAction());
-                       fail("Should have bubbled out an exception thrown by 
the action.");
-               } catch (Exception e) {
-                       //good
-               }
-       }
-
-       /**
-        * This unit test verifies that if your standard doPerform is called,
-        * and it throws an Exception, if the action.event.bubbleexception
-     * property is set to false then the exception is NOT bubbled up
-        *
-        * @throws Exception If something goes wrong with the unit test
-        */
-       public void testDoPerformDoesntBubbleException() throws Exception {
-               
Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
-               
assertFalse(Turbine.getConfiguration().getBoolean("action.event.bubbleexception"));
-               RunData data = getRunData(request,response,config);
-               PipelineData pipelineData = new DefaultPipelineData();
-               Map runDataMap = new HashMap();
-               runDataMap.put(RunData.class, data);
-               pipelineData.put(RunData.class, runDataMap);
-               data.setAction("VelocityActionThrowsException");
-               try {
-                       ActionLoader.getInstance().exec(data, data.getAction());
-
-               } catch (Exception e) {
-                       fail("Should NOT have thrown an exception:" + 
e.getMessage());
-               }
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, 
data.getAction());
-
-               } catch (Exception e) {
-                       fail("Should NOT have thrown an exception:" + 
e.getMessage());
-               }
-       }
-       /**
+     * @see TestCase#tearDown()
+     */
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        if (tc != null)
+        {
+            tc.dispose();
+        }
+    }
+
+    /**
+     * Constructor for VelocityErrorScreenTest.
+     *
+     * @param arg0
+     */
+    public ActionLoaderTest(String arg0) throws Exception
+    {
+        super(arg0);
+    }
+
+    /**
+     * This unit test verifies that if your standard doPerform is called, and 
it
+     * throws an Exception, the exception is bubbled up out of the
+     * ActionLoader...
+     *
+     * @throws Exception
+     *             If something goes wrong with the unit test
+     */
+    public void testDoPerformBubblesException() throws Exception
+    {
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = new DefaultPipelineData();
+        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        runDataMap.put(RunData.class, data);
+        pipelineData.put(RunData.class, runDataMap);
+        data.setAction("VelocityActionThrowsException");
+        try
+        {
+            ActionLoader.getInstance().exec(data, data.getAction());
+            fail("Should have thrown an exception");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+            fail("Should have thrown an exception");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+    }
+
+    /**
      * This unit test verifies that if an Action Event doEventSubmit_ is 
called,
-     * and it throws an Exception, if the action.event.bubbleexception
-     * property is set to false then the exception is NOT bubbled up
+     * and it throws an Exception, the exception is bubbled up out of the
+     * ActionLoader...
      *
-     * @throws Exception If something goes wrong with the unit test
+     * @throws Exception
+     *             If something goes wrong with the unit test
      */
-       public void testActionEventDoesntBubbleException() throws Exception {
-               // can't seem to figure out how to setup the Mock Request with 
the right parameters...
-               
Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
-               request.setupAddParameter("eventSubmit_doCauseexception", 
"foo");
-               RunData data = getRunData(request,response,config);
-               PipelineData pipelineData = new DefaultPipelineData();
-               Map runDataMap = new HashMap();
-               runDataMap.put(RunData.class, data);
-               pipelineData.put(RunData.class, runDataMap);
-               data.setAction("VelocityActionThrowsException");
-               data.getParameters().add("eventSubmit_doCauseexception", "foo");
-               assertTrue(
-                       
data.getParameters().containsKey("eventSubmit_doCauseexception"));
-
-               try {
-                       ActionLoader.getInstance().exec(data, data.getAction());
-               } catch (Exception e) {
-                       fail("Should NOT have thrown an exception:" + 
e.getMessage());
-               }
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, 
data.getAction());
-               } catch (Exception e) {
-                       fail("Should NOT have thrown an exception:" + 
e.getMessage());
-               }
-       }
-       public void testNonexistentActionCausesError() throws Exception {
-           RunData data = getRunData(request,response,config);
-               PipelineData pipelineData = new DefaultPipelineData();
-               Map runDataMap = new HashMap();
-               runDataMap.put(RunData.class, data);
-               pipelineData.put(RunData.class, runDataMap);
-               data.setAction("ImaginaryAction");
-               try {
-                       ActionLoader.getInstance().exec(data, "boo");
-                       fail("Should have thrown an exception");
-               } catch (Exception e) {
-                       //good
-               }
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, "boo");
-                       fail("Should have thrown an exception");
-               } catch (Exception e) {
-                       //good
-               }
-       }
-
-       public void testDoPerformWithRunData() throws Exception
-       {
-           RunData data = getRunData(request,response,config);
-               data.setAction("VelocityActionDoesNothing");
-               try {
-                       ActionLoader.getInstance().exec(data, data.getAction());
-               } catch (Exception e) {
-                   e.printStackTrace();
-                   Assert.fail("Should not have thrown an exception.");
-               }
-
-       }
-
-       public void testDoPerformWithPipelineData() throws Exception
-       {
-           RunData data = getRunData(request,response,config);
-        PipelineData pipelineData = data;
-               data.setAction("VelocityActionDoesNothing");
-               int numberOfCalls = VelocityActionDoesNothing.numberOfCalls;
-               int pipelineDataCalls = 
VelocityActionDoesNothing.pipelineDataCalls;
-               int runDataCalls = VelocityActionDoesNothing.runDataCalls;
-               try {
-                       ActionLoader.getInstance().exec(pipelineData, 
data.getAction());
-               } catch (Exception e) {
-                   e.printStackTrace();
-                   Assert.fail("Should not have thrown an exception.");
-               }
-               
assertEquals(numberOfCalls+1,VelocityActionDoesNothing.numberOfCalls);
-               
assertEquals(runDataCalls,VelocityActionDoesNothing.runDataCalls);
-               
assertEquals(pipelineDataCalls+1,VelocityActionDoesNothing.pipelineDataCalls);
+    public void testActionEventBubblesException() throws Exception
+    {
+        // can't seem to figure out how to setup the Mock Request with the 
right
+        // parameters...
+        request.setupAddParameter("eventSubmit_doCauseexception", "foo");
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = new DefaultPipelineData();
+        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        runDataMap.put(RunData.class, data);
+        pipelineData.put(RunData.class, runDataMap);
+        data.setAction("VelocityActionThrowsException");
+        data.getParameters().add("eventSubmit_doCauseexception", "foo");
+        
assertTrue(data.getParameters().containsKey("eventSubmit_doCauseexception"));
+        try
+        {
+            ActionLoader.getInstance().exec(data, data.getAction());
+            fail("Should have bubbled out an exception thrown by the action.");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+            fail("Should have bubbled out an exception thrown by the action.");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+    }
+
+    /**
+     * This unit test verifies that if your standard doPerform is called, and 
it
+     * throws an Exception, if the action.event.bubbleexception property is set
+     * to false then the exception is NOT bubbled up
+     *
+     * @throws Exception
+     *             If something goes wrong with the unit test
+     */
+    public void testDoPerformDoesntBubbleException() throws Exception
+    {
+        Turbine.getConfiguration().setProperty("action.event.bubbleexception", 
Boolean.FALSE);
+        
assertFalse(Turbine.getConfiguration().getBoolean("action.event.bubbleexception"));
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = new DefaultPipelineData();
+        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        runDataMap.put(RunData.class, data);
+        pipelineData.put(RunData.class, runDataMap);
+        data.setAction("VelocityActionThrowsException");
+        try
+        {
+            ActionLoader.getInstance().exec(data, data.getAction());
+        }
+        catch (Exception e)
+        {
+            fail("Should NOT have thrown an exception:" + e.getMessage());
+        }
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+        }
+        catch (Exception e)
+        {
+            fail("Should NOT have thrown an exception:" + e.getMessage());
+        }
+    }
 
-       }
+    /**
+     * This unit test verifies that if an Action Event doEventSubmit_ is 
called,
+     * and it throws an Exception, if the action.event.bubbleexception property
+     * is set to false then the exception is NOT bubbled up
+     *
+     * @throws Exception
+     *             If something goes wrong with the unit test
+     */
+    public void testActionEventDoesntBubbleException() throws Exception
+    {
+        // can't seem to figure out how to setup the Mock Request with the 
right
+        // parameters...
+        Turbine.getConfiguration().setProperty("action.event.bubbleexception", 
Boolean.FALSE);
+        request.setupAddParameter("eventSubmit_doCauseexception", "foo");
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = new DefaultPipelineData();
+        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        runDataMap.put(RunData.class, data);
+        pipelineData.put(RunData.class, runDataMap);
+        data.setAction("VelocityActionThrowsException");
+        data.getParameters().add("eventSubmit_doCauseexception", "foo");
+        
assertTrue(data.getParameters().containsKey("eventSubmit_doCauseexception"));
+
+        try
+        {
+            ActionLoader.getInstance().exec(data, data.getAction());
+        }
+        catch (Exception e)
+        {
+            fail("Should NOT have thrown an exception:" + e.getMessage());
+        }
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+        }
+        catch (Exception e)
+        {
+            fail("Should NOT have thrown an exception:" + e.getMessage());
+        }
+    }
+
+    public void testNonexistentActionCausesError() throws Exception
+    {
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = new DefaultPipelineData();
+        Map<Class<?>, Object> runDataMap = new HashMap<Class<?>, Object>();
+        runDataMap.put(RunData.class, data);
+        pipelineData.put(RunData.class, runDataMap);
+        data.setAction("ImaginaryAction");
+        try
+        {
+            ActionLoader.getInstance().exec(data, "boo");
+            fail("Should have thrown an exception");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, "boo");
+            fail("Should have thrown an exception");
+        }
+        catch (Exception e)
+        {
+            // good
+        }
+    }
+
+    public void testDoPerformWithRunData() throws Exception
+    {
+        RunData data = getRunData(request, response, config);
+        data.setAction("VelocityActionDoesNothing");
+        try
+        {
+            ActionLoader.getInstance().exec(data, data.getAction());
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            Assert.fail("Should not have thrown an exception.");
+        }
+    }
+
+    public void testDoPerformWithPipelineData() throws Exception
+    {
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = data;
+        data.setAction("VelocityActionDoesNothing");
+        int numberOfCalls = VelocityActionDoesNothing.numberOfCalls;
+        int pipelineDataCalls = VelocityActionDoesNothing.pipelineDataCalls;
+        int runDataCalls = VelocityActionDoesNothing.runDataCalls;
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            Assert.fail("Should not have thrown an exception.");
+        }
+        assertEquals(numberOfCalls + 1, 
VelocityActionDoesNothing.numberOfCalls);
+        assertEquals(runDataCalls, VelocityActionDoesNothing.runDataCalls);
+        assertEquals(pipelineDataCalls + 1, 
VelocityActionDoesNothing.pipelineDataCalls);
+    }
+
+    public void testDoPerformWithServiceInjection() throws Exception
+    {
+        RunData data = getRunData(request, response, config);
+        PipelineData pipelineData = data;
+        data.setAction("VelocityActionWithServiceInjection");
 
+        try
+        {
+            ActionLoader.getInstance().exec(pipelineData, data.getAction());
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            Assert.fail("Should not have thrown an exception.");
+        }
+    }
 }

Added: 
turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java?rev=1409409&view=auto
==============================================================================
--- 
turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java
 (added)
+++ 
turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java
 Wed Nov 14 21:18:20 2012
@@ -0,0 +1,65 @@
+package org.apache.turbine.modules.actions;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import junit.framework.Assert;
+
+import org.apache.turbine.annotation.InjectService;
+import org.apache.turbine.pipeline.PipelineData;
+import org.apache.turbine.services.rundata.RunDataService;
+import org.apache.turbine.util.RunData;
+import org.apache.velocity.context.Context;
+/**
+ * This action is used in testing the injection of services.
+ *
+ * @author <a href="mailto:[email protected]";>Thomas Vandahl</a>
+ */
+public class VelocityActionWithServiceInjection extends VelocityAction
+{
+    @InjectService( RunDataService.SERVICE_NAME )
+    private RunDataService runDataService;
+
+    /**
+     *  Default action is nothing.
+     *
+     * @param  data           Current RunData information
+     * @param  context        Context to populate
+     * @exception  Exception  Thrown on error
+     */
+    public void doPerform(RunData data, Context context) throws Exception
+    {
+        log.debug("Calling doPerform");
+    }
+
+    /**
+     *  Default action is nothing.
+     *
+     * @param  data           Current RunData information
+     * @param  context        Context to populate
+     * @exception  Exception  Thrown on error
+     */
+    public void doPerform(PipelineData pipelineData, Context context) throws 
Exception
+    {
+        log.debug("Calling doPerform(PipelineData)");
+               Assert.assertNotNull("runDataService object was Null.", 
runDataService);
+        log.debug("Injected service is " + runDataService.getName());
+    }
+}

Propchange: 
turbine/core/trunk/src/test/org/apache/turbine/modules/actions/VelocityActionWithServiceInjection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to