use of org.apache.tapestry5.ioc.internal.util.DelegatingInjectionResources in project tapestry-5 by apache.
the class ContributionDefImpl method invokeMethod.
private <T> void invokeMethod(ModuleBuilderSource source, ServiceResources resources, Class<T> parameterType, T parameterValue) {
Map<Class, Object> resourceMap = CollectionFactory.newMap();
resourceMap.put(parameterType, parameterValue);
resourceMap.put(ObjectLocator.class, resources);
resourceMap.put(Logger.class, resources.getLogger());
InjectionResources injectionResources = new MapInjectionResources(resourceMap);
for (Class t : CONFIGURATION_TYPES) {
if (parameterType != t) {
injectionResources = new DelegatingInjectionResources(new WrongConfigurationTypeGuard(resources.getServiceId(), t, parameterType), injectionResources);
}
}
Throwable fail = null;
Object moduleInstance = InternalUtils.isStatic(contributorMethod) ? null : source.getModuleBuilder();
try {
ObjectCreator[] parameters = InternalUtils.calculateParametersForMethod(contributorMethod, resources, injectionResources, resources.getTracker());
contributorMethod.invoke(moduleInstance, InternalUtils.realizeObjects(parameters));
} catch (InvocationTargetException ex) {
fail = ex.getTargetException();
} catch (Exception ex) {
fail = ex;
}
if (fail != null)
throw new RuntimeException(IOCMessages.contributionMethodError(contributorMethod, fail), fail);
}
use of org.apache.tapestry5.ioc.internal.util.DelegatingInjectionResources in project tapestry-5 by apache.
the class AbstractServiceCreator method createInjectionResources.
/**
* Returns a map (based on injectionResources) that includes (possibly) an additional mapping containing the
* collected configuration data. This involves scanning the parameters and generic types.
*/
protected final InjectionResources createInjectionResources() {
InjectionResources core = new MapInjectionResources(injectionResources);
InjectionResources configurations = new InjectionResources() {
private boolean seenOne;
@Override
public <T> T findResource(Class<T> resourceType, Type genericType) {
ConfigurationType thisType = PARAMETER_TYPE_TO_CONFIGURATION_TYPE.get(resourceType);
if (thisType == null)
return null;
if (seenOne)
throw new RuntimeException(IOCMessages.tooManyConfigurationParameters(creatorDescription));
seenOne = true;
switch(thisType) {
case UNORDERED:
return resourceType.cast(getUnorderedConfiguration(genericType));
case ORDERED:
return resourceType.cast(getOrderedConfiguration(genericType));
case MAPPED:
return resourceType.cast(getMappedConfiguration(genericType));
}
return null;
}
};
return new DelegatingInjectionResources(core, configurations);
}
Aggregations