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