View Javadoc

1   package org.maxur.perfmodel.backend.service;
2   
3   import org.glassfish.hk2.api.Injectee;
4   import org.glassfish.hk2.api.InjectionResolver;
5   import org.glassfish.hk2.api.ServiceHandle;
6   import org.slf4j.Logger;
7   import org.slf4j.LoggerFactory;
8   
9   import javax.inject.Inject;
10  import javax.inject.Named;
11  import java.lang.reflect.Type;
12  
13  import static java.lang.String.format;
14  
15  /**
16   * @author Maxim Yunusov
17   * @version 1.0
18   * @since <pre>9/2/2015</pre>
19   */
20  public class ConfigurationInjectionResolver implements InjectionResolver<Named> {
21  
22      private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationInjectionResolver.class);
23  
24      @Inject
25      private PropertiesService propertiesService;
26  
27      @Override
28      public Object resolve(Injectee injectee, ServiceHandle<?> root) {
29          Named annotation = injectee.getParent().getAnnotation(Named.class);
30          final String name = annotation.value();
31          final Type type = injectee.getRequiredType();
32          switch (type.getTypeName()) {
33              case "java.lang.String": {
34                  return propertiesService.asString(name);
35              }
36              case "java.lang.Integer": {
37                  return propertiesService.asInteger(name);
38              }
39              case "java.net.URI": {
40                  return propertiesService.asURI(name);
41              }
42              default: {
43                  LOGGER.error("Unsupported property type {}", type.getTypeName());
44                  throw new IllegalStateException(format("Unsupported property type %s", type.getTypeName()));
45              }
46          }
47      }
48  
49      @Override
50      public boolean isConstructorParameterIndicator() { return false; }
51  
52      @Override
53      public boolean isMethodParameterIndicator() { return false; }
54  }