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.admininterface.trees;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.MgnlNodeType;
38 import info.magnolia.cms.gui.control.Select;
39 import info.magnolia.cms.gui.control.TreeColumn;
40 import info.magnolia.cms.i18n.Messages;
41 import info.magnolia.cms.i18n.MessagesManager;
42 import info.magnolia.cms.i18n.MessagesUtil;
43 import info.magnolia.jcr.RuntimeRepositoryException;
44 import info.magnolia.objectfactory.Components;
45 import info.magnolia.registry.RegistrationException;
46 import info.magnolia.rendering.template.TemplateDefinition;
47 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
48
49 import java.util.Collection;
50
51 import javax.jcr.RepositoryException;
52 import javax.servlet.http.HttpServletRequest;
53
54 import org.apache.commons.lang.StringUtils;
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58
59
60
61
62
63 public class TemplateColumn extends TreeColumn {
64 private static final Logger log = LoggerFactory.getLogger(TemplateColumn.class);
65
66 private final TemplateDefinitionRegistry templateManager;
67 Select templateSelect;
68
69 public TemplateColumn(String javascriptTree, HttpServletRequest request) {
70 super(javascriptTree, request);
71
72 this.templateManager = Components.getComponent(TemplateDefinitionRegistry.class);
73
74 templateSelect = new Select();
75 templateSelect.setName(javascriptTree + TreeColumn.EDIT_NAMEADDITION);
76 templateSelect.setSaveInfo(false);
77 templateSelect.setCssClass(TreeColumn.EDIT_CSSCLASS_SELECT);
78
79
80
81
82 templateSelect.setEvent("onblur", javascriptTree
83 + ".saveNodeData(this.value,this.options[this.selectedIndex].text)");
84 templateSelect.setEvent("onchange", javascriptTree
85 + ".saveNodeData(this.value,this.options[this.selectedIndex].text)");
86
87 }
88
89 @Override
90 public String getHtml() {
91 Content content = this.getWebsiteNode();
92 try {
93 if(MgnlNodeType.NT_FOLDER.equals(content.getNodeTypeName())) {
94 return "";
95 }
96 } catch (RepositoryException e) {
97 throw new RuntimeRepositoryException("Could not retrieve node type name for content " + content, e);
98 }
99 String templateName = content.getMetaData().getTemplate();
100
101 TemplateDefinition template = null;
102 try {
103 template = templateManager.getTemplateDefinition(templateName);
104 }
105 catch (RegistrationException e) {
106 log.error("Template with id {} doesn't exist.", templateName);
107 }
108 return template != null ? getI18nTitle(template) : "Missing: " + StringUtils.defaultString(templateName);
109
110 }
111
112 @Override
113 public String getHtmlEdit() {
114 Collection<TemplateDefinition> templateDefinitons = templateManager.getAvailableTemplates(this.getWebsiteNode().getJCRNode());
115
116 templateSelect.getOptions().clear();
117
118 for (TemplateDefinition templateDefinition : templateDefinitons) {
119 String title = MessagesUtil.javaScriptString(getI18nTitle(templateDefinition));
120 templateSelect.setOptions(title, templateDefinition.getId());
121 }
122 return templateSelect.getHtml();
123 }
124
125 private String getI18nTitle(TemplateDefinition template) {
126 Messages messages = MessagesManager.getMessages(template.getI18nBasename());
127 String title = template.getTitle();
128 return messages.getWithDefault(title, title);
129 }
130 }