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