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.dialogs;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.gui.control.Button;
38 import info.magnolia.cms.gui.control.ControlImpl;
39 import info.magnolia.cms.gui.dialog.Dialog;
40 import info.magnolia.cms.gui.dialog.DialogBox;
41 import info.magnolia.cms.gui.dialog.DialogButtonSet;
42 import info.magnolia.cms.gui.dialog.DialogFactory;
43 import info.magnolia.cms.gui.dialog.DialogHidden;
44 import info.magnolia.cms.gui.dialog.DialogStatic;
45 import info.magnolia.cms.gui.dialog.DialogTab;
46 import info.magnolia.cms.i18n.Messages;
47 import info.magnolia.cms.i18n.MessagesManager;
48 import info.magnolia.module.admininterface.DialogMVCHandler;
49 import info.magnolia.objectfactory.Components;
50 import info.magnolia.registry.RegistrationException;
51 import info.magnolia.rendering.template.TemplateDefinition;
52 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
53
54 import java.io.IOException;
55 import java.net.URLEncoder;
56 import java.util.Iterator;
57
58 import javax.jcr.RepositoryException;
59 import javax.servlet.http.HttpServletRequest;
60 import javax.servlet.http.HttpServletResponse;
61
62 import org.apache.commons.lang.StringUtils;
63 import org.slf4j.Logger;
64 import org.slf4j.LoggerFactory;
65
66
67
68
69
70
71 public class ParagraphSelectDialog extends DialogMVCHandler {
72 private static final Logger log = LoggerFactory.getLogger(ParagraphSelectDialog.class);
73
74 private static final String EDIT_PARAGRAPH_DIALOGNAME = "editParagraph";
75 public static final String EDITPARAGRAPH_DIALOG_URL = ".magnolia/dialogs/" + EDIT_PARAGRAPH_DIALOGNAME + ".html";
76
77 private final String paragraph;
78
79 public ParagraphSelectDialog(String name, HttpServletRequest request, HttpServletResponse response) {
80 super(name, request, response);
81 paragraph = params.getParameter("mgnlParagraph");
82 }
83
84 @Override
85 protected Dialog createDialog(Content configNode, Content websiteNode) throws RepositoryException {
86 Dialog dialog = DialogFactory.getDialogInstance(request, response, null, null);
87
88 dialog.setConfig("paragraph", paragraph);
89
90 dialog.setLabel(msgs.get("dialog.paragraph.createNew"));
91 dialog.setConfig("saveLabel", msgs.get("buttons.ok"));
92
93 DialogHidden h1 = DialogFactory.getDialogHiddenInstance(request, response, null, null);
94 h1.setName("mgnlParagraphSelected");
95 h1.setValue("true");
96 h1.setConfig("saveInfo", "false");
97 dialog.addSub(h1);
98
99 DialogTab tab = dialog.addTab();
100
101 DialogStatic c0 = DialogFactory.getDialogStaticInstance(request, response, null, null);
102
103 c0.setConfig("line", "false");
104 c0.setValue(msgs.get("dialog.paragraph.select"));
105 c0.setBoxType((DialogBox.BOXTYPE_1COL));
106 tab.addSub(c0);
107
108 DialogButtonSet c1 = DialogFactory.getDialogButtonSetInstance(request, response, null, null);
109 c1.setName("mgnlParagraph");
110 c1.setButtonType(ControlImpl.BUTTONTYPE_RADIO);
111 c1.setBoxType(DialogBox.BOXTYPE_1COL);
112 c1.setConfig("saveInfo", "false");
113 c1.setConfig("width", "100%");
114
115 String[] pars = paragraph.split(",");
116 for (int i = 0; i < pars.length; i++) {
117 try {
118 addParagraph(c1, pars[i]);
119
120 } catch (Exception e) {
121
122 log.warn("Exception caught: " + e.getMessage(), e);
123 }
124 }
125
126 tab.addSub(c1);
127
128 return dialog;
129 }
130
131 protected void addParagraph(DialogButtonSet radioButtonSet, String paragraphName) {
132 TemplateDefinition paragraphInfo;
133 try {
134 paragraphInfo = Components.getComponent(TemplateDefinitionRegistry.class).getTemplateDefinition(paragraphName);
135 } catch (RegistrationException e) {
136
137 throw new RuntimeException(e);
138 }
139
140
141 if (paragraphInfo == null) {
142 log.error("Unable to load paragraph {}", paragraph);
143 return;
144 }
145
146 final Messages msgs = MessagesManager.getMessages(paragraphInfo.getI18nBasename());
147
148 final StringBuffer label = new StringBuffer();
149 label.append("<strong>"
150 + msgs.getWithDefault(paragraphInfo.getTitle(), paragraphInfo.getTitle())
151 + "</strong><br />");
152
153 final String description = paragraphInfo.getDescription();
154 if (StringUtils.isNotEmpty(description)) {
155 label.append(msgs.getWithDefault(description, description));
156 }
157 label.append("<br /><br />");
158
159 final Button button = new Button(radioButtonSet.getName(), paragraphInfo.getId());
160 button.setLabel(label.toString());
161 button.setOnclick("document.getElementById('mgnlFormMain').submit();");
162 radioButtonSet.addOption(button);
163 }
164
165 @Override
166 public Content getStorageNode() {
167 return null;
168 }
169
170 @Override
171 public Content getConfigNode() {
172 return null;
173 }
174
175 @Override
176 public String save() {
177 try {
178
179 StringBuffer query = new StringBuffer();
180 for (Iterator iter = form.getParameters().keySet().iterator(); iter.hasNext();) {
181 String key = (String) iter.next();
182 if (!key.equals("mgnlDialog")) {
183 if (query.length() != 0) {
184 query.append("&");
185 }
186 query.append(key);
187 query.append("=");
188 query.append(URLEncoder.encode(form.getParameter(key),"UTF-8"));
189 }
190
191 }
192 response.sendRedirect(request.getContextPath() + "/" + EDITPARAGRAPH_DIALOG_URL + "?" + query);
193 }
194 catch (IOException e) {
195 log.error("can't redirect to the paragraph-dialog", e);
196 }
197 return VIEW_NOTHING;
198 }
199
200 }