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/02/19 19:54:12 UTC

svn commit: r911928 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java

Author: hlship
Date: Fri Feb 19 18:54:12 2010
New Revision: 911928

URL: http://svn.apache.org/viewvc?rev=911928&view=rev
Log:
Recode RenderCommandWorker in terms of method advice

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java?rev=911928&r1=911927&r2=911928&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/RenderCommandWorker.java Fri Feb 19 18:54:12 2010
@@ -1,10 +1,10 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 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,
@@ -15,35 +15,49 @@
 package org.apache.tapestry5.internal.transform;
 
 import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.runtime.RenderQueue;
 import org.apache.tapestry5.services.ClassTransformation;
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
+import org.apache.tapestry5.services.ComponentMethodAdvice;
+import org.apache.tapestry5.services.ComponentMethodInvocation;
 import org.apache.tapestry5.services.TransformMethodSignature;
 
 import java.lang.reflect.Modifier;
 
 /**
- * Ensures that all components implement {@link RenderCommand} by delegating to {@link
- * org.apache.tapestry5.internal.InternalComponentResources#queueRender(org.apache.tapestry5.runtime.RenderQueue)}.
+ * Ensures that all components implement {@link RenderCommand} by delegating to
+ * {@link org.apache.tapestry5.internal.InternalComponentResources#queueRender(org.apache.tapestry5.runtime.RenderQueue)}
+ * .
  */
 public class RenderCommandWorker implements ComponentClassTransformWorker
 {
-    private final TransformMethodSignature RENDER_SIGNATURE =
-            new TransformMethodSignature(Modifier.PUBLIC, "void", "render", new String[] {
-                    MarkupWriter.class.getName(), RenderQueue.class.getName() }, null);
+    private final TransformMethodSignature RENDER_SIGNATURE = new TransformMethodSignature(Modifier.PUBLIC, "void",
+            "render", new String[]
+            { MarkupWriter.class.getName(), RenderQueue.class.getName() }, null);
+
+    private final ComponentMethodAdvice advice = new ComponentMethodAdvice()
+    {
+        public void advise(ComponentMethodInvocation invocation)
+        {
+            InternalComponentResources resources = (InternalComponentResources) invocation.getComponentResources();
+
+            RenderQueue queue = (RenderQueue) invocation.getParameter(1);
+
+            resources.queueRender(queue);
+        }
+    };
 
     public void transform(ClassTransformation transformation, MutableComponentModel model)
     {
         // Subclasses don't need to bother, they'll inherit from super-classes.
-
-        if (model.getParentModel() != null) return;
+        if (!transformation.isRootTransformation())
+            return;
 
         transformation.addImplementedInterface(RenderCommand.class);
 
-        String body = String.format("%s.queueRender($2);", transformation.getResourcesFieldName());
-
-        transformation.addMethod(RENDER_SIGNATURE, body);
+        transformation.getMethod(RENDER_SIGNATURE).addAdvice(advice);
     }
 }