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.ItemType;
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.context.MgnlContext;
44 import info.magnolia.module.admininterface.AdminTreeMVCHandler;
45 import info.magnolia.objectfactory.Components;
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 import java.util.Collections;
52
53 import javax.jcr.Node;
54 import javax.jcr.RepositoryException;
55 import javax.servlet.http.HttpServletRequest;
56 import javax.servlet.http.HttpServletResponse;
57
58 import org.slf4j.Logger;
59 import org.slf4j.LoggerFactory;
60
61
62
63
64
65 public class WebsiteTreeHandler extends AdminTreeMVCHandler {
66 private static final Logger log = LoggerFactory.getLogger(WebsiteTreeHandler.class);
67
68 private static final String COMMAND_SHOW_TEMPLATES = "getTemplatesHtml";
69
70 private TemplateDefinitionRegistry templateRegistry;
71 private TemplateDefinitionAssignment templateAssignment;
72 private boolean getAvailableTemplates;
73
74 public WebsiteTreeHandler(String name, HttpServletRequest request, HttpServletResponse response) {
75 super(name, request, response);
76
77 templateAssignment = Components.getComponent(TemplateDefinitionAssignment.class);
78 templateRegistry = Components.getComponent(TemplateDefinitionRegistry.class);
79 }
80
81 @Override
82 public String createNode() {
83 String view = super.createNode();
84 try {
85
86 if (this.getCreateItemType().equals(ItemType.PAGE.getSystemName())) {
87
88 Content parentNode = this.getHierarchyManager().getContent(this.getPath());
89 Content newNode = parentNode.getContent(this.getNewNodeName());
90 TemplateDefinition newTemplate = getDefaultTemplate(newNode.getJCRNode());
91 if (newTemplate != null) {
92 newNode.getMetaData().setTemplate(newTemplate.getId());
93 newNode.save();
94 }
95 }
96 } catch (RepositoryException e) {
97 log.error("can't set template", e);
98 }
99 return view;
100 }
101
102 protected TemplateDefinition getDefaultTemplate(Node node) {
103 return templateAssignment.getDefaultTemplate(node);
104 }
105
106 @Override
107 public String show() {
108
109 Collection<TemplateDefinition> templateDefinitions = templateRegistry.getTemplateDefinitions();
110
111 boolean isDeletedNodeTemplate = templateDefinitions.size() == 1 && "adminInterface:mgnlDeleted".equals(templateDefinitions.iterator().next().getId());
112 if (templateDefinitions.isEmpty() || isDeletedNodeTemplate) {
113 try {
114 request.getRequestDispatcher("/.magnolia/pages/quickstart.html").forward(request, response);
115 return "";
116 } catch (Exception e) {
117 log.error("Couldn't forward to quickstart page: " + e.getMessage());
118 }
119 }
120 return super.show();
121 }
122
123 @Override
124 public String getCommand() {
125 if (isGetAvailableTemplates()) {
126 return COMMAND_SHOW_TEMPLATES;
127 }
128 return super.getCommand();
129 }
130
131 public String getTemplatesHtml() {
132 String javascriptTree = getTree().getJavascriptTree();
133 Select templateSelect = new Select();
134 templateSelect.setName(javascriptTree + TreeColumn.EDIT_NAMEADDITION);
135 templateSelect.setSaveInfo(false);
136 templateSelect.setCssClass(TreeColumn.EDIT_CSSCLASS_SELECT);
137
138 templateSelect.setEvent("onblur", javascriptTree + ".saveNodeData(this.value,this.options[this.selectedIndex].text)");
139 templateSelect.setEvent("onchange", javascriptTree + ".saveNodeData(this.value,this.options[this.selectedIndex].text)");
140
141 Collection<TemplateDefinition> templateDefinitons = Collections.emptyList();
142 try {
143 templateDefinitons = templateAssignment.getAvailableTemplates(MgnlContext.getJCRSession(this.getRepository()).getNode(this.getPath()));
144 } catch (RepositoryException e) {
145 log.error(e.getMessage(), e);
146 }
147
148 templateSelect.getOptions().clear();
149
150 for (TemplateDefinition templateDefinition : templateDefinitons) {
151 String title = MessagesUtil.javaScriptString(getI18nTitle(templateDefinition));
152 templateSelect.setOptions(title, templateDefinition.getId());
153 }
154 this.displayValue = templateSelect.getHtml();
155 return VIEW_VALUE;
156 }
157
158 private String getI18nTitle(TemplateDefinition template) {
159 Messages messages = MessagesManager.getMessages(template.getI18nBasename());
160 String title = template.getTitle();
161 return messages.getWithDefault(title, title);
162 }
163
164 public boolean isGetAvailableTemplates() {
165 return getAvailableTemplates;
166 }
167
168 public void setGetAvailableTemplates(boolean getAvailableTemplates) {
169 this.getAvailableTemplates = getAvailableTemplates;
170 }
171 }