You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by ml...@apache.org on 2013/08/03 14:08:48 UTC

[01/10] git commit: clean a leftover

Updated Branches:
  refs/heads/master 4489a8a4b -> c13ed0602


clean a leftover


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/84d26fd5
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/84d26fd5
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/84d26fd5

Branch: refs/heads/master
Commit: 84d26fd52167a7d9b4ecda66a5864d4f807d1b78
Parents: 4489a8a
Author: Massimo Lusetti <ml...@apache.org>
Authored: Fri Aug 2 11:51:21 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Fri Aug 2 11:51:21 2013 +0200

----------------------------------------------------------------------
 .../archetype-resources/src/main/resources/pages/Index.tml         | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/84d26fd5/quickstart/filtered/archetype-resources/src/main/resources/pages/Index.tml
----------------------------------------------------------------------
diff --git a/quickstart/filtered/archetype-resources/src/main/resources/pages/Index.tml b/quickstart/filtered/archetype-resources/src/main/resources/pages/Index.tml
index 6bc607b..fa4a504 100644
--- a/quickstart/filtered/archetype-resources/src/main/resources/pages/Index.tml
+++ b/quickstart/filtered/archetype-resources/src/main/resources/pages/Index.tml
@@ -21,8 +21,6 @@
         <p><t:actionlink t:id="learnmore" class="btn btn-primary btn-large">Learn more &raquo;</t:actionlink></p>
     </div>
 
-    <t:alerts />
-
     <!-- Example row of columns -->
     <div class="row">
         <div class="span4">


[09/10] git commit: TAP5-2070 test case to be expanded to use something different then Selenium since it doesn't check http status code

Posted by ml...@apache.org.
TAP5-2070 test case to be expanded to use something different then Selenium since it doesn't check http status code


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6762367c
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6762367c
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6762367c

Branch: refs/heads/master
Commit: 6762367c1f0369814089f3c0babdc93f71238094
Parents: d1fabec
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:07:01 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:07:01 2013 +0200

----------------------------------------------------------------------
 .../tapestry5/integration/app1/pages/Index.java |  4 +++-
 .../services/ComponentEventImplTest.java        | 24 ++++++++++----------
 .../structure/ComponentPageElementImplTest.java | 10 ++++----
 3 files changed, 21 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
index 2142991..866ced7 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
@@ -518,7 +518,9 @@ public class Index
 
                     new Item("OverrideLabelClassDemo", "Override Label Class Demo", "Setting class attribute on Label component"),
 
-                    new Item("FormLinkParameters", "FormLinkParameters Demo", "Form link parameters should be unescaped for a hidden field")
+                    new Item("FormLinkParameters", "FormLinkParameters Demo", "Form link parameters should be unescaped for a hidden field"),
+
+					new Item("UnknownAtcivationContext", "Unknown Activation Context Demo", "Page refuse to serve if called with an unknown activation context")
             );
 
     static

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
index 0d9d508..9eb353b 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
@@ -62,7 +62,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventType", "someId", 0));
         assertFalse(event.matches("foo", "someId", 0));
@@ -88,7 +88,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         event.storeResult(result);
 
@@ -111,7 +111,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("EVENTTYPE", "someid", 0));
 
@@ -131,7 +131,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventType", "someId", 0));
 
@@ -153,7 +153,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventtype", "SOMEID", 0));
 
@@ -178,7 +178,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         assertSame(event.coerceContext(0, "java.lang.Integer"), value);
 
@@ -199,7 +199,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -234,7 +234,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -273,7 +273,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription(methodDescription);
 
@@ -302,7 +302,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription(methodDescription);
 
@@ -324,7 +324,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, null, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -355,7 +355,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
         event.storeResult(result);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
index 99feb3f..0a495e1 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
@@ -8,6 +8,7 @@ import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.ioc.test.TestBase;
 import org.apache.tapestry5.model.ComponentModel;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.testng.annotations.Test;
 
@@ -22,6 +23,7 @@ public class ComponentPageElementImplTest extends TestBase {
 		Location location = newMock(Location.class);
 		ComponentPageElementResources elementResources = newMock(ComponentPageElementResources.class);
 		ComponentModel model = newMock(ComponentModel.class);
+		MetaDataLocator locator = newMock(MetaDataLocator.class);
 		
 		getMocksControl().resetToNice();
 
@@ -50,16 +52,16 @@ public class ComponentPageElementImplTest extends TestBase {
 		replay();
 		ComponentPageElementImpl c;	// need to create every time because of changing symbols
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertFalse(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertTrue(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertTrue(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertFalse(c.isRenderTracingEnabled());
 	}
 }


[04/10] git commit: TAP5-2070 declare if the component handle the activation context

Posted by ml...@apache.org.
TAP5-2070 declare if the component handle the activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8640a40f
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8640a40f
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8640a40f

Branch: refs/heads/master
Commit: 8640a40fdd25f23bd071fcb627ab31cac8670ca7
Parents: 5cc984b
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:55:47 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:55:47 2013 +0200

----------------------------------------------------------------------
 .../org/apache/tapestry5/internal/transform/OnEventWorker.java | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8640a40f/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
index 234f7db..06f3a1d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
@@ -132,6 +132,8 @@ public class OnEventWorker implements ComponentClassTransformWorker2
 
         int minContextValues = 0;
 
+		boolean handleActivationEventContext = false;
+
         EventHandlerMethod(PlasticMethod method)
         {
             this.method = method;
@@ -220,6 +222,7 @@ public class OnEventWorker implements ComponentClassTransformWorker2
                 if (provider != null)
                 {
                     providers.add(provider);
+					this.handleActivationEventContext = true;
                     continue;
                 }
 
@@ -382,6 +385,9 @@ public class OnEventWorker implements ComponentClassTransformWorker2
                             method.buildMatchAndInvocation(builder, resultVariable);
 
                             model.addEventHandler(method.eventType);
+
+							if (method.handleActivationEventContext)
+								model.doHandleActivationEventContext();
                         }
 
                         builder.loadVariable(resultVariable).returnResult();


[10/10] git commit: TAP5-2070 actual test pages

Posted by ml...@apache.org.
TAP5-2070 actual test pages


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/c13ed060
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/c13ed060
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/c13ed060

Branch: refs/heads/master
Commit: c13ed06021cf280ba43b7cd6053ca88da8230b55
Parents: 6762367
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:07:48 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:07:48 2013 +0200

----------------------------------------------------------------------
 .../app1/UnknownActivationContextTests.groovy   | 13 +++++++++++
 .../pages/UnknownActivationContextDemo.java     | 24 ++++++++++++++++++++
 .../app1/pages/UnknownActivationContextDemo.tml | 10 ++++++++
 3 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
new file mode 100644
index 0000000..5a2fd3d
--- /dev/null
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
@@ -0,0 +1,13 @@
+package org.apache.tapestry5.integration.app1
+
+import org.apache.tapestry5.test.SeleniumTestCase
+import org.testng.annotations.Test
+
+class UnknownActivationContextTests extends SeleniumTestCase
+{
+    // @Test
+    void http_status_code_test_for_unknown_activation_context_case()
+    {
+        // TODO Use a workaround Selenium limitation to check http status code
+    }
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
new file mode 100644
index 0000000..368f159
--- /dev/null
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
@@ -0,0 +1,24 @@
+// Copyright 2008 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.UnknownActivationContextCheck;
+
+@UnknownActivationContextCheck
+public class UnknownActivationContextDemo
+{
+
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
new file mode 100644
index 0000000..a168227
--- /dev/null
+++ b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
@@ -0,0 +1,10 @@
+<html t:type="Border"
+      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+    <h1>Page called with an unknown activation context</h1>
+
+    <p>
+        You should never see me if use an activation context
+    </p>
+
+</html>
\ No newline at end of file


[03/10] git commit: TAP5-2070 have the component model be able to declare if it handle the activation context

Posted by ml...@apache.org.
TAP5-2070 have the component model be able to declare if it handle the activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/5cc984b2
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/5cc984b2
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/5cc984b2

Branch: refs/heads/master
Commit: 5cc984b2c826e619d1dcdb52704bdffca263a97e
Parents: 8fecc8e
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:54:24 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:54:24 2013 +0200

----------------------------------------------------------------------
 .../internal/model/MutableComponentModelImpl.java    | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/5cc984b2/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
index 12691f4..a78366d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
@@ -69,6 +69,8 @@ public final class MutableComponentModelImpl implements MutableComponentModel
 
     private final String libraryName;
 
+	private boolean handleActivationEventContext;
+
     public MutableComponentModelImpl(String componentClassName, Logger logger, Resource baseResource,
                                      ComponentModel parentModel, boolean pageClass, String libraryName)
     {
@@ -79,6 +81,9 @@ public final class MutableComponentModelImpl implements MutableComponentModel
         this.pageClass = pageClass;
         this.libraryName = libraryName;
 
+		// Default to false, explicitly set during page transformation
+		this.handleActivationEventContext = false;
+
         // Pre-allocate names from the parent, to avoid name collisions.
 
         if (this.parentModel != null)
@@ -394,4 +399,14 @@ public final class MutableComponentModelImpl implements MutableComponentModel
     {
         return pageClass;
     }
+
+	public void doHandleActivationEventContext()
+	{
+		this.handleActivationEventContext = true;
+	}
+
+	public boolean handleActivationEventContext()
+	{
+		return this.handleActivationEventContext;
+	}
 }


[04/10] git commit: TAP5-2070 declare if the component handle the activation context

Posted by ml...@apache.org.
TAP5-2070 declare if the component handle the activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8640a40f
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8640a40f
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8640a40f

Branch: refs/heads/master
Commit: 8640a40fdd25f23bd071fcb627ab31cac8670ca7
Parents: 5cc984b
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:55:47 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:55:47 2013 +0200

----------------------------------------------------------------------
 .../org/apache/tapestry5/internal/transform/OnEventWorker.java | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8640a40f/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
index 234f7db..06f3a1d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/OnEventWorker.java
@@ -132,6 +132,8 @@ public class OnEventWorker implements ComponentClassTransformWorker2
 
         int minContextValues = 0;
 
+		boolean handleActivationEventContext = false;
+
         EventHandlerMethod(PlasticMethod method)
         {
             this.method = method;
@@ -220,6 +222,7 @@ public class OnEventWorker implements ComponentClassTransformWorker2
                 if (provider != null)
                 {
                     providers.add(provider);
+					this.handleActivationEventContext = true;
                     continue;
                 }
 
@@ -382,6 +385,9 @@ public class OnEventWorker implements ComponentClassTransformWorker2
                             method.buildMatchAndInvocation(builder, resultVariable);
 
                             model.addEventHandler(method.eventType);
+
+							if (method.handleActivationEventContext)
+								model.doHandleActivationEventContext();
                         }
 
                         builder.loadVariable(resultVariable).returnResult();


[07/10] git commit: TAP5-2070 hook the services into our IoC

Posted by ml...@apache.org.
TAP5-2070 hook the services into our IoC


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6d702284
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6d702284
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6d702284

Branch: refs/heads/master
Commit: 6d70228460b0229aa106da356e98ba31ca0ecb36
Parents: 2db059c
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:04:45 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:04:45 2013 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/tapestry5/modules/InternalModule.java | 1 +
 .../main/java/org/apache/tapestry5/modules/TapestryModule.java | 6 ++++++
 2 files changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6d702284/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
index b78a4ff..f5e190b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
@@ -69,6 +69,7 @@ public class InternalModule
         binder.bind(InternalComponentInvalidationEventHub.class);
         binder.bind(PageSource.class, PageSourceImpl.class);
         binder.bind(PageLoader.class, PageLoaderImpl.class).preventReloading();
+		binder.bind(UnknownActivationContextHandler.class, UnknownActivationContextHandlerImpl.class);
     }
 
     public static CookieSource buildCookieSource(final RequestGlobals requestGlobals)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6d702284/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 1620d02..17ddbeb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -45,6 +45,7 @@ import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
 import org.apache.tapestry5.internal.services.meta.ContentTypeExtractor;
 import org.apache.tapestry5.internal.services.meta.MetaAnnotationExtractor;
 import org.apache.tapestry5.internal.services.meta.MetaWorkerImpl;
+import org.apache.tapestry5.internal.services.meta.UnknownActivationContextExtractor;
 import org.apache.tapestry5.internal.services.security.ClientWhitelistImpl;
 import org.apache.tapestry5.internal.services.security.LocalhostOnly;
 import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
@@ -2084,6 +2085,10 @@ public final class TapestryModule
         configuration.add(SymbolConstants.BOOTSTRAP_ROOT, "${tapestry.asset.root}/bootstrap_2_3_2");
 
         configuration.add(SymbolConstants.SESSION_LOCKING_ENABLED, true);
+
+		// TAP5-2070 keep the old behavior, defaults to false
+		configuration.add(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK, false);
+
     }
 
     /**
@@ -2464,6 +2469,7 @@ public final class TapestryModule
         configuration.add(Secure.class, new FixedExtractor(MetaDataConstants.SECURE_PAGE));
         configuration.addInstance(ContentType.class, ContentTypeExtractor.class);
         configuration.add(WhitelistAccessOnly.class, new FixedExtractor(MetaDataConstants.WHITELIST_ONLY_PAGE));
+		configuration.addInstance(UnknownActivationContextCheck.class, UnknownActivationContextExtractor.class);
     }
 
     /**


[03/10] git commit: TAP5-2070 have the component model be able to declare if it handle the activation context

Posted by ml...@apache.org.
TAP5-2070 have the component model be able to declare if it handle the activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/5cc984b2
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/5cc984b2
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/5cc984b2

Branch: refs/heads/master
Commit: 5cc984b2c826e619d1dcdb52704bdffca263a97e
Parents: 8fecc8e
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:54:24 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:54:24 2013 +0200

----------------------------------------------------------------------
 .../internal/model/MutableComponentModelImpl.java    | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/5cc984b2/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
index 12691f4..a78366d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/model/MutableComponentModelImpl.java
@@ -69,6 +69,8 @@ public final class MutableComponentModelImpl implements MutableComponentModel
 
     private final String libraryName;
 
+	private boolean handleActivationEventContext;
+
     public MutableComponentModelImpl(String componentClassName, Logger logger, Resource baseResource,
                                      ComponentModel parentModel, boolean pageClass, String libraryName)
     {
@@ -79,6 +81,9 @@ public final class MutableComponentModelImpl implements MutableComponentModel
         this.pageClass = pageClass;
         this.libraryName = libraryName;
 
+		// Default to false, explicitly set during page transformation
+		this.handleActivationEventContext = false;
+
         // Pre-allocate names from the parent, to avoid name collisions.
 
         if (this.parentModel != null)
@@ -394,4 +399,14 @@ public final class MutableComponentModelImpl implements MutableComponentModel
     {
         return pageClass;
     }
+
+	public void doHandleActivationEventContext()
+	{
+		this.handleActivationEventContext = true;
+	}
+
+	public boolean handleActivationEventContext()
+	{
+		return this.handleActivationEventContext;
+	}
 }


[06/10] git commit: TAP5-2070 have the meta data constants used to check each page's value

Posted by ml...@apache.org.
TAP5-2070 have the meta data constants used to check each page's value


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/2db059c0
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/2db059c0
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/2db059c0

Branch: refs/heads/master
Commit: 2db059c086ca5999889c3b06f4852cf491e5f78b
Parents: 3054fd6
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:04:01 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:04:01 2013 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/tapestry5/MetaDataConstants.java | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2db059c0/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
index c4baddb..be9a2f9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
@@ -43,4 +43,11 @@ public class MetaDataConstants
      * @since 5.3
      */
     public static final String WHITELIST_ONLY_PAGE = "tapestry.white-list-only-page";
+
+	/**
+	 * Meta data key applied to pages that may only be accessed with a exact activation context.
+	 *
+	 * @since 5.4
+	 */
+	public static final String UNKNOWN_ACTIVATION_CONTEXT_CHECK = "tapestry.unknwon-activation-context-check";
 }


[02/10] git commit: TAP5-2070 annotation and service response handler to get access to page with exact activation context

Posted by ml...@apache.org.
TAP5-2070 annotation and service response handler to get access to page with exact activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8fecc8e1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8fecc8e1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8fecc8e1

Branch: refs/heads/master
Commit: 8fecc8e18e46919387dae2683ebc231f6beb1a74
Parents: 84d26fd
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:52:30 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:52:30 2013 +0200

----------------------------------------------------------------------
 .../UnknownActivationContextCheck.java          | 48 +++++++++++++++++
 .../UnknownActivationContextHandler.java        | 41 ++++++++++++++
 .../UnknownActivationContextHandlerImpl.java    | 57 ++++++++++++++++++++
 .../meta/UnknownActivationContextExtractor.java | 29 ++++++++++
 4 files changed, 175 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
new file mode 100644
index 0000000..7752693
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
@@ -0,0 +1,48 @@
+// Copyright 2008, 2009 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.annotations;
+
+import org.apache.tapestry5.ioc.annotations.AnnotationUseContext;
+import org.apache.tapestry5.ioc.annotations.UseWith;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * A marker annotation that indicates that the page in question may only be accessed with a exact actvation context.
+ *
+ * @see org.apache.tapestry5.MetaDataConstants#UNKNOWN_ACTIVATION_CONTEXT_CHECK
+ * @since 5.4
+ */
+@Target(TYPE)
+@Retention(RUNTIME)
+@Documented
+@UseWith(AnnotationUseContext.PAGE)
+public @interface UnknownActivationContextCheck
+{
+	/**
+	 * If <code>true</code>, the default, the framework will check for an exact (number and type of parameters)
+	 * activation context method and if not found will respond with a 404 Not Found status code, if <code>false</code>
+	 * the activation context is ignored as it was before 5.4 release.
+	 *
+	 * @see org.apache.tapestry5.MetaDataConstants#UNKNOWN_ACTIVATION_CONTEXT_CHECK
+	 * @see org.apache.tapestry5.services.HttpError
+	 */
+	boolean value() default true;
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
new file mode 100644
index 0000000..1bc0d5b
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
@@ -0,0 +1,41 @@
+// Copyright 2030 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.internal.services;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+
+import java.io.IOException;
+
+/**
+ * Responsible for handling the response for a page called with an unknown activation context when the check itself is
+ * enabled.
+ * The default implementation is to respond with a 404 NOT FOUND.
+ *
+ * @see http://issues.apache.org/jira/browse/TAP5-2070
+ * @see org.apache.tapestry5.annotations.UnknownActivationContextCheck
+ * @see org.apache.tapestry5.services.HttpError
+ *
+ * @since 5.4
+ */
+public interface UnknownActivationContextHandler
+{
+    /**
+     * Answer the client in the case of a request coming in with an unknown activation context.
+     */
+    @SuppressWarnings("unchecked")
+	void handleUnknownContext(ComponentResources pageResources, EventContext activationContext)
+							throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
new file mode 100644
index 0000000..6b33595
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
@@ -0,0 +1,57 @@
+// Copyright 2030 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.internal.services;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.ioc.annotations.Primary;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.HttpError;
+import org.apache.tapestry5.services.Traditional;
+import org.slf4j.Logger;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Default implementation for {@link UnknownActivationContextHandler} which answer with a 404 NOT FOUND error.
+ */
+public class UnknownActivationContextHandlerImpl implements UnknownActivationContextHandler
+{
+	private final Logger logger;
+
+	private final ComponentEventResultProcessor resultProcessor;
+
+
+	public UnknownActivationContextHandlerImpl(Logger logger,
+											   @Traditional @Primary
+											   ComponentEventResultProcessor resultProcessor)
+	{
+		this.logger = logger;
+		this.resultProcessor = resultProcessor;
+	}
+
+	public void handleUnknownContext(ComponentResources pageResources, EventContext activationContext)
+			throws IOException
+	{
+		logger.warn("Activate event on page {} was fired with context {} but was not handled",
+				pageResources.getPage().getClass(), activationContext);
+
+		String message = String.format("Activation context %s unrecognized for page %s",
+				activationContext, pageResources.getPage().getClass());
+
+		resultProcessor.processResultValue(new HttpError(HttpServletResponse.SC_NOT_FOUND, message));
+	}
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
new file mode 100644
index 0000000..ee03175
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
@@ -0,0 +1,29 @@
+// 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.internal.services.meta;
+
+import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.annotations.ContentType;
+import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
+
+public class UnknownActivationContextExtractor implements MetaDataExtractor<UnknownActivationContextCheck>
+{
+    public void extractMetaData(MutableComponentModel model, UnknownActivationContextCheck annotation)
+    {
+		model.setMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK, Boolean.toString(annotation.value()));
+    }
+}


[10/10] git commit: TAP5-2070 actual test pages

Posted by ml...@apache.org.
TAP5-2070 actual test pages


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/c13ed060
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/c13ed060
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/c13ed060

Branch: refs/heads/master
Commit: c13ed06021cf280ba43b7cd6053ca88da8230b55
Parents: 6762367
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:07:48 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:07:48 2013 +0200

----------------------------------------------------------------------
 .../app1/UnknownActivationContextTests.groovy   | 13 +++++++++++
 .../pages/UnknownActivationContextDemo.java     | 24 ++++++++++++++++++++
 .../app1/pages/UnknownActivationContextDemo.tml | 10 ++++++++
 3 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
new file mode 100644
index 0000000..5a2fd3d
--- /dev/null
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/UnknownActivationContextTests.groovy
@@ -0,0 +1,13 @@
+package org.apache.tapestry5.integration.app1
+
+import org.apache.tapestry5.test.SeleniumTestCase
+import org.testng.annotations.Test
+
+class UnknownActivationContextTests extends SeleniumTestCase
+{
+    // @Test
+    void http_status_code_test_for_unknown_activation_context_case()
+    {
+        // TODO Use a workaround Selenium limitation to check http status code
+    }
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
new file mode 100644
index 0000000..368f159
--- /dev/null
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.java
@@ -0,0 +1,24 @@
+// Copyright 2008 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.UnknownActivationContextCheck;
+
+@UnknownActivationContextCheck
+public class UnknownActivationContextDemo
+{
+
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c13ed060/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
new file mode 100644
index 0000000..a168227
--- /dev/null
+++ b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/UnknownActivationContextDemo.tml
@@ -0,0 +1,10 @@
+<html t:type="Border"
+      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+    <h1>Page called with an unknown activation context</h1>
+
+    <p>
+        You should never see me if use an activation context
+    </p>
+
+</html>
\ No newline at end of file


[05/10] git commit: TAP5-2070 publish new method to let other code check for activation context handling

Posted by ml...@apache.org.
TAP5-2070 publish new method to let other code check for activation context handling


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/3054fd6e
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/3054fd6e
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/3054fd6e

Branch: refs/heads/master
Commit: 3054fd6ee8ec8c3e8936838c5512780c84ea8598
Parents: 8640a40
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:03:16 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:03:16 2013 +0200

----------------------------------------------------------------------
 54_RELEASE_NOTES.txt                                   |  5 +++++
 .../org/apache/tapestry5/model/ComponentModel.java     | 11 +++++++++++
 .../apache/tapestry5/model/MutableComponentModel.java  | 13 +++++++++++++
 3 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/54_RELEASE_NOTES.txt
----------------------------------------------------------------------
diff --git a/54_RELEASE_NOTES.txt b/54_RELEASE_NOTES.txt
index 6255469..fe4298c 100644
--- a/54_RELEASE_NOTES.txt
+++ b/54_RELEASE_NOTES.txt
@@ -257,6 +257,11 @@ It has been moved to package org.apache.tapestry5; this represents a minor incom
 StreamableResource has been modified, adding a new `getChecksum()` method; this interface is rarely, if ever,
 used or implemented by application code.
 
+## MutableComponentModel Extended
+
+MutableComponentModel has been modified, adding a new ` doHandleActivationEventContext()' method to help check
+activation context exactness; this interface is rarely, if ever, used or implemented by application code
+
 ## Module classes moved to new modules
 
 Traditionally, Tapestry IoC Module classes have lived in the same package as the service interfaces they define, and

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
index 04d5d3d..f19c018 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
@@ -211,4 +211,15 @@ public interface ComponentModel
      * @since 5.2.0
      */
     String[] getOrderForMixin(String mixinClassName);
+
+	/**
+	 * Relevant for pages only, indicates that the component handle the {@link org.apache.tapestry5.EventConstants.ACTIVATE}
+	 * events with a catch all rules
+	 *
+	 * @since 5.4
+	 * @see {@link MutableComponentModel.doHandleActivationEventContext()}
+	 * @return <code>true</code> in case the page implement a catch all rules for the activate event context,
+	 * <code>false</code> otherwise
+	 */
+	boolean handleActivationEventContext();
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
index 227eec9..c7f0477 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
@@ -120,4 +120,17 @@ public interface MutableComponentModel extends ComponentModel
      * @since 5.1.0.0
      */
     void addEventHandler(String eventType);
+
+	/**
+	 * Relevant for pages only, identifies that the component handle {@link org.apache.tapestry5.EventConstants.ACTIVATE}
+	 * events supporting one of the three special case for catch all rules:
+	 * <ul>
+	 *     <li><code>{@link java.lang.Object}[]</code></li>
+	 *     <li><code>{@link java.util.List}</code></li>
+	 *     <li><code>{@link org.apache.tapestry5.EventContext}</code></li>
+	 * </ul>
+	 *
+	 * @since 5.4
+	 */
+	void doHandleActivationEventContext();
 }


[07/10] git commit: TAP5-2070 hook the services into our IoC

Posted by ml...@apache.org.
TAP5-2070 hook the services into our IoC


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6d702284
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6d702284
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6d702284

Branch: refs/heads/master
Commit: 6d70228460b0229aa106da356e98ba31ca0ecb36
Parents: 2db059c
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:04:45 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:04:45 2013 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/tapestry5/modules/InternalModule.java | 1 +
 .../main/java/org/apache/tapestry5/modules/TapestryModule.java | 6 ++++++
 2 files changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6d702284/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
index b78a4ff..f5e190b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/InternalModule.java
@@ -69,6 +69,7 @@ public class InternalModule
         binder.bind(InternalComponentInvalidationEventHub.class);
         binder.bind(PageSource.class, PageSourceImpl.class);
         binder.bind(PageLoader.class, PageLoaderImpl.class).preventReloading();
+		binder.bind(UnknownActivationContextHandler.class, UnknownActivationContextHandlerImpl.class);
     }
 
     public static CookieSource buildCookieSource(final RequestGlobals requestGlobals)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6d702284/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 1620d02..17ddbeb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -45,6 +45,7 @@ import org.apache.tapestry5.internal.services.messages.PropertiesFileParserImpl;
 import org.apache.tapestry5.internal.services.meta.ContentTypeExtractor;
 import org.apache.tapestry5.internal.services.meta.MetaAnnotationExtractor;
 import org.apache.tapestry5.internal.services.meta.MetaWorkerImpl;
+import org.apache.tapestry5.internal.services.meta.UnknownActivationContextExtractor;
 import org.apache.tapestry5.internal.services.security.ClientWhitelistImpl;
 import org.apache.tapestry5.internal.services.security.LocalhostOnly;
 import org.apache.tapestry5.internal.services.templates.DefaultTemplateLocator;
@@ -2084,6 +2085,10 @@ public final class TapestryModule
         configuration.add(SymbolConstants.BOOTSTRAP_ROOT, "${tapestry.asset.root}/bootstrap_2_3_2");
 
         configuration.add(SymbolConstants.SESSION_LOCKING_ENABLED, true);
+
+		// TAP5-2070 keep the old behavior, defaults to false
+		configuration.add(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK, false);
+
     }
 
     /**
@@ -2464,6 +2469,7 @@ public final class TapestryModule
         configuration.add(Secure.class, new FixedExtractor(MetaDataConstants.SECURE_PAGE));
         configuration.addInstance(ContentType.class, ContentTypeExtractor.class);
         configuration.add(WhitelistAccessOnly.class, new FixedExtractor(MetaDataConstants.WHITELIST_ONLY_PAGE));
+		configuration.addInstance(UnknownActivationContextCheck.class, UnknownActivationContextExtractor.class);
     }
 
     /**


[02/10] git commit: TAP5-2070 annotation and service response handler to get access to page with exact activation context

Posted by ml...@apache.org.
TAP5-2070 annotation and service response handler to get access to page with exact activation context


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8fecc8e1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8fecc8e1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8fecc8e1

Branch: refs/heads/master
Commit: 8fecc8e18e46919387dae2683ebc231f6beb1a74
Parents: 84d26fd
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 13:52:30 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 13:52:30 2013 +0200

----------------------------------------------------------------------
 .../UnknownActivationContextCheck.java          | 48 +++++++++++++++++
 .../UnknownActivationContextHandler.java        | 41 ++++++++++++++
 .../UnknownActivationContextHandlerImpl.java    | 57 ++++++++++++++++++++
 .../meta/UnknownActivationContextExtractor.java | 29 ++++++++++
 4 files changed, 175 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
new file mode 100644
index 0000000..7752693
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/annotations/UnknownActivationContextCheck.java
@@ -0,0 +1,48 @@
+// Copyright 2008, 2009 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.annotations;
+
+import org.apache.tapestry5.ioc.annotations.AnnotationUseContext;
+import org.apache.tapestry5.ioc.annotations.UseWith;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * A marker annotation that indicates that the page in question may only be accessed with a exact actvation context.
+ *
+ * @see org.apache.tapestry5.MetaDataConstants#UNKNOWN_ACTIVATION_CONTEXT_CHECK
+ * @since 5.4
+ */
+@Target(TYPE)
+@Retention(RUNTIME)
+@Documented
+@UseWith(AnnotationUseContext.PAGE)
+public @interface UnknownActivationContextCheck
+{
+	/**
+	 * If <code>true</code>, the default, the framework will check for an exact (number and type of parameters)
+	 * activation context method and if not found will respond with a 404 Not Found status code, if <code>false</code>
+	 * the activation context is ignored as it was before 5.4 release.
+	 *
+	 * @see org.apache.tapestry5.MetaDataConstants#UNKNOWN_ACTIVATION_CONTEXT_CHECK
+	 * @see org.apache.tapestry5.services.HttpError
+	 */
+	boolean value() default true;
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
new file mode 100644
index 0000000..1bc0d5b
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandler.java
@@ -0,0 +1,41 @@
+// Copyright 2030 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.internal.services;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+
+import java.io.IOException;
+
+/**
+ * Responsible for handling the response for a page called with an unknown activation context when the check itself is
+ * enabled.
+ * The default implementation is to respond with a 404 NOT FOUND.
+ *
+ * @see http://issues.apache.org/jira/browse/TAP5-2070
+ * @see org.apache.tapestry5.annotations.UnknownActivationContextCheck
+ * @see org.apache.tapestry5.services.HttpError
+ *
+ * @since 5.4
+ */
+public interface UnknownActivationContextHandler
+{
+    /**
+     * Answer the client in the case of a request coming in with an unknown activation context.
+     */
+    @SuppressWarnings("unchecked")
+	void handleUnknownContext(ComponentResources pageResources, EventContext activationContext)
+							throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
new file mode 100644
index 0000000..6b33595
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/UnknownActivationContextHandlerImpl.java
@@ -0,0 +1,57 @@
+// Copyright 2030 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.internal.services;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.ioc.annotations.Primary;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.HttpError;
+import org.apache.tapestry5.services.Traditional;
+import org.slf4j.Logger;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Default implementation for {@link UnknownActivationContextHandler} which answer with a 404 NOT FOUND error.
+ */
+public class UnknownActivationContextHandlerImpl implements UnknownActivationContextHandler
+{
+	private final Logger logger;
+
+	private final ComponentEventResultProcessor resultProcessor;
+
+
+	public UnknownActivationContextHandlerImpl(Logger logger,
+											   @Traditional @Primary
+											   ComponentEventResultProcessor resultProcessor)
+	{
+		this.logger = logger;
+		this.resultProcessor = resultProcessor;
+	}
+
+	public void handleUnknownContext(ComponentResources pageResources, EventContext activationContext)
+			throws IOException
+	{
+		logger.warn("Activate event on page {} was fired with context {} but was not handled",
+				pageResources.getPage().getClass(), activationContext);
+
+		String message = String.format("Activation context %s unrecognized for page %s",
+				activationContext, pageResources.getPage().getClass());
+
+		resultProcessor.processResultValue(new HttpError(HttpServletResponse.SC_NOT_FOUND, message));
+	}
+}

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8fecc8e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
new file mode 100644
index 0000000..ee03175
--- /dev/null
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/meta/UnknownActivationContextExtractor.java
@@ -0,0 +1,29 @@
+// 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.internal.services.meta;
+
+import org.apache.tapestry5.MetaDataConstants;
+import org.apache.tapestry5.annotations.ContentType;
+import org.apache.tapestry5.annotations.UnknownActivationContextCheck;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.services.meta.MetaDataExtractor;
+
+public class UnknownActivationContextExtractor implements MetaDataExtractor<UnknownActivationContextCheck>
+{
+    public void extractMetaData(MutableComponentModel model, UnknownActivationContextCheck annotation)
+    {
+		model.setMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK, Boolean.toString(annotation.value()));
+    }
+}


[05/10] git commit: TAP5-2070 publish new method to let other code check for activation context handling

Posted by ml...@apache.org.
TAP5-2070 publish new method to let other code check for activation context handling


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/3054fd6e
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/3054fd6e
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/3054fd6e

Branch: refs/heads/master
Commit: 3054fd6ee8ec8c3e8936838c5512780c84ea8598
Parents: 8640a40
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:03:16 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:03:16 2013 +0200

----------------------------------------------------------------------
 54_RELEASE_NOTES.txt                                   |  5 +++++
 .../org/apache/tapestry5/model/ComponentModel.java     | 11 +++++++++++
 .../apache/tapestry5/model/MutableComponentModel.java  | 13 +++++++++++++
 3 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/54_RELEASE_NOTES.txt
----------------------------------------------------------------------
diff --git a/54_RELEASE_NOTES.txt b/54_RELEASE_NOTES.txt
index 6255469..fe4298c 100644
--- a/54_RELEASE_NOTES.txt
+++ b/54_RELEASE_NOTES.txt
@@ -257,6 +257,11 @@ It has been moved to package org.apache.tapestry5; this represents a minor incom
 StreamableResource has been modified, adding a new `getChecksum()` method; this interface is rarely, if ever,
 used or implemented by application code.
 
+## MutableComponentModel Extended
+
+MutableComponentModel has been modified, adding a new ` doHandleActivationEventContext()' method to help check
+activation context exactness; this interface is rarely, if ever, used or implemented by application code
+
 ## Module classes moved to new modules
 
 Traditionally, Tapestry IoC Module classes have lived in the same package as the service interfaces they define, and

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
index 04d5d3d..f19c018 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/model/ComponentModel.java
@@ -211,4 +211,15 @@ public interface ComponentModel
      * @since 5.2.0
      */
     String[] getOrderForMixin(String mixinClassName);
+
+	/**
+	 * Relevant for pages only, indicates that the component handle the {@link org.apache.tapestry5.EventConstants.ACTIVATE}
+	 * events with a catch all rules
+	 *
+	 * @since 5.4
+	 * @see {@link MutableComponentModel.doHandleActivationEventContext()}
+	 * @return <code>true</code> in case the page implement a catch all rules for the activate event context,
+	 * <code>false</code> otherwise
+	 */
+	boolean handleActivationEventContext();
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3054fd6e/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
index 227eec9..c7f0477 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/model/MutableComponentModel.java
@@ -120,4 +120,17 @@ public interface MutableComponentModel extends ComponentModel
      * @since 5.1.0.0
      */
     void addEventHandler(String eventType);
+
+	/**
+	 * Relevant for pages only, identifies that the component handle {@link org.apache.tapestry5.EventConstants.ACTIVATE}
+	 * events supporting one of the three special case for catch all rules:
+	 * <ul>
+	 *     <li><code>{@link java.lang.Object}[]</code></li>
+	 *     <li><code>{@link java.util.List}</code></li>
+	 *     <li><code>{@link org.apache.tapestry5.EventContext}</code></li>
+	 * </ul>
+	 *
+	 * @since 5.4
+	 */
+	void doHandleActivationEventContext();
 }


[08/10] git commit: TAP5-2070 check each page for UnknownActivationContext annotation

Posted by ml...@apache.org.
TAP5-2070 check each page for UnknownActivationContext annotation


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d1fabecc
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d1fabecc
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d1fabecc

Branch: refs/heads/master
Commit: d1fabecccf7bd81d0dae8eefda055cf02ee4f981
Parents: 6d70228
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:06:27 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:06:27 2013 +0200

----------------------------------------------------------------------
 .../pageload/ComponentAssemblerImpl.java        |  8 +++--
 .../internal/pageload/PageLoaderImpl.java       |  7 ++--
 .../internal/services/ComponentEventImpl.java   | 19 ++++++++--
 .../DefaultRequestExceptionHandler.java         |  3 +-
 .../internal/services/PageActivatorImpl.java    | 38 +++++++++++++++++---
 .../structure/ComponentPageElementImpl.java     | 25 +++++++++----
 6 files changed, 80 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
index b56b81c..3e3f27c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
@@ -32,6 +32,7 @@ import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 
@@ -60,6 +61,8 @@ class ComponentAssemblerImpl implements ComponentAssembler
 
     private final SymbolSource symbolSource;
 
+	private final MetaDataLocator metaDataLocator;
+
     private Map<String, String> publishedParameterToEmbeddedId;
 
     private Map<String, EmbeddedComponentAssembler> embeddedIdToAssembler;
@@ -67,7 +70,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
     public ComponentAssemblerImpl(ComponentAssemblerSource assemblerSource,
                                   ComponentInstantiatorSource instantiatorSource, ComponentClassResolver componentClassResolver,
                                   Instantiator instantiator, ComponentPageElementResources resources, OperationTracker tracker,
-                                  Request request, SymbolSource symbolSource)
+                                  Request request, SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
         this.assemblerSource = assemblerSource;
         this.instantiatorSource = instantiatorSource;
@@ -77,6 +80,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
         this.tracker = tracker;
         this.request = request;
         this.symbolSource = symbolSource;
+		this.metaDataLocator = metaDataLocator;
     }
 
     public ComponentPageElement assembleRootComponent(final Page page)
@@ -103,7 +107,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
             pageAssembly.weight++;
 
             ComponentPageElement newElement = new ComponentPageElementImpl(pageAssembly.page, instantiator, resources,
-                    request, symbolSource);
+                    request, symbolSource, metaDataLocator);
 
             pageAssembly.componentName.push(new ComponentName(pageAssembly.page.getName()));
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
index f54f42e..2f976e2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
@@ -148,11 +148,13 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
 
     private final Logger logger;
 
+	private final MetaDataLocator metaDataLocator;
+
     public PageLoaderImpl(ComponentInstantiatorSource instantiatorSource, ComponentTemplateSource templateSource,
                           PageElementFactory elementFactory, ComponentPageElementResourcesSource resourcesSource,
                           ComponentClassResolver componentClassResolver, PersistentFieldManager persistentFieldManager,
                           StringInterner interner, OperationTracker tracker, PerthreadManager perThreadManager, Request request,
-                          SymbolSource symbolSource, Logger logger)
+                          SymbolSource symbolSource, Logger logger, MetaDataLocator metaDataLocator)
     {
         this.instantiatorSource = instantiatorSource;
         this.templateSource = templateSource;
@@ -166,6 +168,7 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
         this.request = request;
         this.symbolSource = symbolSource;
         this.logger = logger;
+		this.metaDataLocator = metaDataLocator;
     }
 
     @PostInjection
@@ -263,7 +266,7 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
                 ComponentPageElementResources resources = resourcesSource.get(selector);
 
                 ComponentAssembler assembler = new ComponentAssemblerImpl(PageLoaderImpl.this, instantiatorSource,
-                        componentClassResolver, instantiator, resources, tracker, request, symbolSource);
+                        componentClassResolver, instantiator, resources, tracker, request, symbolSource, metaDataLocator);
 
                 // "Program" the assembler by adding actions to it. The actions interact with a
                 // PageAssembly object (a fresh one for each new page being created).

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
index 9cb0526..7de3120 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
@@ -17,6 +17,7 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.ComponentEventCallback;
 import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.internal.structure.ComponentPageElementResources;
+import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.slf4j.Logger;
 
@@ -30,6 +31,8 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
 
     private final ComponentPageElementResources elementResources;
 
+	private final boolean exactParameterCountMatch;
+
     /**
      * @param eventType
      *            non blank string used to identify the type of event that was triggered
@@ -41,11 +44,17 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
      *            invoked when a non-null return value is obtained from an event handler method
      * @param elementResources
      *            provides access to common resources and services
+	 * @param exactParameterCountMatch
+	 *            the {@link org.apache.tapestry5.ioc.annotations.Symbol} indicating an exact match
+	 *            on parameter count in the {@link EventContext}.
+	 * @param model
+	 *            the {@link ComponentModel} of the component originating the event.
      * @param logger
      *            used to log method invocations
      */
     public ComponentEventImpl(String eventType, String originatingComponentId, EventContext context,
-            ComponentEventCallback handler, ComponentPageElementResources elementResources, Logger logger)
+            ComponentEventCallback handler, ComponentPageElementResources elementResources,
+			boolean exactParameterCountMatch, ComponentModel model, Logger logger)
     {
         super(handler, logger, elementResources);
 
@@ -53,6 +62,7 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
         this.originatingComponentId = originatingComponentId;
         this.elementResources = elementResources;
         this.context = context;
+		this.exactParameterCountMatch = exactParameterCountMatch && !model.handleActivationEventContext();
     }
 
     @Override
@@ -67,8 +77,11 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
         if (isAborted())
             return false;
 
-        return this.eventType.equalsIgnoreCase(eventType) && context.getCount() >= parameterCount
-                && (originatingComponentId.equalsIgnoreCase(componentId) || componentId.equals(""));
+		boolean parameterCountMatch = exactParameterCountMatch ?
+				context.getCount() == parameterCount : context.getCount() >= parameterCount;
+
+		return this.eventType.equalsIgnoreCase(eventType) && parameterCountMatch
+                 && (originatingComponentId.equalsIgnoreCase(componentId) || componentId.equals(""));
     }
 
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
index 7cad70b..897b3b2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
@@ -93,7 +93,8 @@ public class DefaultRequestExceptionHandler implements RequestExceptionHandler
                                           @Symbol(SymbolConstants.EXCEPTION_REPORT_PAGE)
                                           String pageName,
 
-                                          Request request, Response response, ComponentClassResolver componentClassResolver, LinkSource linkSource, ServiceResources serviceResources, Map<Class, Object> configuration)
+                                          Request request, Response response, ComponentClassResolver componentClassResolver,
+										  LinkSource linkSource, ServiceResources serviceResources, Map<Class, Object> configuration)
     {
         this.pageCache = pageCache;
         this.renderer = renderer;

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
index e39b1b9..1304052 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
@@ -16,14 +16,31 @@ package org.apache.tapestry5.internal.services;
 
 import java.io.IOException;
 
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.TrackableComponentEventCallback;
+import org.apache.tapestry5.*;
+import org.apache.tapestry5.internal.EmptyEventContext;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.HttpError;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.slf4j.Logger;
+
+import javax.servlet.http.HttpServletResponse;
 
 public class PageActivatorImpl implements PageActivator
 {
+	private final Logger logger;
+
+	private final MetaDataLocator metaDataLocator;
+
+	private final UnknownActivationContextHandler unknownActivationContextHandler;
+
+	public PageActivatorImpl(Logger logger, MetaDataLocator metaDataLocator,
+							 UnknownActivationContextHandler unknownActivationContextHandler)
+	{
+		this.logger = logger;
+		this.metaDataLocator = metaDataLocator;
+		this.unknownActivationContextHandler = unknownActivationContextHandler;
+	}
 
     @SuppressWarnings("unchecked")
     public boolean activatePage(ComponentResources pageResources, EventContext activationContext,
@@ -31,7 +48,18 @@ public class PageActivatorImpl implements PageActivator
     {
         TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(resultProcessor);
 
-        pageResources.triggerContextEvent(EventConstants.ACTIVATE, activationContext, callback);
+		boolean handled = pageResources.triggerContextEvent(EventConstants.ACTIVATE, activationContext, callback);
+
+		boolean checkUnknown = metaDataLocator.findMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK,
+														pageResources, Boolean.class);
+
+		if ( !handled && activationContext.getCount() > 0 && checkUnknown &&
+			!pageResources.getComponentModel().handleActivationEventContext())
+		{
+			logger.info("Page {} required an exact activation context, let's handle this", pageResources.getPageName());
+			unknownActivationContextHandler.handleUnknownContext(pageResources, activationContext);
+			return true;
+		}
 
         if (callback.isAborted())
         {

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
index ab7b0b5..26d6d03 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
@@ -39,6 +39,7 @@ import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.*;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
@@ -508,8 +509,11 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
     // should be okay since it's a shadow service object
     private final Request request;
     private final SymbolSource symbolSource;
+	private final MetaDataLocator metaDataLocator;
+
     private final boolean productionMode;
     private final boolean componentTracingEnabled;
+	private final boolean exactParameterCountMatch;
 
     // We know that, at the very least, there will be an element to force the component to render
     // its body, so there's no reason to wait to initialize the list.
@@ -543,7 +547,8 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
      */
     ComponentPageElementImpl(Page page, ComponentPageElement container, String id, String nestedId, String completeId,
                              String elementName, Instantiator instantiator, Location location,
-                             ComponentPageElementResources elementResources, Request request, SymbolSource symbolSource)
+                             ComponentPageElementResources elementResources, Request request,
+							 SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
         super(location);
 
@@ -556,13 +561,17 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
         this.elementResources = elementResources;
         this.request = request;
         this.symbolSource = symbolSource;
+		this.metaDataLocator = metaDataLocator;
 
         // evaluate this once because it gets referenced a lot during rendering
         this.productionMode = "true".equals(symbolSource.valueForSymbol(SymbolConstants.PRODUCTION_MODE));
         this.componentTracingEnabled = "true".equals(symbolSource
                 .valueForSymbol(SymbolConstants.COMPONENT_RENDER_TRACING_ENABLED));
 
-        ComponentResources containerResources = container == null ? null : container.getComponentResources();
+		this.exactParameterCountMatch = metaDataLocator.findMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK,
+																page.getName(), Boolean.class);
+
+		ComponentResources containerResources = container == null ? null : container.getComponentResources();
 
         coreResources = new InternalComponentResourcesImpl(this.page, this, containerResources, this.elementResources,
                 completeId, nestedId, instantiator, false);
@@ -586,9 +595,11 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
      * Constructor for the root component of a page.
      */
     public ComponentPageElementImpl(Page page, Instantiator instantiator,
-                                    ComponentPageElementResources elementResources, Request request, SymbolSource symbolSource)
+                                    ComponentPageElementResources elementResources, Request request,
+									SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
-        this(page, null, null, null, page.getName(), null, instantiator, null, elementResources, request, symbolSource);
+		this(page, null, null, null, page.getName(), null, instantiator, null, elementResources,
+				request, symbolSource, metaDataLocator);
     }
 
     private void initializeRenderPhases()
@@ -646,9 +657,9 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
                                          Instantiator instantiator, Location location)
     {
         ComponentPageElementImpl child = new ComponentPageElementImpl(page, this, id, nestedId, completeId,
-                elementName, instantiator, location, elementResources, request, symbolSource);
+                elementName, instantiator, location, elementResources, request, symbolSource, metaDataLocator);
 
-        addEmbeddedElement(child);
+		addEmbeddedElement(child);
 
         return child;
     }
@@ -1109,7 +1120,7 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
                 Logger logger = component.getEventLogger();
 
                 ComponentEvent event = new ComponentEventImpl(currentEventType, componentId, currentContext, wrapped,
-                        elementResources, logger);
+                        elementResources, exactParameterCountMatch, coreResources.getComponentModel(), logger);
 
                 logger.debug(TapestryMarkers.EVENT_DISPATCH, "Dispatch event: {}", event);
 


[09/10] git commit: TAP5-2070 test case to be expanded to use something different then Selenium since it doesn't check http status code

Posted by ml...@apache.org.
TAP5-2070 test case to be expanded to use something different then Selenium since it doesn't check http status code


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6762367c
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6762367c
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6762367c

Branch: refs/heads/master
Commit: 6762367c1f0369814089f3c0babdc93f71238094
Parents: d1fabec
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:07:01 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:07:01 2013 +0200

----------------------------------------------------------------------
 .../tapestry5/integration/app1/pages/Index.java |  4 +++-
 .../services/ComponentEventImplTest.java        | 24 ++++++++++----------
 .../structure/ComponentPageElementImplTest.java | 10 ++++----
 3 files changed, 21 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
index 2142991..866ced7 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
@@ -518,7 +518,9 @@ public class Index
 
                     new Item("OverrideLabelClassDemo", "Override Label Class Demo", "Setting class attribute on Label component"),
 
-                    new Item("FormLinkParameters", "FormLinkParameters Demo", "Form link parameters should be unescaped for a hidden field")
+                    new Item("FormLinkParameters", "FormLinkParameters Demo", "Form link parameters should be unescaped for a hidden field"),
+
+					new Item("UnknownAtcivationContext", "Unknown Activation Context Demo", "Page refuse to serve if called with an unknown activation context")
             );
 
     static

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
index 0d9d508..9eb353b 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventImplTest.java
@@ -62,7 +62,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventType", "someId", 0));
         assertFalse(event.matches("foo", "someId", 0));
@@ -88,7 +88,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         event.storeResult(result);
 
@@ -111,7 +111,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("EVENTTYPE", "someid", 0));
 
@@ -131,7 +131,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventType", "someId", 0));
 
@@ -153,7 +153,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         assertTrue(event.matches("eventtype", "SOMEID", 0));
 
@@ -178,7 +178,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         assertSame(event.coerceContext(0, "java.lang.Integer"), value);
 
@@ -199,7 +199,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, null, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -234,7 +234,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", context, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -273,7 +273,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription(methodDescription);
 
@@ -302,7 +302,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription(methodDescription);
 
@@ -324,7 +324,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, null, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, null, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
 
@@ -355,7 +355,7 @@ public class ComponentEventImplTest extends InternalBaseTestCase
 
         replay();
 
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, logger);
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler, resources, false, mockComponentModel(), logger);
 
         event.setMethodDescription("foo.Bar.baz()");
         event.storeResult(result);

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6762367c/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
index 99feb3f..0a495e1 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/structure/ComponentPageElementImplTest.java
@@ -8,6 +8,7 @@ import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.services.SymbolSource;
 import org.apache.tapestry5.ioc.test.TestBase;
 import org.apache.tapestry5.model.ComponentModel;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.testng.annotations.Test;
 
@@ -22,6 +23,7 @@ public class ComponentPageElementImplTest extends TestBase {
 		Location location = newMock(Location.class);
 		ComponentPageElementResources elementResources = newMock(ComponentPageElementResources.class);
 		ComponentModel model = newMock(ComponentModel.class);
+		MetaDataLocator locator = newMock(MetaDataLocator.class);
 		
 		getMocksControl().resetToNice();
 
@@ -50,16 +52,16 @@ public class ComponentPageElementImplTest extends TestBase {
 		replay();
 		ComponentPageElementImpl c;	// need to create every time because of changing symbols
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertFalse(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertTrue(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertTrue(c.isRenderTracingEnabled());
 		
-		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource);
+		c = new ComponentPageElementImpl(page, null, "id", "nestedId", "completeid", "elementname", instantiator, location, elementResources, request, symbolSource, locator);
 		assertFalse(c.isRenderTracingEnabled());
 	}
 }


[08/10] git commit: TAP5-2070 check each page for UnknownActivationContext annotation

Posted by ml...@apache.org.
TAP5-2070 check each page for UnknownActivationContext annotation


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d1fabecc
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d1fabecc
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d1fabecc

Branch: refs/heads/master
Commit: d1fabecccf7bd81d0dae8eefda055cf02ee4f981
Parents: 6d70228
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:06:27 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:06:27 2013 +0200

----------------------------------------------------------------------
 .../pageload/ComponentAssemblerImpl.java        |  8 +++--
 .../internal/pageload/PageLoaderImpl.java       |  7 ++--
 .../internal/services/ComponentEventImpl.java   | 19 ++++++++--
 .../DefaultRequestExceptionHandler.java         |  3 +-
 .../internal/services/PageActivatorImpl.java    | 38 +++++++++++++++++---
 .../structure/ComponentPageElementImpl.java     | 25 +++++++++----
 6 files changed, 80 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
index b56b81c..3e3f27c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/ComponentAssemblerImpl.java
@@ -32,6 +32,7 @@ import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.EmbeddedComponentModel;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 
@@ -60,6 +61,8 @@ class ComponentAssemblerImpl implements ComponentAssembler
 
     private final SymbolSource symbolSource;
 
+	private final MetaDataLocator metaDataLocator;
+
     private Map<String, String> publishedParameterToEmbeddedId;
 
     private Map<String, EmbeddedComponentAssembler> embeddedIdToAssembler;
@@ -67,7 +70,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
     public ComponentAssemblerImpl(ComponentAssemblerSource assemblerSource,
                                   ComponentInstantiatorSource instantiatorSource, ComponentClassResolver componentClassResolver,
                                   Instantiator instantiator, ComponentPageElementResources resources, OperationTracker tracker,
-                                  Request request, SymbolSource symbolSource)
+                                  Request request, SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
         this.assemblerSource = assemblerSource;
         this.instantiatorSource = instantiatorSource;
@@ -77,6 +80,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
         this.tracker = tracker;
         this.request = request;
         this.symbolSource = symbolSource;
+		this.metaDataLocator = metaDataLocator;
     }
 
     public ComponentPageElement assembleRootComponent(final Page page)
@@ -103,7 +107,7 @@ class ComponentAssemblerImpl implements ComponentAssembler
             pageAssembly.weight++;
 
             ComponentPageElement newElement = new ComponentPageElementImpl(pageAssembly.page, instantiator, resources,
-                    request, symbolSource);
+                    request, symbolSource, metaDataLocator);
 
             pageAssembly.componentName.push(new ComponentName(pageAssembly.page.getName()));
 

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
index f54f42e..2f976e2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
@@ -148,11 +148,13 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
 
     private final Logger logger;
 
+	private final MetaDataLocator metaDataLocator;
+
     public PageLoaderImpl(ComponentInstantiatorSource instantiatorSource, ComponentTemplateSource templateSource,
                           PageElementFactory elementFactory, ComponentPageElementResourcesSource resourcesSource,
                           ComponentClassResolver componentClassResolver, PersistentFieldManager persistentFieldManager,
                           StringInterner interner, OperationTracker tracker, PerthreadManager perThreadManager, Request request,
-                          SymbolSource symbolSource, Logger logger)
+                          SymbolSource symbolSource, Logger logger, MetaDataLocator metaDataLocator)
     {
         this.instantiatorSource = instantiatorSource;
         this.templateSource = templateSource;
@@ -166,6 +168,7 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
         this.request = request;
         this.symbolSource = symbolSource;
         this.logger = logger;
+		this.metaDataLocator = metaDataLocator;
     }
 
     @PostInjection
@@ -263,7 +266,7 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
                 ComponentPageElementResources resources = resourcesSource.get(selector);
 
                 ComponentAssembler assembler = new ComponentAssemblerImpl(PageLoaderImpl.this, instantiatorSource,
-                        componentClassResolver, instantiator, resources, tracker, request, symbolSource);
+                        componentClassResolver, instantiator, resources, tracker, request, symbolSource, metaDataLocator);
 
                 // "Program" the assembler by adding actions to it. The actions interact with a
                 // PageAssembly object (a fresh one for each new page being created).

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
index 9cb0526..7de3120 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventImpl.java
@@ -17,6 +17,7 @@ package org.apache.tapestry5.internal.services;
 import org.apache.tapestry5.ComponentEventCallback;
 import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.internal.structure.ComponentPageElementResources;
+import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.runtime.ComponentEvent;
 import org.slf4j.Logger;
 
@@ -30,6 +31,8 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
 
     private final ComponentPageElementResources elementResources;
 
+	private final boolean exactParameterCountMatch;
+
     /**
      * @param eventType
      *            non blank string used to identify the type of event that was triggered
@@ -41,11 +44,17 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
      *            invoked when a non-null return value is obtained from an event handler method
      * @param elementResources
      *            provides access to common resources and services
+	 * @param exactParameterCountMatch
+	 *            the {@link org.apache.tapestry5.ioc.annotations.Symbol} indicating an exact match
+	 *            on parameter count in the {@link EventContext}.
+	 * @param model
+	 *            the {@link ComponentModel} of the component originating the event.
      * @param logger
      *            used to log method invocations
      */
     public ComponentEventImpl(String eventType, String originatingComponentId, EventContext context,
-            ComponentEventCallback handler, ComponentPageElementResources elementResources, Logger logger)
+            ComponentEventCallback handler, ComponentPageElementResources elementResources,
+			boolean exactParameterCountMatch, ComponentModel model, Logger logger)
     {
         super(handler, logger, elementResources);
 
@@ -53,6 +62,7 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
         this.originatingComponentId = originatingComponentId;
         this.elementResources = elementResources;
         this.context = context;
+		this.exactParameterCountMatch = exactParameterCountMatch && !model.handleActivationEventContext();
     }
 
     @Override
@@ -67,8 +77,11 @@ public class ComponentEventImpl extends EventImpl implements ComponentEvent
         if (isAborted())
             return false;
 
-        return this.eventType.equalsIgnoreCase(eventType) && context.getCount() >= parameterCount
-                && (originatingComponentId.equalsIgnoreCase(componentId) || componentId.equals(""));
+		boolean parameterCountMatch = exactParameterCountMatch ?
+				context.getCount() == parameterCount : context.getCount() >= parameterCount;
+
+		return this.eventType.equalsIgnoreCase(eventType) && parameterCountMatch
+                 && (originatingComponentId.equalsIgnoreCase(componentId) || componentId.equals(""));
     }
 
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
index 7cad70b..897b3b2 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
@@ -93,7 +93,8 @@ public class DefaultRequestExceptionHandler implements RequestExceptionHandler
                                           @Symbol(SymbolConstants.EXCEPTION_REPORT_PAGE)
                                           String pageName,
 
-                                          Request request, Response response, ComponentClassResolver componentClassResolver, LinkSource linkSource, ServiceResources serviceResources, Map<Class, Object> configuration)
+                                          Request request, Response response, ComponentClassResolver componentClassResolver,
+										  LinkSource linkSource, ServiceResources serviceResources, Map<Class, Object> configuration)
     {
         this.pageCache = pageCache;
         this.renderer = renderer;

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
index e39b1b9..1304052 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageActivatorImpl.java
@@ -16,14 +16,31 @@ package org.apache.tapestry5.internal.services;
 
 import java.io.IOException;
 
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.EventConstants;
-import org.apache.tapestry5.EventContext;
-import org.apache.tapestry5.TrackableComponentEventCallback;
+import org.apache.tapestry5.*;
+import org.apache.tapestry5.internal.EmptyEventContext;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.HttpError;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.slf4j.Logger;
+
+import javax.servlet.http.HttpServletResponse;
 
 public class PageActivatorImpl implements PageActivator
 {
+	private final Logger logger;
+
+	private final MetaDataLocator metaDataLocator;
+
+	private final UnknownActivationContextHandler unknownActivationContextHandler;
+
+	public PageActivatorImpl(Logger logger, MetaDataLocator metaDataLocator,
+							 UnknownActivationContextHandler unknownActivationContextHandler)
+	{
+		this.logger = logger;
+		this.metaDataLocator = metaDataLocator;
+		this.unknownActivationContextHandler = unknownActivationContextHandler;
+	}
 
     @SuppressWarnings("unchecked")
     public boolean activatePage(ComponentResources pageResources, EventContext activationContext,
@@ -31,7 +48,18 @@ public class PageActivatorImpl implements PageActivator
     {
         TrackableComponentEventCallback callback = new ComponentResultProcessorWrapper(resultProcessor);
 
-        pageResources.triggerContextEvent(EventConstants.ACTIVATE, activationContext, callback);
+		boolean handled = pageResources.triggerContextEvent(EventConstants.ACTIVATE, activationContext, callback);
+
+		boolean checkUnknown = metaDataLocator.findMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK,
+														pageResources, Boolean.class);
+
+		if ( !handled && activationContext.getCount() > 0 && checkUnknown &&
+			!pageResources.getComponentModel().handleActivationEventContext())
+		{
+			logger.info("Page {} required an exact activation context, let's handle this", pageResources.getPageName());
+			unknownActivationContextHandler.handleUnknownContext(pageResources, activationContext);
+			return true;
+		}
 
         if (callback.isAborted())
         {

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d1fabecc/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
index ab7b0b5..26d6d03 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
@@ -39,6 +39,7 @@ import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.*;
+import org.apache.tapestry5.services.MetaDataLocator;
 import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
 import org.slf4j.Logger;
@@ -508,8 +509,11 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
     // should be okay since it's a shadow service object
     private final Request request;
     private final SymbolSource symbolSource;
+	private final MetaDataLocator metaDataLocator;
+
     private final boolean productionMode;
     private final boolean componentTracingEnabled;
+	private final boolean exactParameterCountMatch;
 
     // We know that, at the very least, there will be an element to force the component to render
     // its body, so there's no reason to wait to initialize the list.
@@ -543,7 +547,8 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
      */
     ComponentPageElementImpl(Page page, ComponentPageElement container, String id, String nestedId, String completeId,
                              String elementName, Instantiator instantiator, Location location,
-                             ComponentPageElementResources elementResources, Request request, SymbolSource symbolSource)
+                             ComponentPageElementResources elementResources, Request request,
+							 SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
         super(location);
 
@@ -556,13 +561,17 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
         this.elementResources = elementResources;
         this.request = request;
         this.symbolSource = symbolSource;
+		this.metaDataLocator = metaDataLocator;
 
         // evaluate this once because it gets referenced a lot during rendering
         this.productionMode = "true".equals(symbolSource.valueForSymbol(SymbolConstants.PRODUCTION_MODE));
         this.componentTracingEnabled = "true".equals(symbolSource
                 .valueForSymbol(SymbolConstants.COMPONENT_RENDER_TRACING_ENABLED));
 
-        ComponentResources containerResources = container == null ? null : container.getComponentResources();
+		this.exactParameterCountMatch = metaDataLocator.findMeta(MetaDataConstants.UNKNOWN_ACTIVATION_CONTEXT_CHECK,
+																page.getName(), Boolean.class);
+
+		ComponentResources containerResources = container == null ? null : container.getComponentResources();
 
         coreResources = new InternalComponentResourcesImpl(this.page, this, containerResources, this.elementResources,
                 completeId, nestedId, instantiator, false);
@@ -586,9 +595,11 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
      * Constructor for the root component of a page.
      */
     public ComponentPageElementImpl(Page page, Instantiator instantiator,
-                                    ComponentPageElementResources elementResources, Request request, SymbolSource symbolSource)
+                                    ComponentPageElementResources elementResources, Request request,
+									SymbolSource symbolSource, MetaDataLocator metaDataLocator)
     {
-        this(page, null, null, null, page.getName(), null, instantiator, null, elementResources, request, symbolSource);
+		this(page, null, null, null, page.getName(), null, instantiator, null, elementResources,
+				request, symbolSource, metaDataLocator);
     }
 
     private void initializeRenderPhases()
@@ -646,9 +657,9 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
                                          Instantiator instantiator, Location location)
     {
         ComponentPageElementImpl child = new ComponentPageElementImpl(page, this, id, nestedId, completeId,
-                elementName, instantiator, location, elementResources, request, symbolSource);
+                elementName, instantiator, location, elementResources, request, symbolSource, metaDataLocator);
 
-        addEmbeddedElement(child);
+		addEmbeddedElement(child);
 
         return child;
     }
@@ -1109,7 +1120,7 @@ public class ComponentPageElementImpl extends BaseLocatable implements Component
                 Logger logger = component.getEventLogger();
 
                 ComponentEvent event = new ComponentEventImpl(currentEventType, componentId, currentContext, wrapped,
-                        elementResources, logger);
+                        elementResources, exactParameterCountMatch, coreResources.getComponentModel(), logger);
 
                 logger.debug(TapestryMarkers.EVENT_DISPATCH, "Dispatch event: {}", event);
 


[06/10] git commit: TAP5-2070 have the meta data constants used to check each page's value

Posted by ml...@apache.org.
TAP5-2070 have the meta data constants used to check each page's value


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/2db059c0
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/2db059c0
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/2db059c0

Branch: refs/heads/master
Commit: 2db059c086ca5999889c3b06f4852cf491e5f78b
Parents: 3054fd6
Author: Massimo Lusetti <ml...@apache.org>
Authored: Sat Aug 3 14:04:01 2013 +0200
Committer: Massimo Lusetti <ml...@apache.org>
Committed: Sat Aug 3 14:04:01 2013 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/tapestry5/MetaDataConstants.java | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2db059c0/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java b/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
index c4baddb..be9a2f9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/MetaDataConstants.java
@@ -43,4 +43,11 @@ public class MetaDataConstants
      * @since 5.3
      */
     public static final String WHITELIST_ONLY_PAGE = "tapestry.white-list-only-page";
+
+	/**
+	 * Meta data key applied to pages that may only be accessed with a exact activation context.
+	 *
+	 * @since 5.4
+	 */
+	public static final String UNKNOWN_ACTIVATION_CONTEXT_CHECK = "tapestry.unknwon-activation-context-check";
 }