001package org.maxur.perfmodel.backend.service; 002 003import org.glassfish.hk2.api.Injectee; 004import org.glassfish.hk2.api.InjectionResolver; 005import org.glassfish.hk2.api.ServiceHandle; 006import org.slf4j.Logger; 007import org.slf4j.LoggerFactory; 008 009import javax.inject.Inject; 010import javax.inject.Named; 011import java.lang.reflect.Type; 012 013import static java.lang.String.format; 014 015/** 016 * @author Maxim Yunusov 017 * @version 1.0 018 * @since <pre>9/2/2015</pre> 019 */ 020public class ConfigurationInjectionResolver implements InjectionResolver<Named> { 021 022 private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationInjectionResolver.class); 023 024 @Inject 025 private PropertiesService propertiesService; 026 027 @Override 028 public Object resolve(Injectee injectee, ServiceHandle<?> root) { 029 Named annotation = injectee.getParent().getAnnotation(Named.class); 030 final String name = annotation.value(); 031 final Type type = injectee.getRequiredType(); 032 switch (type.getTypeName()) { 033 case "java.lang.String": { 034 return propertiesService.asString(name); 035 } 036 case "java.lang.Integer": { 037 return propertiesService.asInteger(name); 038 } 039 case "java.net.URI": { 040 return propertiesService.asURI(name); 041 } 042 default: { 043 LOGGER.error("Unsupported property type {}", type.getTypeName()); 044 throw new IllegalStateException(format("Unsupported property type %s", type.getTypeName())); 045 } 046 } 047 } 048 049 @Override 050 public boolean isConstructorParameterIndicator() { return false; } 051 052 @Override 053 public boolean isMethodParameterIndicator() { return false; } 054}