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));
     }
 
 


Reply via email to