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 2011/07/23 18:58:15 UTC
svn commit: r1150153 - in
/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5:
internal/transform/PageActivationContextWorker.java
internal/transform/TransformMessages.java services/TapestryModule.java
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");