You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/05/25 19:41:26 UTC

svn commit: r948130 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/structure/ test/java/org/apache/tapestry5/integration/app1/

Author: hlship
Date: Tue May 25 17:41:25 2010
New Revision: 948130

URL: http://svn.apache.org/viewvc?rev=948130&view=rev
Log:
TAP5-1165: Track component events as operations

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java?rev=948130&r1=948129&r2=948130&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java Tue May 25 17:41:25 2010
@@ -48,6 +48,7 @@ import org.apache.tapestry5.internal.ser
 import org.apache.tapestry5.internal.services.Instantiator;
 import org.apache.tapestry5.internal.util.NotificationEventCallback;
 import org.apache.tapestry5.ioc.BaseLocatable;
+import org.apache.tapestry5.ioc.Invokable;
 import org.apache.tapestry5.ioc.Location;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.Defense;
@@ -1064,11 +1065,25 @@ public class ComponentPageElementImpl ex
         };
     }
 
-    public boolean triggerContextEvent(String eventType, EventContext context, ComponentEventCallback callback)
+    public boolean triggerContextEvent(final String eventType, final EventContext context,
+            final ComponentEventCallback callback)
     {
         Defense.notBlank(eventType, "eventType");
         Defense.notNull(context, "context");
 
+        String description = String.format("Triggering event '%s' on %s", eventType, completeId);
+
+        return elementResources.invoke(description, new Invokable<Boolean>()
+        {
+            public Boolean invoke()
+            {
+                return processEventTriggering(eventType, context, callback);
+            }
+        });
+    }
+
+    private boolean processEventTriggering(String eventType, EventContext context, ComponentEventCallback callback)
+    {
         boolean result = false;
 
         ComponentPageElement component = this;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java?rev=948130&r1=948129&r2=948130&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResources.java Tue May 25 17:41:25 2010
@@ -17,6 +17,7 @@ package org.apache.tapestry5.internal.st
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.services.ContextValueEncoder;
 import org.slf4j.Logger;
@@ -25,7 +26,7 @@ import org.slf4j.Logger;
  * Provides access to common methods of various services, needed by implementations of {@link ComponentPageElement} and
  * {@link org.apache.tapestry5.internal.InternalComponentResources}.
  */
-public interface ComponentPageElementResources extends ContextValueEncoder
+public interface ComponentPageElementResources extends ContextValueEncoder, OperationTracker
 {
     /**
      * Used to obtain a {@link org.apache.tapestry5.ioc.Messages} instance for a particular component. If the component

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java?rev=948130&r1=948129&r2=948130&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesImpl.java Tue May 25 17:41:25 2010
@@ -1,10 +1,10 @@
-// Copyright 2008, 2009 The Apache Software Foundation
+// Copyright 2008, 2009, 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
+// 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,
@@ -19,8 +19,10 @@ import org.apache.tapestry5.Link;
 import org.apache.tapestry5.internal.services.ComponentClassCache;
 import org.apache.tapestry5.internal.services.LinkSource;
 import org.apache.tapestry5.internal.services.RequestPageCache;
+import org.apache.tapestry5.ioc.Invokable;
 import org.apache.tapestry5.ioc.LoggerSource;
 import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.internal.util.Defense;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.model.ComponentModel;
@@ -53,12 +55,12 @@ public class ComponentPageElementResourc
 
     private final LoggerSource loggerSource;
 
+    private final OperationTracker tracker;
+
     public ComponentPageElementResourcesImpl(Locale locale, ComponentMessagesSource componentMessagesSource,
-                                             TypeCoercer typeCoercer,
-                                             ComponentClassCache componentClassCache,
-                                             ContextValueEncoder contextValueEncoder, LinkSource linkSource,
-                                             RequestPageCache requestPageCache,
-                                             ComponentClassResolver componentClassResolver, LoggerSource loggerSource)
+            TypeCoercer typeCoercer, ComponentClassCache componentClassCache, ContextValueEncoder contextValueEncoder,
+            LinkSource linkSource, RequestPageCache requestPageCache, ComponentClassResolver componentClassResolver,
+            LoggerSource loggerSource, OperationTracker tracker)
     {
         this.componentMessagesSource = componentMessagesSource;
         this.locale = locale;
@@ -69,6 +71,7 @@ public class ComponentPageElementResourc
         this.requestPageCache = requestPageCache;
         this.componentClassResolver = componentClassResolver;
         this.loggerSource = loggerSource;
+        this.tracker = tracker;
     }
 
     public Messages getMessages(ComponentModel componentModel)
@@ -87,12 +90,12 @@ public class ComponentPageElementResourc
     }
 
     public Link createComponentEventLink(ComponentResources resources, String eventType, boolean forForm,
-                                         Object... context)
+            Object... context)
     {
         Page page = requestPageCache.get(resources.getPageName());
 
         return linkSource.createComponentEventLink(page, resources.getNestedId(), eventType, forForm,
-                                                   defaulted(context));
+                defaulted(context));
     }
 
     public Link createPageRenderLink(String pageName, boolean override, Object... context)
@@ -121,7 +124,6 @@ public class ComponentPageElementResourc
         return contextValueEncoder.toClient(value);
     }
 
-
     public <T> T toValue(Class<T> requiredType, String clientValue)
     {
         return contextValueEncoder.toValue(requiredType, clientValue);
@@ -131,4 +133,14 @@ public class ComponentPageElementResourc
     {
         return context == null ? EMPTY : context;
     }
+
+    public <T> T invoke(String description, Invokable<T> operation)
+    {
+        return tracker.invoke(description, operation);
+    }
+
+    public void run(String description, Runnable operation)
+    {
+        tracker.run(description, operation);
+    }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java?rev=948130&r1=948129&r2=948130&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementResourcesSourceImpl.java Tue May 25 17:41:25 2010
@@ -1,10 +1,10 @@
-// Copyright 2008, 2009 The Apache Software Foundation
+// Copyright 2008, 2009, 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
+// 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,
@@ -18,6 +18,7 @@ import org.apache.tapestry5.internal.ser
 import org.apache.tapestry5.internal.services.LinkSource;
 import org.apache.tapestry5.internal.services.RequestPageCache;
 import org.apache.tapestry5.ioc.LoggerSource;
+import org.apache.tapestry5.ioc.OperationTracker;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 import org.apache.tapestry5.ioc.internal.util.Defense;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
@@ -48,13 +49,12 @@ public class ComponentPageElementResourc
 
     private final LoggerSource loggerSource;
 
+    private final OperationTracker tracker;
+
     public ComponentPageElementResourcesSourceImpl(ComponentMessagesSource componentMessagesSource,
-                                                   TypeCoercer typeCoercer,
-                                                   ComponentClassCache componentClassCache,
-                                                   ContextValueEncoder contextValueEncoder, LinkSource linkSource,
-                                                   RequestPageCache requestPageCache,
-                                                   ComponentClassResolver componentClassResolver,
-                                                   LoggerSource loggerSource)
+            TypeCoercer typeCoercer, ComponentClassCache componentClassCache, ContextValueEncoder contextValueEncoder,
+            LinkSource linkSource, RequestPageCache requestPageCache, ComponentClassResolver componentClassResolver,
+            LoggerSource loggerSource, OperationTracker tracker)
     {
         this.componentMessagesSource = componentMessagesSource;
         this.typeCoercer = typeCoercer;
@@ -64,6 +64,7 @@ public class ComponentPageElementResourc
         this.requestPageCache = requestPageCache;
         this.componentClassResolver = componentClassResolver;
         this.loggerSource = loggerSource;
+        this.tracker = tracker;
     }
 
     public ComponentPageElementResources get(Locale locale)
@@ -75,9 +76,8 @@ public class ComponentPageElementResourc
         if (result == null)
         {
             result = new ComponentPageElementResourcesImpl(locale, componentMessagesSource, typeCoercer,
-                                                           componentClassCache,
-                                                           contextValueEncoder, linkSource, requestPageCache,
-                                                           componentClassResolver, loggerSource);
+                    componentClassCache, contextValueEncoder, linkSource, requestPageCache, componentClassResolver,
+                    loggerSource, tracker);
 
             // Small race condition here, where we may create two instances of the CPER for the same locale,
             // but that's not worth worrying about.

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java?rev=948130&r1=948129&r2=948130&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java Tue May 25 17:41:25 2010
@@ -111,7 +111,7 @@ public class CoreBehaviorsTests extends 
         // mismatched tag.
         clickThru("BadTemplate Page");
 
-        assertTextPresent("org.apache.tapestry5.ioc.internal.util.TapestryException",
+        assertTextPresent("org.apache.tapestry5.ioc.internal.OperationException",
                 "Failure parsing template classpath:org/apache/tapestry5/integration/app1/pages/BadTemplate.tml",
                 "The element type \"t:foobar\" must be terminated by the matching end-tag \"</t:foobar>\"",
                 "classpath:org/apache/tapestry5/integration/app1/pages/BadTemplate.tml, line 6",