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/24 04:18:04 UTC
svn commit: r1150253 - in
/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5:
internal/transform/ActivationRequestParameterWorker.java
services/TapestryModule.java
Author: hlship
Date: Sun Jul 24 02:18:03 2011
New Revision: 1150253
URL: http://svn.apache.org/viewvc?rev=1150253&view=rev
Log:
TAP5-1508: Record ActivationRequestParameterWorker to implement CCTW2
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.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/ActivationRequestParameterWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java?rev=1150253&r1=1150252&r2=1150253&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ActivationRequestParameterWorker.java Sun Jul 24 02:18:03 2011
@@ -21,9 +21,16 @@ import org.apache.tapestry5.annotations.
import org.apache.tapestry5.internal.services.ComponentClassCache;
import org.apache.tapestry5.ioc.util.IdAllocator;
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.*;
+import org.apache.tapestry5.services.ComponentEventHandler;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.ValueEncoderSource;
+import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
+import org.apache.tapestry5.services.transform.TransformationSupport;
/**
* Hooks the activate event handler on the component (presumably, a page) to
@@ -34,7 +41,7 @@ import org.apache.tapestry5.services.*;
* @since 5.2.0
*/
@SuppressWarnings("all")
-public class ActivationRequestParameterWorker implements ComponentClassTransformWorker
+public class ActivationRequestParameterWorker implements ComponentClassTransformWorker2
{
private final Request request;
@@ -50,16 +57,15 @@ public class ActivationRequestParameterW
this.valueEncoderSource = valueEncoderSource;
}
- public void transform(ClassTransformation transformation, MutableComponentModel model)
+ public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model)
{
- for (TransformField field : transformation.matchFieldsWithAnnotation(ActivationRequestParameter.class))
+ for (PlasticField field : plasticClass.getFieldsWithAnnotation(ActivationRequestParameter.class))
{
- mapFieldToQueryParameter(field, transformation, model);
+ mapFieldToQueryParameter(field, support);
}
}
- private void mapFieldToQueryParameter(TransformField field, ClassTransformation transformation,
- MutableComponentModel model)
+ private void mapFieldToQueryParameter(PlasticField field, TransformationSupport support)
{
ActivationRequestParameter annotation = field.getAnnotation(ActivationRequestParameter.class);
@@ -68,20 +74,23 @@ public class ActivationRequestParameterW
// Assumption: the field type is not one that's loaded by the component class loader, so it's safe
// to convert to a hard type during class transformation.
- Class fieldType = classCache.forName(field.getType());
+ Class fieldType = classCache.forName(field.getTypeName());
ValueEncoder encoder = valueEncoderSource.getValueEncoder(fieldType);
- FieldAccess access = field.getAccess();
+ FieldHandle handle = field.getHandle();
- setValueFromInitializeEventHandler(transformation, access, parameterName, encoder);
- decorateLinks(transformation, access, parameterName, encoder);
- preallocateName(transformation, parameterName);
+ String fieldName = String.format("%s.%s", field.getPlasticClass().getClassName(), field.getName());
- model.addEventHandler(EventConstants.ACTIVATE);
+ setValueFromInitializeEventHandler(support, fieldName, handle, parameterName, encoder);
+
+ decorateLinks(support, fieldName, handle, parameterName, encoder);
+
+ preallocateName(support, parameterName);
}
- private static void preallocateName(ClassTransformation transformation, final String parameterName)
+
+ private static void preallocateName(TransformationSupport support, final String parameterName)
{
ComponentEventHandler handler = new ComponentEventHandler()
{
@@ -93,13 +102,13 @@ public class ActivationRequestParameterW
}
};
- transformation.addComponentEventHandler(EventConstants.PREALLOCATE_FORM_CONTROL_NAMES, 1,
+ support.addEventHandler(EventConstants.PREALLOCATE_FORM_CONTROL_NAMES, 1,
"ActivationRequestParameterWorker preallocate form control name '" + parameterName + "' event handler",
handler);
}
@SuppressWarnings("all")
- private void setValueFromInitializeEventHandler(ClassTransformation transformation, final FieldAccess access,
+ private void setValueFromInitializeEventHandler(TransformationSupport support, String fieldName, final FieldHandle handle,
final String parameterName, final ValueEncoder encoder)
{
ComponentEventHandler handler = new ComponentEventHandler()
@@ -113,51 +122,29 @@ public class ActivationRequestParameterW
Object value = encoder.toValue(clientValue);
- access.write(instance, value);
+ handle.set(instance, value);
}
};
- ComponentMethodAdvice advice = new ComponentMethodAdvice()
- {
- public void advise(ComponentMethodInvocation invocation)
- {
- // Handle this synthetic event FIRST, before any super-class or event handler method calls. It's especially important that this execute before
- // any onActivate() event handler method.
-
- ComponentEvent event = (ComponentEvent) invocation.getParameter(0);
-
- if (event.matches(EventConstants.ACTIVATE, "", 0))
- {
- String clientValue = request.getParameter(parameterName);
-
- if (clientValue != null)
- {
+ support.addEventHandler(EventConstants.ACTIVATE, 0,
+ String.format("Restoring field %s from query parameter '%s'", fieldName, parameterName), handler);
- Object value = encoder.toValue(clientValue);
-
- access.write(invocation.getInstance(), value);
- }
- }
-
- invocation.proceed();
- }
- };
-
- transformation.getOrCreateMethod(TransformConstants.DISPATCH_COMPONENT_EVENT).addAdvice(advice);
}
@SuppressWarnings("all")
- private static void decorateLinks(ClassTransformation transformation, final FieldAccess access,
+ private static void decorateLinks(TransformationSupport support, String fieldName, final FieldHandle handle,
final String parameterName, final ValueEncoder encoder)
{
ComponentEventHandler handler = new ComponentEventHandler()
{
public void handleEvent(Component instance, ComponentEvent event)
{
- Object value = access.read(instance);
+ Object value = handle.get(instance);
if (value == null)
+ {
return;
+ }
Link link = event.getEventContext().get(Link.class, 0);
@@ -167,14 +154,14 @@ public class ActivationRequestParameterW
}
};
- transformation.addComponentEventHandler(EventConstants.DECORATE_COMPONENT_EVENT_LINK, 0,
- "ActivationRequestParameterWorker decorate component event link event handler", handler);
+ support.addEventHandler(EventConstants.DECORATE_COMPONENT_EVENT_LINK, 0,
+ String.format("ActivationRequestParameterWorker decorate component event link event handler for field %s as query parameter '%s'", fieldName, parameterName), handler);
- transformation.addComponentEventHandler(EventConstants.DECORATE_PAGE_RENDER_LINK, 0,
- "ActivationRequestParameterWorker decorate page render link event handler", handler);
+ support.addEventHandler(EventConstants.DECORATE_PAGE_RENDER_LINK, 0, String.format(
+ "ActivationRequestParameterWorker decorate page render link event handler for field %s as query parameter '%s'", fieldName, parameterName), handler);
}
- private String getParameterName(TransformField field, ActivationRequestParameter annotation)
+ private String getParameterName(PlasticField field, ActivationRequestParameter annotation)
{
if (annotation.value().equals(""))
return field.getName();
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=1150253&r1=1150252&r2=1150253&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 Sun Jul 24 02:18:03 2011
@@ -523,6 +523,8 @@ public final class TapestryModule
* <p/>
* <dt>Cached</dt>
* <dd>Checks for the {@link org.apache.tapestry5.annotations.Cached} annotation</dd>
+ * <dt>ActivationRequestParameter</dt>
+ * <dd>Support for the {@link ActivationRequestParameter} annotation</dd>
* </dl>
*/
@Contribute(ComponentClassTransformWorker2.class)
@@ -573,6 +575,8 @@ public final class TapestryModule
configuration.add("Retain", new RetainWorker());
configuration.add("PageActivationContext", new PageActivationContextWorker(), "after:OnEvent");
+ configuration
+ .addInstance("ActivationRequestParameter", ActivationRequestParameterWorker.class, "after:OnEvent");
configuration.addInstance("Cached", CachedWorker.class);
@@ -613,8 +617,6 @@ public final class TapestryModule
* <dd>Checks for the {@link org.apache.tapestry5.annotations.Log} annotation</dd>
* <dt>HeartbeatDeferred
* <dd>Support for the {@link HeartbeatDeferred} annotation
- * <dt>ActivationRequestParameter
- * <dd>Support for the {@link ActivationRequestParameter} annotation
* </dl>
*/
@Contribute(ComponentClassTransformWorker2.class)
@@ -622,14 +624,10 @@ public final class TapestryModule
public static void provideOldStyleClassTransformWorkers(
OrderedConfiguration<ComponentClassTransformWorker> configuration)
{
-
-
configuration.addInstance("Inject", InjectWorker.class);
configuration.addInstance("InjectService", InjectServiceWorker.class);
configuration.addInstance("InjectNamed", InjectNamedWorker.class);
- configuration
- .addInstance("ActivationRequestParameter", ActivationRequestParameterWorker.class, "after:OnEvent");
// Ideally, these should be ordered pretty late in the process to make
// sure there are no