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
17
18
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 }