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",