1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.objectfactory.configuration;
35
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
39 import java.util.Map;
40
41
42
43
44
45
46
47 public class ComponentProviderConfiguration implements Cloneable {
48
49 private Map<Class<?>, Class<?>> typeMapping = new HashMap<Class<?>, Class<?>>();
50 private Map<Class, ComponentConfiguration> components = new HashMap<Class, ComponentConfiguration>();
51 private List<ComponentConfigurer> configurers = new ArrayList<ComponentConfigurer>();
52
53 public void addComponent(ComponentConfiguration componentConfiguration) {
54 this.components.put(componentConfiguration.getType(), componentConfiguration);
55 }
56
57 public void addTypeMapping(Class<?> from, Class<?> to) {
58 this.typeMapping.put(from, to);
59 }
60
61 public Map<Class<?>, Class<?>> getTypeMapping() {
62 return typeMapping;
63 }
64
65 public Map<Class, ComponentConfiguration> getComponents() {
66 return components;
67 }
68
69 public List<ComponentConfigurer> getConfigurers() {
70 return configurers;
71 }
72
73 public boolean addConfigurer(ComponentConfigurer configurer) {
74 return configurers.add(configurer);
75 }
76
77 public <T> void registerImplementation(Class<T> type, Class<? extends T> implementation) {
78 addComponent(ImplementationConfiguration.valueOf(type, implementation));
79 }
80
81 public <T> void registerImplementation(Class<T> type) {
82 registerImplementation(type, type);
83 }
84
85 public <T> void registerInstance(Class<T> type, Object instance) {
86 addComponent(InstanceConfiguration.valueOf(type, instance));
87 }
88
89 public void combine(ComponentProviderConfiguration components) {
90 this.typeMapping.putAll(components.typeMapping);
91 this.components.putAll(components.clone().components);
92 this.configurers.addAll(components.configurers);
93 }
94
95 @Override
96 public ComponentProviderConfiguration clone() {
97 try {
98 ComponentProviderConfiguration clone = (ComponentProviderConfiguration) super.clone();
99 clone.components = new HashMap<Class, ComponentConfiguration>();
100 for (Map.Entry<Class, ComponentConfiguration> entry : components.entrySet()) {
101 clone.components.put(entry.getKey(), entry.getValue().clone());
102 }
103 clone.typeMapping = new HashMap<Class<?>, Class<?>>(typeMapping);
104 clone.configurers = new ArrayList<ComponentConfigurer>(configurers);
105 return clone;
106 } catch (CloneNotSupportedException e) {
107
108 throw new RuntimeException(e);
109 }
110 }
111 }