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.module.templating;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.ItemType;
38 import info.magnolia.cms.beans.config.ObservedManager;
39 import info.magnolia.objectfactory.Classes;
40 import info.magnolia.objectfactory.Components;
41
42 import java.util.Collection;
43 import java.util.HashMap;
44 import java.util.Iterator;
45 import java.util.Map;
46
47 import org.apache.commons.lang.StringUtils;
48
49
50
51
52
53
54 public class TemplateRendererManager extends ObservedManager {
55
56 private static final String ND_RENDERER = "renderer";
57
58 private static final String ND_TYPE = "type";
59
60 private Map renderers = new HashMap();
61
62
63
64
65 public static TemplateRendererManager getInstance() {
66 return Components.getSingleton(TemplateRendererManager.class);
67 }
68
69
70
71
72 protected void onRegister(Content node) {
73 Collection list = node.getChildren(ItemType.CONTENTNODE);
74 for (Iterator iter = list.iterator(); iter.hasNext();) {
75 Content tr = (Content) iter.next();
76 String type = tr.getNodeData(ND_TYPE).getString();
77 String rendererClass = tr.getNodeData(ND_RENDERER).getString();
78
79 if (StringUtils.isEmpty(type)) {
80 type = tr.getName();
81 }
82
83 if (StringUtils.isBlank(type) || StringUtils.isBlank(rendererClass)) {
84 log.warn("Can't register template render at {}, type=\"{}\" renderer=\"{}\"", new Object[]{tr.getHandle(), type, rendererClass});
85 continue;
86 }
87
88
89 try {
90 final TemplateRenderer renderer = (TemplateRenderer) Classes.newInstance(rendererClass);
91 log.debug("Registering template render [{}] for type {}", rendererClass, type);
92 registerTemplateRenderer(type, renderer);
93 }
94 catch (Exception e) {
95 log.warn("Can't register template renderer at {}, type=\"{}\" renderer=\"{}\" due to a {} exception: {}", new Object[]{tr.getHandle(), type, rendererClass, e.getClass().getName(), e.getMessage()}, e);
96 }
97
98 }
99
100 }
101
102
103
104
105 protected void onClear() {
106 this.renderers.clear();
107 }
108
109 public void registerTemplateRenderer(String type, TemplateRenderer instance) {
110 synchronized (renderers) {
111 renderers.put(type, instance);
112 }
113 }
114
115 public TemplateRenderer getRenderer(String type) {
116 return (TemplateRenderer) renderers.get(type);
117 }
118
119 }