You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/09/20 22:22:45 UTC

svn commit: r999102 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/internal/transform/ main/java/org/apache/tapestry5/services/ test/app1/ test/groovy/org/apache/tapest...

Author: hlship
Date: Mon Sep 20 20:22:44 2010
New Revision: 999102

URL: http://svn.apache.org/viewvc?rev=999102&view=rev
Log:
Merge branch 'TAP5-1011' into trunk

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PACAnnotationDemo.tml
    tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/PageActivationContextAnnotationTests.groovy
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java   (with props)
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java?rev=999102&r1=999101&r2=999102&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java Mon Sep 20 20:22:44 2010
@@ -2371,19 +2371,22 @@ public final class InternalClassTransfor
         {
             public void advise(ComponentMethodInvocation invocation)
             {
+                // Invoke the super-class implementation first.
+                
+                invocation.proceed();
+                
                 ComponentEvent event = (ComponentEvent) invocation.getParameter(0);
 
-                if (event.matches(eventType, "", minContextValues))
+                if (!event.isAborted() && event.matches(eventType, "", minContextValues))
                 {
                     event.setMethodDescription(methodDescription);
 
                     handler.handleEvent(invocation.getInstance(), event);
 
+                    // Ensure that the caller knows that some event handler method
+                    // was invoked.
                     invocation.overrideResult(true);
                 }
-
-                if (!event.isAborted())
-                    invocation.proceed();
             }
         };
     }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java?rev=999102&r1=999101&r2=999102&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java Mon Sep 20 20:22:44 2010
@@ -24,12 +24,8 @@ import org.apache.tapestry5.runtime.Comp
 import org.apache.tapestry5.services.ClassTransformation;
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
 import org.apache.tapestry5.services.ComponentEventHandler;
-import org.apache.tapestry5.services.ComponentMethodAdvice;
-import org.apache.tapestry5.services.ComponentMethodInvocation;
 import org.apache.tapestry5.services.FieldAccess;
-import org.apache.tapestry5.services.TransformConstants;
 import org.apache.tapestry5.services.TransformField;
-import org.apache.tapestry5.services.TransformMethod;
 
 /**
  * Provides the page activation context handlers. This worker must be scheduled before

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java?rev=999102&r1=999101&r2=999102&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java Mon Sep 20 20:22:44 2010
@@ -623,9 +623,10 @@ public interface ClassTransformation ext
     /**
      * Adds advice to the {@link Component#dispatchComponentEvent(org.apache.tapestry5.runtime.ComponentEvent)} method.
      * If the handler is invoked,
-     * the return value of the method will be overriden to true. The invocation will proceeed either way (whether the
-     * handler is invoked or not). Updates {@linkplain MutableComponentModel#addEventHandler(String) the model} to
-     * indicate that there is a handler for the named event.
+     * the return value of the method will be overriden to true. Updates
+     * {@linkplain MutableComponentModel#addEventHandler(String) the model} to
+     * indicate that there is a handler for the named event. Existing handlers, or super-class handlers,
+     * are invoked <em>first</em>.
      * 
      * @param eventType
      *            name of event to be handled

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=999102&r1=999101&r2=999102&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Mon Sep 20 20:22:44 2010
@@ -611,7 +611,7 @@ public final class TapestryModule
         configuration.add("Component", new ComponentWorker(resolver));
         configuration.add("Mixin", new MixinWorker(resolver));
         configuration.addInstance("ActivationRequestParameter", ActivationRequestParameterWorker.class,
-                "before:OnEvent");
+                "after:OnEvent");
         configuration.addInstance("OnEvent", OnEventWorker.class);
         configuration.add("SupportsInformalParameters", new SupportsInformalParametersWorker());
         configuration.addInstance("InjectPage", InjectPageWorker.class);
@@ -671,7 +671,7 @@ public final class TapestryModule
 
         configuration.addInstance("UnclaimedField", UnclaimedFieldWorker.class, "after:*");
 
-        configuration.add("PageActivationContext", new PageActivationContextWorker(), "before:OnEvent");
+        configuration.add("PageActivationContext", new PageActivationContextWorker(), "after:OnEvent");
 
         configuration.addInstance("SessionAttribute", SessionAttributeWorker.class);
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PACAnnotationDemo.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PACAnnotationDemo.tml?rev=999102&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PACAnnotationDemo.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/PACAnnotationDemo.tml Mon Sep 20 20:22:44 2010
@@ -0,0 +1,16 @@
+<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+  <h1>@PageActivationContext Demo</h1>
+
+  <dl>
+    <dt>count</dt>
+    <dd id="count">${count}</dd>
+
+    <dt>count set</dt>
+    <dd id="count-set">${countSet}</dd>
+  </dl>
+
+  <p>
+    <t:pagelink page="pacannotationdemo" context="99">activate page with context</t:pagelink>
+  </p>
+</html>
\ No newline at end of file

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/PageActivationContextAnnotationTests.groovy
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/PageActivationContextAnnotationTests.groovy?rev=999102&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/PageActivationContextAnnotationTests.groovy (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/PageActivationContextAnnotationTests.groovy Mon Sep 20 20:22:44 2010
@@ -0,0 +1,35 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.
+
+package org.apache.tapestry5.integration.app1
+
+import org.apache.tapestry5.integration.TapestryCoreTestCase;
+import org.testng.annotations.Test 
+
+class PageActivationContextAnnotationTests extends TapestryCoreTestCase
+{
+    @Test
+    void pac_fields_set_before_activate_event_handler_method_invoked()
+    {
+        clickThru "PageActivationContext Demo"
+        
+        assertText "count", ""
+        assertText "count-set", "false"
+        
+        clickAndWait "link=activate page with context"
+        
+        assertText "count", "99"
+        assertText "count-set", "true"
+    }
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=999102&r1=999101&r2=999102&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java Mon Sep 20 20:22:44 2010
@@ -72,6 +72,9 @@ public class Index
     private static final List<Item> ITEMS = CollectionFactory
             .newList(
 
+                    new Item("PACAnnotationDemo", "PageActivationContext Demo",
+                            "Shows that @PageActivationContext fields are set before calls to the activate event handler."),
+
                     new Item("PublicFieldAccessDemo", "Public Field Access Demo", "Demonstrates TAP5-1222 fix"),
 
                     new Item("ActivationRequestParameterDemo", "ActivationRequestParameter Annotation Demo",
@@ -451,10 +454,12 @@ public class Index
 
                     new Item("SelectModelFromObjectsAndPropertyNameDemo", "SelectModel from objects and property name",
                             "Creating a SelectModel from a list of objects and a label property name"),
-                            
-                    new Item("DecoratePageRenderLinkDemo", "Decorate Page Render Link Demo", "Decorating page render links"),
-                    
-                    new Item("DecorateComponentEventLinkDemo", "Decorate Component Event Link Demo", "Decorating event links")
+
+                    new Item("DecoratePageRenderLinkDemo", "Decorate Page Render Link Demo",
+                            "Decorating page render links"),
+
+                    new Item("DecorateComponentEventLinkDemo", "Decorate Component Event Link Demo",
+                            "Decorating event links")
 
             );
 

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java?rev=999102&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java Mon Sep 20 20:22:44 2010
@@ -0,0 +1,33 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.
+
+package org.apache.tapestry5.integration.app1.pages;
+
+import org.apache.tapestry5.annotations.PageActivationContext;
+import org.apache.tapestry5.annotations.Property;
+
+public class PACAnnotationDemo
+{
+    @Property
+    @PageActivationContext
+    private Integer count;
+
+    @Property
+    private boolean countSet;
+
+    void onActivate()
+    {
+        countSet = count != null;
+    }
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PACAnnotationDemo.java
------------------------------------------------------------------------------
    svn:eol-style = native