You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by gv...@apache.org on 2007/07/27 20:48:19 UTC

svn commit: r560350 - in /shale/framework/trunk: shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ shale-view/src/main/java/org/apache/shale/view/faces/ shale-view/src/test/java/or...

Author: gvanmatre
Date: Fri Jul 27 11:48:18 2007
New Revision: 560350

URL: http://svn.apache.org/viewvc?view=rev&rev=560350
Log:
Shale view library was not working with ajax4jsf.  Request parameters were being unnecessarily removed in order to ensure the destroy callback was invoked on ViewControllers annotated using the tiger library.  This logic was repositioned so that only ViewControllers are removed from the request map (SHALE-409).

Modified:
    shale/framework/trunk/shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java
    shale/framework/trunk/shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2TestCase.java
    shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewControllerCallbacks.java
    shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewPhaseListener.java
    shale/framework/trunk/shale-view/src/test/java/org/apache/shale/view/faces/ViewControllerCallbacksTestCase.java

Modified: shale/framework/trunk/shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java?view=diff&rev=560350&r1=560349&r2=560350
==============================================================================
--- shale/framework/trunk/shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java (original)
+++ shale/framework/trunk/shale-tiger/src/main/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java Fri Jul 27 11:48:18 2007
@@ -21,7 +21,10 @@
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.faces.context.FacesContext;
+
+import org.apache.shale.tiger.view.Destroy;
 import org.apache.shale.tiger.view.Preprocess;
 import org.apache.shale.tiger.view.Prerender;
 import org.apache.shale.tiger.view.View;
@@ -116,6 +119,24 @@
     }
 
 
+    /**
+     * Checks the <code>instance</code> to determine if it is a
+     * shale <code>ViewController</code>, <code>AbstractRequestBean</code>,
+     * or has the <code>Destory</code> annotation.
+     *
+     * @param instance Bean instance on which to perform this callback
+     * @return <code>true</code> if the instance implements has a <code>destroy</code> callback
+     */
+
+    public boolean isViewController(Object instance) {
+        
+        if (super.isViewController(instance)) {
+            return true;
+        }
+
+        return (method(instance, Destroy.class) != null);
+    }
+
     // --------------------------------------------------------- Private Methods
 
 
@@ -123,7 +144,7 @@
      * <p>The set of method annotations for callbacks of interest.</p>
      */
     private static final Class[] annotations =
-    { Preprocess.class, Prerender.class };
+    { Preprocess.class, Prerender.class, Destroy.class };
 
 
 

Modified: shale/framework/trunk/shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2TestCase.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2TestCase.java?view=diff&rev=560350&r1=560349&r2=560350
==============================================================================
--- shale/framework/trunk/shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2TestCase.java (original)
+++ shale/framework/trunk/shale-tiger/src/test/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2TestCase.java Fri Jul 27 11:48:18 2007
@@ -90,6 +90,7 @@
         assertEquals("preprocess/prerender/",
                      tvc.log());
 
+        assertTrue(callbacks.isViewController(tvc));
     }
 
 

Modified: shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewControllerCallbacks.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewControllerCallbacks.java?view=diff&rev=560350&r1=560349&r2=560350
==============================================================================
--- shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewControllerCallbacks.java (original)
+++ shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewControllerCallbacks.java Fri Jul 27 11:48:18 2007
@@ -18,6 +18,8 @@
 package org.apache.shale.view.faces;
 
 import javax.faces.context.FacesContext;
+
+import org.apache.shale.view.AbstractRequestBean;
 import org.apache.shale.view.Constants;
 import org.apache.shale.view.ExceptionHandler;
 import org.apache.shale.view.ViewController;
@@ -81,6 +83,19 @@
 
     }
 
+    /**
+     * Checks the <code>instance</code> to determine if it is a
+     * shale <code>ViewController</code> or <code>AbstractRequestBean</code>.
+     *
+     * @param instance Bean instance on which to perform this callback
+     * @return <code>true</code> if the instance implements <code>ViewController</code>
+     */
+
+    public boolean isViewController(Object instance) {
+        
+        return (instance instanceof ViewController
+                || (instance instanceof AbstractRequestBean));
+    }
 
     // ------------------------------------------------------- Protected Methods
 

Modified: shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewPhaseListener.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewPhaseListener.java?view=diff&rev=560350&r1=560349&r2=560350
==============================================================================
--- shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewPhaseListener.java (original)
+++ shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewPhaseListener.java Fri Jul 27 11:48:18 2007
@@ -228,22 +228,12 @@
         List list = new ArrayList();
         Iterator entries = map.entrySet().iterator();
 
-
-        // First select all the ViewController and AbstractRequestBean instances
-        while (entries.hasNext()) {
-            Map.Entry entry = (Map.Entry) entries.next();
-            if ((entry.getValue() instanceof ViewController)
-             || (entry.getValue() instanceof AbstractRequestBean)) {
-                list.add(entry.getKey());
-            }
-        }
-
-        // Second select all remaining instances, which will include annotated
-        // managed beans if Shale Tiger is present
-        entries = map.entrySet().iterator();
+        ViewControllerCallbacks callbackHandler = getViewControllerCallbacks(event.getFacesContext());
+        // select all the ViewController and AbstractRequestBean instances
         while (entries.hasNext()) {
             Map.Entry entry = (Map.Entry) entries.next();
-            if (!list.contains(entry.getKey())) {
+            if (callbackHandler.isViewController(entry.getValue()))
+            {
                 list.add(entry.getKey());
             }
         }
@@ -254,7 +244,8 @@
         while (keys.hasNext()) {
             String key = (String) keys.next();
             try {
-                map.remove(key);
+                map.remove(key); // this will fire the destroy method on the
+                                 // extended managedbean
             } catch (Exception e) {
                 handleException(event.getFacesContext(), e);
             }

Modified: shale/framework/trunk/shale-view/src/test/java/org/apache/shale/view/faces/ViewControllerCallbacksTestCase.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-view/src/test/java/org/apache/shale/view/faces/ViewControllerCallbacksTestCase.java?view=diff&rev=560350&r1=560349&r2=560350
==============================================================================
--- shale/framework/trunk/shale-view/src/test/java/org/apache/shale/view/faces/ViewControllerCallbacksTestCase.java (original)
+++ shale/framework/trunk/shale-view/src/test/java/org/apache/shale/view/faces/ViewControllerCallbacksTestCase.java Fri Jul 27 11:48:18 2007
@@ -90,6 +90,7 @@
         assertEquals("preprocess/prerender/",
                      tvc.log());
 
+        assertTrue(callbacks.isViewController(tvc));
     }