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.beans.runtime.MultipartForm;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.cms.core.ItemType;
39 import info.magnolia.module.admininterface.DialogHandlerManager;
40 import info.magnolia.module.admininterface.DialogMVCHandler;
41 import info.magnolia.module.admininterface.InvalidDialogHandlerException;
42 import info.magnolia.module.admininterface.SaveHandler;
43 import info.magnolia.objectfactory.Components;
44 import info.magnolia.registry.RegistrationException;
45 import info.magnolia.rendering.template.TemplateDefinition;
46 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
47
48 import java.io.IOException;
49
50 import javax.servlet.http.HttpServletRequest;
51 import javax.servlet.http.HttpServletResponse;
52
53 import org.apache.commons.lang.StringUtils;
54
55
56
57
58
59
60 public class ParagraphEditDialog extends ConfiguredDialog {
61
62 private DialogMVCHandler dialogHandler;
63
64 public ParagraphEditDialog(String name, HttpServletRequest request, HttpServletResponse response, Content configNode) {
65 super(name, request, response, configNode);
66
67
68 String paragraphName = params.getParameter("mgnlParagraph");
69
70 final String dialogName = getDialogUsedByParagraph(paragraphName);
71
72 try {
73 dialogHandler = DialogHandlerManager.getInstance().getDialogHandler(dialogName, request, response);
74
75
76 dialogHandler.getDialog().setConfig("paragraph", paragraphName);
77 dialogHandler.getDialog().setConfig("collectionNodeCreationItemType", ItemType.AREA.getSystemName());
78 dialogHandler.getDialog().setConfig("creationItemType", ItemType.COMPONENT.getSystemName());
79 } catch (InvalidDialogHandlerException e) {
80 if (dialogName.equals(paragraphName)) {
81
82 dialogHandler = new NoDialogMVCHandler(request, response);
83 } else {
84 throw e;
85 }
86 }
87 }
88
89 private String getDialogUsedByParagraph(String paragraphName) {
90 if (StringUtils.isEmpty(paragraphName)) {
91 throw new IllegalStateException("No paragraph selected.");
92 }
93 TemplateDefinition para;
94 try {
95 para = Components.getComponent(TemplateDefinitionRegistry.class).getTemplateDefinition(paragraphName);
96 } catch (RegistrationException e) {
97
98 throw new RuntimeException(e);
99 }
100 if (para == null) {
101 throw new IllegalStateException("No paragraph registered with name " + paragraphName);
102 }
103 final String dialogName;
104 if (para.getDialog() != null) {
105 dialogName = para.getDialog();
106 } else {
107 dialogName = para.getName();
108 }
109 return dialogName;
110 }
111
112
113
114
115 @Override
116 public String getCommand() {
117 return dialogHandler.getCommand();
118 }
119
120 @Override
121 public String execute(String command) {
122 return dialogHandler.execute(command);
123 }
124
125 @Override
126 public void renderHtml(String view) throws IOException {
127 dialogHandler.renderHtml(view);
128 }
129
130 public static class NoDialogMVCHandler extends DialogMVCHandler {
131 public NoDialogMVCHandler(HttpServletRequest request, HttpServletResponse response) {
132
133 super("auto-save", request, response);
134
135 }
136
137 @Override
138 public String getCommand() {
139
140 return DialogMVCHandler.COMMAND_SAVE;
141 }
142
143 @Override
144 public String save() {
145
146 final SaveHandler saveHandler = Components.getComponentProvider().newInstance(SaveHandler.class);
147 final MultipartForm dummyForm = new MultipartForm();
148 dummyForm.addparameterValues("mgnlSaveInfo", new String[0]);
149 saveHandler.init(dummyForm);
150
151
152 saveHandler.setPath(path);
153 saveHandler.setNodeCollectionName(params.getParameter("mgnlNodeCollection"));
154 saveHandler.setNodeName(nodeName);
155 saveHandler.setParagraph(params.getParameter("mgnlParagraph"));
156 saveHandler.setRepository(repository);
157 saveHandler.setCollectionNodeCreationItemType(ItemType.AREA);
158 saveHandler.setCreationItemType(ItemType.COMPONENT);
159
160
161 boolean result = saveHandler.save();
162 return result ? DialogMVCHandler.VIEW_CLOSE_WINDOW : DialogMVCHandler.VIEW_ERROR;
163 }
164
165 }
166 }