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.blossom.template;
35
36 import info.magnolia.cms.beans.config.ContentRepository;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.cms.core.HierarchyManager;
39 import info.magnolia.context.MgnlContext;
40 import info.magnolia.module.blossom.dispatcher.BlossomDispatcher;
41 import info.magnolia.module.blossom.support.RepositoryUtils;
42 import org.apache.commons.lang.StringUtils;
43 import org.apache.jackrabbit.value.StringValue;
44 import org.springframework.beans.factory.InitializingBean;
45
46 import javax.jcr.RepositoryException;
47 import java.util.Map;
48 import java.util.concurrent.ConcurrentHashMap;
49
50
51
52
53 public class DefaultBlossomTemplateRegistry implements BlossomTemplateRegistry, InitializingBean {
54
55 private static final String TEMPLATES_PATH = "/modules/blossom/templates/autodetected";
56
57 protected TemplateDescriptionBuilder descriptionBuilder;
58 private Map<String, BlossomTemplateDescription> templatesByName = new ConcurrentHashMap<String, BlossomTemplateDescription>();
59
60 public void setDescriptionBuilder(TemplateDescriptionBuilder descriptionBuilder) {
61 this.descriptionBuilder = descriptionBuilder;
62 }
63
64 public BlossomTemplateDescription getTemplate(String name) {
65 return templatesByName.get(name);
66 }
67
68 public void registerTemplate(BlossomDispatcher dispatcher, Object handler, String handlerPath) throws RepositoryException {
69 addTemplate(descriptionBuilder.buildDescription(dispatcher, handler, handlerPath));
70 }
71
72 protected void addTemplate(BlossomTemplateDescription description) throws RepositoryException {
73 templatesByName.put(description.getName(), description);
74 writeTemplateDefinition(description);
75 }
76
77 protected void writeTemplateDefinition(BlossomTemplateDescription templateDescription) throws RepositoryException {
78 HierarchyManager hierarchyManager = MgnlContext.getSystemContext().getHierarchyManager(ContentRepository.CONFIG);
79 Content configNode = RepositoryUtils.createContentNode(hierarchyManager, TEMPLATES_PATH, templateDescription.getName());
80 configNode.createNodeData("name", new StringValue(templateDescription.getName()));
81 configNode.createNodeData("title", new StringValue(templateDescription.getTitle()));
82 configNode.createNodeData("description", new StringValue(templateDescription.getDescription()));
83 configNode.createNodeData("visible", templateDescription.isVisible());
84 if (StringUtils.isNotBlank(templateDescription.getI18nBasename()))
85 configNode.createNodeData("i18nBasename", new StringValue(templateDescription.getI18nBasename()));
86 configNode.createNodeData("type", new StringValue("blossom"));
87 configNode.createNodeData("class", BlossomTemplate.class.getName());
88 configNode.getParent().save();
89 }
90
91 public void afterPropertiesSet() throws Exception {
92
93 HierarchyManager hierarchyManager = MgnlContext.getSystemContext().getHierarchyManager(ContentRepository.CONFIG);
94 RepositoryUtils.deleteContent(hierarchyManager, TEMPLATES_PATH);
95
96 if (descriptionBuilder == null)
97 descriptionBuilder = new TemplateDescriptionBuilder();
98 }
99 }