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 public class ComponentProviderConfiguration implements Cloneable {
46
47 private Map<Class<?>, Class<?>> typeMapping = new HashMap<Class<?>, Class<?>>();
48 private Map<Class, ComponentConfiguration> components = new HashMap<Class, ComponentConfiguration>();
49 private List<ComponentConfigurer> configurers = new ArrayList<ComponentConfigurer>();
50
51 public void addComponent(ComponentConfiguration componentConfiguration) {
52 this.components.put(componentConfiguration.getType(), componentConfiguration);
53 }
54
55 public void addTypeMapping(Class<?> from, Class<?> to) {
56 this.typeMapping.put(from, to);
57 }
58
59 public Map<Class<?>, Class<?>> getTypeMapping() {
60 return typeMapping;
61 }
62
63 public Map<Class, ComponentConfiguration> getComponents() {
64 return components;
65 }
66
67 public List<ComponentConfigurer> getConfigurers() {
68 return configurers;
69 }
70
71 public boolean addConfigurer(ComponentConfigurer configurer) {
72 return configurers.add(configurer);
73 }
74
75 public <T> void registerImplementation(Class<T> type, Class<? extends T> implementation) {
76 addComponent(ImplementationConfiguration.valueOf(type, implementation));
77 }
78
79 public <T> void registerImplementation(Class<T> type) {
80 registerImplementation(type, type);
81 }
82
83 public <T> void registerInstance(Class<T> type, Object instance) {
84 addComponent(InstanceConfiguration.valueOf(type, instance));
85 }
86
87 public void combine(ComponentProviderConfiguration components) {
88 this.typeMapping.putAll(components.typeMapping);
89 this.components.putAll(components.clone().components);
90 this.configurers.addAll(components.configurers);
91 }
92
93 @Override
94 public ComponentProviderConfiguration clone() {
95 try {
96 ComponentProviderConfiguration clone = (ComponentProviderConfiguration) super.clone();
97 clone.components = new HashMap<Class, ComponentConfiguration>();
98 for (Map.Entry<Class, ComponentConfiguration> entry : components.entrySet()) {
99 clone.components.put(entry.getKey(), entry.getValue().clone());
100 }
101 clone.typeMapping = new HashMap<Class<?>, Class<?>>(typeMapping);
102 clone.configurers = new ArrayList<ComponentConfigurer>(configurers);
103 return clone;
104 } catch (CloneNotSupportedException e) {
105
106 throw new RuntimeException(e);
107 }
108 }
109 }