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