You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2010/01/22 17:30:01 UTC

svn commit: r902148 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java test/java/org/apache/tapestry5/internal/transform/InjectComponentWorkerTest.java

Author: hlship
Date: Fri Jan 22 16:30:00 2010
New Revision: 902148

URL: http://svn.apache.org/viewvc?rev=902148&view=rev
Log:
Use a ComponentValueProvider to inject a sub-component into a container component.

Removed:
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/InjectComponentWorkerTest.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java?rev=902148&r1=902147&r2=902148&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java Fri Jan 22 16:30:00 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 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.
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry5.internal.transform;
 
+import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.annotations.Component;
 import org.apache.tapestry5.annotations.MixinClasses;
 import org.apache.tapestry5.annotations.Mixins;
@@ -32,6 +33,7 @@
 import org.apache.tapestry5.services.ClassTransformation;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.ComponentClassTransformWorker;
+import org.apache.tapestry5.services.ComponentValueProvider;
 import org.apache.tapestry5.services.TransformConstants;
 
 /**
@@ -44,7 +46,7 @@
 {
     private final ComponentClassResolver resolver;
 
-    public ComponentWorker(final ComponentClassResolver resolver)
+    public ComponentWorker(ComponentClassResolver resolver)
     {
         this.resolver = resolver;
     }
@@ -57,10 +59,10 @@
 
             transformation.claimField(fieldName, annotation);
 
-            String id = annotation.id();
+            String annotationId = annotation.id();
 
-            if (InternalUtils.isBlank(id))
-                id = InternalUtils.stripMemberName(fieldName);
+            final String id = InternalUtils.isNonBlank(annotationId) ? annotationId : InternalUtils
+                    .stripMemberName(fieldName);
 
             String type = transformation.getFieldType(fieldName);
 
@@ -79,13 +81,17 @@
                         .splitAtCommas(names)));
             }
 
-            transformation.makeReadOnly(fieldName);
-
-            String body = String.format("%s = (%s) %s.getEmbeddedComponent(\"%s\");", fieldName,
-                    type, transformation.getResourcesFieldName(), id);
+            ComponentValueProvider<Object> provider = new ComponentValueProvider<Object>()
+            {
+                @Override
+                public Object get(ComponentResources resources)
+                {
+                    return resources.getEmbeddedComponent(id);
+                }
+            };
 
-            transformation
-                    .extendMethod(TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE, body);
+            transformation.assignFieldIndirect(fieldName,
+                    TransformConstants.CONTAINING_PAGE_DID_LOAD_SIGNATURE, provider);
 
             addMixinClasses(fieldName, transformation, embedded);
             addMixinTypes(fieldName, transformation, embedded);