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