Author: hlship
Date: Sun Jul 24 23:04:20 2011
New Revision: 1150519

URL: http://svn.apache.org/viewvc?rev=1150519&view=rev
Log:
TAP5-1508: Recode CommonResourcesInjectionProvider to implement 
InjectionProvider2

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.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/services/CommonResourcesInjectionProvider.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java?rev=1150519&r1=1150518&r2=1150519&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CommonResourcesInjectionProvider.java
 Sun Jul 24 23:04:20 2011
@@ -14,26 +14,50 @@
 
 package org.apache.tapestry5.internal.services;
 
-import java.util.Locale;
-import java.util.Map;
-
 import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.internal.transform.ReadOnlyComponentFieldConduit;
 import org.apache.tapestry5.ioc.Messages;
 import org.apache.tapestry5.ioc.ObjectLocator;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
 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.plastic.InstanceContext;
+import org.apache.tapestry5.plastic.PlasticField;
 import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
+import org.apache.tapestry5.services.transform.InjectionProvider2;
 import org.slf4j.Logger;
 
+import java.util.Locale;
+import java.util.Map;
+
 /**
  * Allows for a number of anonymous injections based on the type of field that 
is to be injected.
  */
-public class CommonResourcesInjectionProvider implements InjectionProvider
+public class CommonResourcesInjectionProvider implements InjectionProvider2
 {
-    private static ComponentValueProvider<ComponentResourceSelector> 
selectorProvider = new ComponentValueProvider<ComponentResourceSelector>()
+    interface ResourceProvider<T>
+    {
+        T get(ComponentResources resources);
+    }
+
+    static class ResourceConduit extends ReadOnlyComponentFieldConduit
+    {
+        private final ResourceProvider<?> provider;
+
+        ResourceConduit(String className, String fieldName, 
ResourceProvider<?> provider)
+        {
+            super(className, fieldName);
+            this.provider = provider;
+        }
+
+        public Object get(Object instance, InstanceContext context)
+        {
+            ComponentResources resources = 
context.get(ComponentResources.class);
+
+            return provider.get(resources);
+        }
+    }
+
+    private static ResourceProvider<ComponentResourceSelector> 
selectorProvider = new ResourceProvider<ComponentResourceSelector>()
     {
         public ComponentResourceSelector get(ComponentResources resources)
         {
@@ -41,7 +65,7 @@ public class CommonResourcesInjectionPro
         }
     };
 
-    private static ComponentValueProvider<Messages> messagesProvider = new 
ComponentValueProvider<Messages>()
+    private static ResourceProvider<Messages> messagesProvider = new 
ResourceProvider<Messages>()
     {
 
         public Messages get(ComponentResources resources)
@@ -50,7 +74,7 @@ public class CommonResourcesInjectionPro
         }
     };
 
-    private static ComponentValueProvider<Locale> localeProvider = new 
ComponentValueProvider<Locale>()
+    private static ResourceProvider<Locale> localeProvider = new 
ResourceProvider<Locale>()
     {
 
         public Locale get(ComponentResources resources)
@@ -59,16 +83,18 @@ public class CommonResourcesInjectionPro
         }
     };
 
-    private static ComponentValueProvider<Logger> loggerProvider = new 
ComponentValueProvider<Logger>()
+    private static ResourceProvider<Logger> loggerProvider = new 
ResourceProvider<Logger>()
     {
 
         public Logger get(ComponentResources resources)
         {
             return resources.getLogger();
-        };
+        }
+
+        ;
     };
 
-    private static ComponentValueProvider<String> completeIdProvider = new 
ComponentValueProvider<String>()
+    private static ResourceProvider<String> completeIdProvider = new 
ResourceProvider<String>()
     {
         public String get(ComponentResources resources)
         {
@@ -76,26 +102,26 @@ public class CommonResourcesInjectionPro
         }
     };
 
-    private static final Map<Class, ComponentValueProvider> configuration = 
CollectionFactory.newMap();
+    private static final Map<String, ResourceProvider> configuration = 
CollectionFactory.newMap();
 
     {
-        configuration.put(ComponentResourceSelector.class, selectorProvider);
-        configuration.put(Messages.class, messagesProvider);
-        configuration.put(Locale.class, localeProvider);
-        configuration.put(Logger.class, loggerProvider);
-        configuration.put(String.class, completeIdProvider);
+        configuration.put(ComponentResourceSelector.class.getName(), 
selectorProvider);
+        configuration.put(Messages.class.getName(), messagesProvider);
+        configuration.put(Locale.class.getName(), localeProvider);
+        configuration.put(Logger.class.getName(), loggerProvider);
+        configuration.put(String.class.getName(), completeIdProvider);
     }
 
-    @SuppressWarnings("unchecked")
-    public boolean provideInjection(String fieldName, Class fieldType, 
ObjectLocator locator,
-            ClassTransformation transformation, MutableComponentModel 
componentModel)
+    public boolean provideInjection(PlasticField field, ObjectLocator locator, 
MutableComponentModel componentModel)
     {
-        ComponentValueProvider provider = configuration.get(fieldType);
+        ResourceProvider provider = configuration.get(field.getTypeName());
 
         if (provider == null)
+        {
             return false;
+        }
 
-        transformation.getField(fieldName).injectIndirect(provider);
+        field.setConduit(new 
ResourceConduit(field.getPlasticClass().getClassName(), field.getName(), 
provider));
 
         return true;
     }

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=1150519&r1=1150518&r2=1150519&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:20 2011
@@ -748,6 +748,8 @@ public final class TapestryModule
      * <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>
+     * <dt>CommonResources</dt>
+     * <dd>Access to properties of resources (log, messages, etc.)</dd>
      * </dl>
      */
     @Contribute(InjectionProvider2.class)
@@ -755,6 +757,7 @@ public final class TapestryModule
     {
         configuration.addInstance("Named", InjectNamedProvider.class, 
"before:Default");
         configuration.add("Block", new BlockInjectionProvider(), 
"before:Default");
+        configuration.add("CommonResources", new 
CommonResourcesInjectionProvider(), "after:Default");
     }
 
     /**
@@ -764,8 +767,6 @@ public final class TapestryModule
      * <dd>based on {@link MasterObjectProvider}</dd>
      * <dt>ComponentResources</dt>
      * <dd>give component access to its resources</dd>
-     * <dt>CommonResources</dt>
-     * <dd>access to properties of resources (log, messages, etc.)</dd>
      * <dt>Asset</dt>
      * <dd>injection of assets (triggered via {@link Path} annotation), with 
the path relative to the component class</dd>
      * <dt>Service</dt>
@@ -785,14 +786,12 @@ public final class TapestryModule
                                                         AssetSource 
assetSource)
     {
         configuration.add("Default", new 
DefaultInjectionProvider(masterObjectProvider, locator));
-
         configuration.add("ComponentResources", new 
ComponentResourcesInjectionProvider());
 
         // This comes after default, to deal with conflicts between injecting a
         // String as the
         // component id, and injecting a string with @Symbol or @Value.
 
-        configuration.add("CommonResources", new 
CommonResourcesInjectionProvider(), "after:Default");
 
         configuration.add("Asset", new AssetInjectionProvider(symbolSource, 
assetSource), "before:Default");
 


Reply via email to