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