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.rendering.template.registry;
35
36 import java.util.ArrayList;
37 import java.util.Collection;
38 import java.util.Set;
39 import javax.inject.Singleton;
40
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44 import info.magnolia.registry.RegistrationException;
45 import info.magnolia.registry.RegistryMap;
46 import info.magnolia.rendering.template.TemplateDefinition;
47
48
49
50
51
52
53
54 @Singleton
55 public class TemplateDefinitionRegistry {
56
57 private static final Logger log = LoggerFactory.getLogger(TemplateDefinitionRegistry.class);
58
59 private final RegistryMap<String, TemplateDefinitionProvider> registry = new RegistryMap<String, TemplateDefinitionProvider>() {
60
61 @Override
62 protected String keyFromValue(TemplateDefinitionProvider provider) {
63 return provider.getId();
64 }
65 };
66
67 public TemplateDefinition getTemplateDefinition(String id) throws RegistrationException {
68
69 TemplateDefinitionProvider templateDefinitionProvider;
70 try {
71 templateDefinitionProvider = registry.getRequired(id);
72 } catch (RegistrationException e) {
73 throw new RegistrationException("No template definition registered for id: " + id, e);
74 }
75
76 return templateDefinitionProvider.getTemplateDefinition();
77 }
78
79
80
81
82 public Collection<TemplateDefinition> getTemplateDefinitions() {
83 final Collection<TemplateDefinition> templateDefinitions = new ArrayList<TemplateDefinition>();
84 for (TemplateDefinitionProvider provider : registry.values()) {
85 try {
86 final TemplateDefinition templateDefinition = provider.getTemplateDefinition();
87 if (templateDefinition == null) {
88 log.error("Provider's TemplateDefinition is null: " + provider);
89 } else {
90 templateDefinitions.add(templateDefinition);
91 }
92 } catch (RegistrationException e) {
93 log.error("Failed to read template definition from " + provider + ".", e);
94 }
95 }
96 return templateDefinitions;
97 }
98
99 public void register(TemplateDefinitionProvider provider) {
100 registry.put(provider);
101 }
102
103 public void unregister(String id) {
104 registry.remove(id);
105 }
106
107 public Set<String> unregisterAndRegister(Collection<String> registeredIds, Collection<TemplateDefinitionProvider> providers) {
108 return registry.removeAndPutAll(registeredIds, providers);
109 }
110 }