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");