Dan,

Good start on your first commit, but you're not done yet ... need to
see some tests.  Even modifying the integration test suite to have
some event handler method return a page class instead of a page name,
but testing is mandatory.

I do appreciate that you updated the documentation, though. That and
some tests and we're all in good shape.

Howard


On 6/7/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
Author: gredler
Date: Thu Jun  7 17:11:23 2007
New Revision: 545354

URL: http://svn.apache.org/viewvc?view=rev&rev=545354
Log:
TAPESTRY-1370: Add a component event result processor for Class instances

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
    tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java?view=auto&rev=545354
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/ClassResultProcessor.java
 Thu Jun  7 17:11:23 2007
@@ -0,0 +1,56 @@
+// Copyright 2007 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.tapestry.internal.services;
+
+import org.apache.tapestry.Link;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.runtime.Component;
+import org.apache.tapestry.services.ActionResponseGenerator;
+import org.apache.tapestry.services.ComponentClassResolver;
+import org.apache.tapestry.services.ComponentEventResultProcessor;
+
+/**
+ * Used when a component event handler returns a class value. The value is 
interpreted as the page
+ * class. A link to the page will be sent.
+ *
+ * @see LinkActionResponseGenerator
+ */
+public class ClassResultProcessor implements 
ComponentEventResultProcessor<Class>
+{
+    private ComponentClassResolver _resolver;
+
+    private final RequestPageCache _requestPageCache;
+
+    private final LinkFactory _linkFactory;
+
+    public ClassResultProcessor(ComponentClassResolver resolver, 
RequestPageCache requestPageCache,
+            LinkFactory linkFactory)
+    {
+        _resolver = resolver;
+        _requestPageCache = requestPageCache;
+        _linkFactory = linkFactory;
+    }
+
+    public ActionResponseGenerator processComponentEvent(Class value, 
Component component,
+            String methodDescripion)
+    {
+        String className = value.getName();
+        String pageName = _resolver.resolvePageClassNameToPageName(className);
+        Page page = _requestPageCache.get(pageName);
+        Link link = _linkFactory.createPageLink(page);
+        return new LinkActionResponseGenerator(link);
+    }
+
+}

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=545354&r1=545353&r2=545354
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
 Thu Jun  7 17:11:23 2007
@@ -80,6 +80,7 @@
 import org.apache.tapestry.internal.services.BeanBlockSourceImpl;
 import org.apache.tapestry.internal.services.BeanModelSourceImpl;
 import org.apache.tapestry.internal.services.BindingSourceImpl;
+import org.apache.tapestry.internal.services.ClassResultProcessor;
 import org.apache.tapestry.internal.services.ClasspathAssetAliasManagerImpl;
 import org.apache.tapestry.internal.services.CommonResourcesInjectionProvider;
 import org.apache.tapestry.internal.services.ComponentActionDispatcher;
@@ -1262,7 +1263,7 @@
     public void contributeComponentEventResultProcessor(
             @InjectService("ComponentInstanceResultProcessor")
             ComponentEventResultProcessor componentInstanceProcessor,
-
+            ComponentClassResolver componentClassResolver,
             MappedConfiguration<Class, ComponentEventResultProcessor> 
configuration)
     {
         configuration.add(
@@ -1288,6 +1289,8 @@
         });

         configuration.add(String.class, new 
StringResultProcessor(_requestPageCache, _linkFactory));
+
+        configuration.add(Class.class, new 
ClassResultProcessor(componentClassResolver, _requestPageCache, _linkFactory));

         configuration.add(Component.class, componentInstanceProcessor);


Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt?view=diff&rev=545354&r1=545353&r2=545354
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt 
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/event.apt Thu Jun 
 7 17:11:23 2007
@@ -107,7 +107,7 @@

   You should qualify exactly which component(s) you wish to recieve events 
from.

-Event Handler Method Convention Names
+Event Handler Method Convention Names

   As an alternative to the use of annotations, you may name your events in a 
specific fashion, and Tapestry will invoke your methods just as if
   they were annotated.
@@ -128,6 +128,10 @@

   Note from Howard: I've found that I prefer the naming convention approach, 
and reserve the annotation just for situations that don't otherwise fit.

+Event Handler Method Return Values
+
+  For page navigation events, the value returned from an event handler method 
{{{pagenav.html}determines how Tapestry will render a response}}.
+
 Event Context

   The context values (the context parameter to the ActionLink component) can 
be any object.
@@ -154,8 +158,4 @@

   The event will bubble up the hierarchy, until it is aborted. The event is 
aborted
   when an event handler method returns a non-null value.
-
-  For page navigation events, the value returned from an event handler method 
{{{pagenav.html}determines how Tapestry will render a response}}.

-
-
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt?view=diff&rev=545354&r1=545353&r2=545354
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt 
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/pagenav.apt Thu 
Jun  7 17:11:23 2007
@@ -45,15 +45,22 @@
   are transitory, meaningful only while the application is actively engaged, 
and not meant to be used in later sessions.

 * String response
-
+
   When a string is returned, it is expected to be the logical name of a page 
(as opposed to the page's
   fully qualified class name).  As elsewhere, the name of the page is case 
insensitive.

   Again, a render request URL will be constructed and sent to the client as a 
redirect.

+* Class response
+
+  When a class is returned, it is expected to be a page class. Returning a 
page class from an event handler is safer for refactoring
+  than returning a page name.
+
+  As with other response types, a render request URL will be constructed and 
sent to the client as a redirect.
+
 * Page response
-
-  You may also return an instance of a page, rather than the name of a page.
+
+  You may also return an instance of a page, rather than the name or class of 
a page.

   A page may be injected via the 
{{{../apidocs/org/apache/tapestry/annotations/InjectPage.html}InjectPage}} 
annotation.






--
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to