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/25 01:04:11 UTC

svn commit: r1150518 - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ tapestry-core/src/main/java/org/apache/tapestry5/services/ tap...

Author: hlship
Date: Sun Jul 24 23:04:09 2011
New Revision: 1150518

URL: http://svn.apache.org/viewvc?rev=1150518&view=rev
Log:
TAP5-1508: Rename ReadOnlyFieldValueConduit to ReadOnlyComponentFieldConduit
Recode BlockInjectionProvider to implement InjectionProvider2

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyComponentFieldConduit.java
      - copied, changed from r1150517, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
Removed:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/BlockInjectionProviderTest.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ComponentWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/BlockInjectionProvider.java Sun Jul 24 23:04:09 2011
@@ -17,18 +17,15 @@ package org.apache.tapestry5.internal.se
 import org.apache.tapestry5.Block;
 import org.apache.tapestry5.ComponentResources;
 import org.apache.tapestry5.annotations.Id;
-import org.apache.tapestry5.internal.transform.ReadOnlyFieldValueConduit;
+import org.apache.tapestry5.internal.transform.ReadOnlyComponentFieldConduit;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.ioc.services.FieldValueConduit;
 import org.apache.tapestry5.model.MutableComponentModel;
-import org.apache.tapestry5.services.ClassTransformation;
-import org.apache.tapestry5.services.ComponentValueProvider;
-import org.apache.tapestry5.services.InjectionProvider;
-import org.apache.tapestry5.services.TransformConstants;
-import org.apache.tapestry5.services.TransformField;
-import org.apache.tapestry5.services.TransformMethod;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.InstanceContext;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.services.transform.InjectionProvider2;
 
 /**
  * Identifies fields of type {@link Block} that have the {@link Inject} annotation and converts them
@@ -40,56 +37,46 @@ import org.apache.tapestry5.services.Tra
  * Must be scheduled before {@link DefaultInjectionProvider} because it uses the same annotation, Inject, with a
  * different interpretation.
  */
-public class BlockInjectionProvider implements InjectionProvider
+public class BlockInjectionProvider implements InjectionProvider2
 {
+    private static final String BLOCK_TYPE_NAME = Block.class.getName();
 
-    public boolean provideInjection(final String fieldName, Class fieldType, ObjectLocator locator,
-            ClassTransformation transformation, MutableComponentModel componentModel)
+    public boolean provideInjection(PlasticField field, ObjectLocator locator, MutableComponentModel componentModel)
     {
-        if (!fieldType.equals(Block.class))
+        if (!field.getTypeName().equals(BLOCK_TYPE_NAME))
+        {
             return false;
-
-        TransformField field = transformation.getField(fieldName);
+        }
 
         Id annotation = field.getAnnotation(Id.class);
 
-        String blockId = getBlockId(fieldName, annotation);
+        String blockId = getBlockId(field.getName(), annotation);
 
-        ComponentValueProvider<FieldValueConduit> provider = cxreateProvider(fieldName, blockId);
+        FieldConduit<Object> conduit = createConduit(field, blockId);
 
-        field.replaceAccess(provider);
+        field.setConduit(conduit);
 
         return true; // claim the field
     }
 
-    private ComponentValueProvider<FieldValueConduit> cxreateProvider(final String fieldName, final String blockId)
+    private FieldConduit<Object> createConduit(PlasticField field, final String blockId)
     {
-        return new ComponentValueProvider<FieldValueConduit>()
+        final String className = field.getPlasticClass().getClassName();
+        final String fieldName = field.getName();
+
+        return new ReadOnlyComponentFieldConduit(className, fieldName)
         {
-            public FieldValueConduit get(final ComponentResources resources)
+            public Object get(Object instance, InstanceContext context)
             {
-                return new FieldValueConduit()
-                {
-                    public Object get()
-                    {
-                        return resources.getBlock(blockId);
-                    }
-
-                    public void set(Object newValue)
-                    {
-                        String componentClassName = resources.getComponentModel().getComponentClassName();
-                        throw new RuntimeException(String.format("Field %s.%s is read only.", componentClassName, fieldName));
-                    }
-                };
+                ComponentResources resources = context.get(ComponentResources.class);
+
+                return resources.getBlock(blockId);
             }
         };
     }
 
     private String getBlockId(String fieldName, Id annotation)
     {
-        if (annotation != null)
-            return annotation.value();
-
-        return InternalUtils.stripMemberName(fieldName);
+        return annotation != null ? annotation.value() : InternalUtils.stripMemberName(fieldName);
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentResourcesInjectionProvider.java Sun Jul 24 23:04:09 2011
@@ -15,7 +15,6 @@
 package org.apache.tapestry5.internal.services;
 
 import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.internal.transform.ReadOnlyFieldValueConduit;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.services.FieldValueConduit;
 import org.apache.tapestry5.model.MutableComponentModel;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ApplicationStateWorker.java Sun Jul 24 23:04:09 2011
@@ -95,7 +95,7 @@ public class ApplicationStateWorker impl
 
             final String fieldName = existsField.getName();
 
-            existsField.setConduit(new ReadOnlyFieldValueConduit(className, fieldName)
+            existsField.setConduit(new ReadOnlyComponentFieldConduit(className, fieldName)
             {
                 public Object get(Object instance, InstanceContext context)
                 {

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=1150518&r1=1150517&r2=1150518&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 Sun Jul 24 23:04:09 2011
@@ -105,7 +105,7 @@ public class ComponentWorker implements 
             {
                 final ComponentResources resources = context.get(ComponentResources.class);
 
-                return new ReadOnlyFieldValueConduit(resources, fieldName)
+                return new ReadOnlyComponentFieldConduit(resources, fieldName)
                 {
                     public Object get(Object instance, InstanceContext context)
                     {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectComponentWorker.java Sun Jul 24 23:04:09 2011
@@ -32,7 +32,7 @@ import org.apache.tapestry5.services.tra
  */
 public class InjectComponentWorker implements ComponentClassTransformWorker2
 {
-    private final class InjectedComponentFieldValueConduit extends ReadOnlyFieldValueConduit
+    private final class InjectedComponentFieldValueConduit extends ReadOnlyComponentFieldConduit
     {
         private final ComponentResources resources;
         private final String fieldName, componentId, type;

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectContainerWorker.java Sun Jul 24 23:04:09 2011
@@ -70,7 +70,7 @@ public class InjectContainerWorker imple
                 final Class fieldType = cache.forName(fieldTypeName);
                 final ComponentResources resources = context.get(ComponentResources.class);
 
-                return new ReadOnlyFieldValueConduit(resources, fieldName)
+                return new ReadOnlyComponentFieldConduit(resources, fieldName)
                 {
                     public Object get(Object instance, InstanceContext context)
                     {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/InjectPageWorker.java Sun Jul 24 23:04:09 2011
@@ -34,7 +34,7 @@ import org.apache.tapestry5.services.tra
  */
 public class InjectPageWorker implements ComponentClassTransformWorker2
 {
-    private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
+    private final class InjectedPageConduit extends ReadOnlyComponentFieldConduit
     {
         private final String injectedPageName;
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/MixinWorker.java Sun Jul 24 23:04:09 2011
@@ -85,7 +85,7 @@ public class MixinWorker implements Comp
                 ComponentResources resources = context.get(ComponentResources.class);
                 final InternalComponentResources icr = (InternalComponentResources) resources;
 
-                return new ReadOnlyFieldValueConduit(resources, fieldName)
+                return new ReadOnlyComponentFieldConduit(resources, fieldName)
                 {
                     public Object get(Object instance, InstanceContext context)
                     {

Copied: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyComponentFieldConduit.java (from r1150517, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyComponentFieldConduit.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyComponentFieldConduit.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java&r1=1150517&r2=1150518&rev=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyFieldValueConduit.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ReadOnlyComponentFieldConduit.java Sun Jul 24 23:04:09 2011
@@ -24,21 +24,21 @@ import org.apache.tapestry5.plastic.Inst
  *
  * @since 5.2.0
  */
-public abstract class ReadOnlyFieldValueConduit implements FieldConduit<Object>
+public abstract class ReadOnlyComponentFieldConduit implements FieldConduit<Object>
 {
     private final String qualifiedFieldName;
 
-    public ReadOnlyFieldValueConduit(String qualifiedFieldName)
+    public ReadOnlyComponentFieldConduit(String qualifiedFieldName)
     {
         this.qualifiedFieldName = qualifiedFieldName;
     }
 
-    public ReadOnlyFieldValueConduit(String className, String fieldName)
+    public ReadOnlyComponentFieldConduit(String className, String fieldName)
     {
         this(String.format("%s.%s", className, fieldName));
     }
 
-    public ReadOnlyFieldValueConduit(ComponentResources resources, String fieldName)
+    public ReadOnlyComponentFieldConduit(ComponentResources resources, String fieldName)
     {
         this(resources.getComponentModel().getComponentClassName(), fieldName);
     }

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=1150518&r1=1150517&r2=1150518&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 23:04:09 2011
@@ -746,12 +746,15 @@ public final class TapestryModule
     /**
      * <dl>
      * <dt>Named</dt> <dd>Handles fields with the {@link javax.inject.Named} annotation</dd>
+     * <dt>Block</dt>
+     * <dd>injects fields of type {@link Block}</dd>
      * </dl>
      */
     @Contribute(InjectionProvider2.class)
     public static void provideStandardInjectionProviders(OrderedConfiguration<InjectionProvider2> configuration)
     {
         configuration.addInstance("Named", InjectNamedProvider.class, "before:Default");
+        configuration.add("Block", new BlockInjectionProvider(), "before:Default");
     }
 
     /**
@@ -759,8 +762,6 @@ public final class TapestryModule
      * <dl>
      * <dt>Default</dt>
      * <dd>based on {@link MasterObjectProvider}</dd>
-     * <dt>Block</dt>
-     * <dd>injects fields of type Block</dd>
      * <dt>ComponentResources</dt>
      * <dd>give component access to its resources</dd>
      * <dt>CommonResources</dt>
@@ -795,7 +796,6 @@ public final class TapestryModule
 
         configuration.add("Asset", new AssetInjectionProvider(symbolSource, assetSource), "before:Default");
 
-        configuration.add("Block", new BlockInjectionProvider(), "before:Default");
 
         // This needs to be the last one, since it matches against services
         // and might blow up if there is no match.

Modified: tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java?rev=1150518&r1=1150517&r2=1150518&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java Sun Jul 24 23:04:09 2011
@@ -14,7 +14,7 @@
 
 package org.apache.tapestry5.internal.jpa;
 
-import org.apache.tapestry5.internal.transform.ReadOnlyFieldValueConduit;
+import org.apache.tapestry5.internal.transform.ReadOnlyComponentFieldConduit;
 import org.apache.tapestry5.jpa.EntityManagerManager;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.plastic.InstanceContext;
@@ -43,7 +43,7 @@ public class PersistenceContextWorker im
 
             field.claim(annotation);
 
-            field.setConduit(new ReadOnlyFieldValueConduit(plasticClass.getClassName(), field.getName())
+            field.setConduit(new ReadOnlyComponentFieldConduit(plasticClass.getClassName(), field.getName())
             {
                 public Object get(Object instance, InstanceContext context)
                 {