Author: hlship
Date: Sat Jul 23 16:58:14 2011
New Revision: 1150153
URL: http://svn.apache.org/viewvc?rev=1150153&view=rev
Log:
TAP5-1508: Recode PageActivationContextWorker to implement CCTW2
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java?rev=1150153&r1=1150152&r2=1150153&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PageActivationContextWorker.java
Sat Jul 23 16:58:14 2011
@@ -1,4 +1,4 @@
-// Copyright 2008, 2009, 2010 The Apache Software Foundation
+// Copyright 2008, 2009, 2010, 2011 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.
@@ -14,68 +14,72 @@
package org.apache.tapestry5.internal.transform;
-import java.util.List;
-
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.annotations.PageActivationContext;
import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
import org.apache.tapestry5.runtime.Component;
import org.apache.tapestry5.runtime.ComponentEvent;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentClassTransformWorker;
import org.apache.tapestry5.services.ComponentEventHandler;
-import org.apache.tapestry5.services.FieldAccess;
-import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
+
+import java.util.List;
/**
- * Provides the page activation context handlers. This worker must be
scheduled before
- * {@link org.apache.tapestry5.internal.transform.OnEventWorker} in order for
the added event handler methods to be
- * properly picked up and processed.
- *
+ * Provides the page activation context handlers.
+ *
* @see org.apache.tapestry5.annotations.PageActivationContext
*/
-public class PageActivationContextWorker implements
ComponentClassTransformWorker
+public class PageActivationContextWorker implements
ComponentClassTransformWorker2
{
- public void transform(ClassTransformation transformation,
MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport
support, MutableComponentModel model)
{
- List<TransformField> fields =
transformation.matchFieldsWithAnnotation(PageActivationContext.class);
+ List<PlasticField> fields =
plasticClass.getFieldsWithAnnotation(PageActivationContext.class);
- // In the future we may add rules for ordering the fields (new
attribute on annotation?)
+ switch (fields.size())
+ {
+ case 0:
+ break;
- if (fields.size() > 1)
- throw new
RuntimeException(TransformMessages.illegalNumberOfPageActivationContextHandlers(fields));
+ case 1:
- // So there's 0 or 1 of these
+ transformField(support, fields.get(0));
- for (TransformField field : fields)
- {
- transformField(transformation, model, field);
+ break;
+
+ default:
+
+ throw new
RuntimeException(TransformMessages.illegalNumberOfPageActivationContextHandlers2(fields));
}
}
- private void transformField(ClassTransformation transformation,
MutableComponentModel model, TransformField field)
+ private void transformField(TransformationSupport support, PlasticField
field)
{
PageActivationContext annotation =
field.getAnnotation(PageActivationContext.class);
- FieldAccess access = field.getAccess();
+ FieldHandle handle = field.getHandle();
if (annotation.activate())
{
- transformation.addComponentEventHandler(EventConstants.ACTIVATE, 1,
+ support.addEventHandler(EventConstants.ACTIVATE, 1,
"PageActivationContextWorker activate event handler",
- createActivationHandler(field.getType(), access));
+ createActivationHandler(field.getTypeName(), handle));
}
if (annotation.passivate())
{
- transformation.addComponentEventHandler(EventConstants.PASSIVATE,
0,
- "PageActivationContextWorker passivate event handler",
createPassivateHandler(access));
+ support.addEventHandler(EventConstants.PASSIVATE, 0,
+ "PageActivationContextWorker passivate event handler",
createPassivateHandler(handle));
}
- // We don't claim the field, and other workers may even replace it
with a FieldValueConduit.
+ // We don't claim the field, and other workers may even replace it
with a FieldConduit.
+
}
- private static ComponentEventHandler createActivationHandler(final String
fieldType, final FieldAccess access)
+ private static ComponentEventHandler createActivationHandler(final String
fieldType, final FieldHandle handle)
{
return new ComponentEventHandler()
{
@@ -83,18 +87,18 @@ public class PageActivationContextWorker
{
Object value = event.coerceContext(0, fieldType);
- access.write(instance, value);
+ handle.set(instance, value);
}
};
}
- private static ComponentEventHandler createPassivateHandler(final
FieldAccess access)
+ private static ComponentEventHandler createPassivateHandler(final
FieldHandle handle)
{
return new ComponentEventHandler()
{
public void handleEvent(Component instance, ComponentEvent event)
{
- Object value = access.read(instance);
+ Object value = handle.get(instance);
event.storeResult(value);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java?rev=1150153&r1=1150152&r2=1150153&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/TransformMessages.java
Sat Jul 23 16:58:14 2011
@@ -22,6 +22,7 @@ import org.apache.tapestry5.ioc.Messages
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.internal.util.MessagesImpl;
+import org.apache.tapestry5.plastic.PlasticField;
import org.apache.tapestry5.services.TransformField;
public class TransformMessages
@@ -45,6 +46,18 @@ public class TransformMessages
return
MESSAGES.format("illegal-number-of-page-activation-context-handlers",
InternalUtils.joinSorted(names));
}
+ public static String
illegalNumberOfPageActivationContextHandlers2(List<PlasticField> fields)
+ {
+ List<String> names = CollectionFactory.newList();
+
+ for (PlasticField field : fields)
+ {
+ names.add(field.getName());
+ }
+
+ return
MESSAGES.format("illegal-number-of-page-activation-context-handlers",
InternalUtils.joinSorted(names));
+ }
+
public static String badMixinConstraintLength(MixinClasses mixin, String
fieldName)
{
return MESSAGES.format("bad-mixin-constraint-length",
mixin.value().length, fieldName, mixin.order().length);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1150153&r1=1150152&r2=1150153&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
Sat Jul 23 16:58:14 2011
@@ -515,6 +515,7 @@ public final class TapestryModule
* <dd>Allows fields to retain their values between requests</dd>
* <dt>Meta</dt>
* <dd>Checks for meta data annotations and adds it to the component
model</dd>
+ * <dt>PageActivationContext</dt> <dd>Support for {@link
PageActivationContext} annotation</dd>
* <dt>Cached</dt>
* <dd>Checks for the {@link org.apache.tapestry5.annotations.Cached}
annotation</dd>
* </dl>
@@ -564,6 +565,7 @@ public final class TapestryModule
configuration.add("Retain", new RetainWorker());
+ configuration.add("PageActivationContext", new
PageActivationContextWorker(), "after:OnEvent");
configuration.addInstance("Cached", CachedWorker.class);
@@ -638,8 +640,6 @@ public final class TapestryModule
configuration.addInstance("PageReset",
PageResetAnnotationWorker.class);
- configuration.add("PageActivationContext", new
PageActivationContextWorker(), "after:OnEvent");
-
configuration.addInstance("SessionAttribute",
SessionAttributeWorker.class);
configuration.addInstance("HeartbeatDeferred",
HeartbeatDeferredWorker.class, "after:RenderPhase");