1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.core.joran.spi;
15
16 import java.util.HashMap;
17 import java.util.Map;
18
19
20
21
22
23
24
25 public class DefaultNestedComponentRegistry {
26
27 Map<HostClassAndPropertyDouble, Class<?>> defaultComponentMap = new HashMap<HostClassAndPropertyDouble, Class<?>>();
28 Map<String, Class<?>> tagToClassMap = new HashMap<>();
29
30 public void add(Class<?> hostClass, String propertyName, Class<?> componentClass) {
31 HostClassAndPropertyDouble hpDouble = new HostClassAndPropertyDouble(hostClass, propertyName.toLowerCase());
32 defaultComponentMap.put(hpDouble, componentClass);
33 tagToClassMap.put(propertyName, componentClass);
34 }
35
36 public String findDefaultComponentTypeByTag(String tagName) {
37 Class<?> defaultClass = tagToClassMap.get(tagName);
38 if (defaultClass == null)
39 return null;
40 else
41 return defaultClass.getCanonicalName();
42 }
43
44 public Class<?> findDefaultComponentType(Class<?> hostClass, String propertyName) {
45 propertyName = propertyName.toLowerCase();
46 while (hostClass != null) {
47 Class<?> componentClass = oneShotFind(hostClass, propertyName);
48 if (componentClass != null) {
49 return componentClass;
50 }
51 hostClass = hostClass.getSuperclass();
52 }
53 return null;
54 }
55
56 private Class<?> oneShotFind(Class<?> hostClass, String propertyName) {
57 HostClassAndPropertyDouble hpDouble = new HostClassAndPropertyDouble(hostClass, propertyName);
58 return defaultComponentMap.get(hpDouble);
59 }
60
61 }