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.blossom.dialog;
35
36 import java.lang.reflect.Field;
37 import javax.jcr.RepositoryException;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40
41 import org.springframework.util.ReflectionUtils;
42
43 import info.magnolia.cms.core.Content;
44 import info.magnolia.cms.gui.dialog.Dialog;
45 import info.magnolia.module.admininterface.DialogMVCHandler;
46 import info.magnolia.module.admininterface.SaveHandler;
47 import info.magnolia.module.admininterface.dialogs.ConfiguredDialog;
48 import info.magnolia.objectfactory.Components;
49
50
51
52
53
54
55 public class BlossomConfiguredDialog extends ConfiguredDialog {
56
57 private BlossomDialogDescription dialogDescription;
58 private DialogCreationContext context;
59
60 public BlossomConfiguredDialog(String name, HttpServletRequest request, HttpServletResponse response, Content configNode) {
61 super(name, request, response, configNode);
62
63 BlossomDialogRegistry dialogRegistry = Components.getComponent(BlossomDialogRegistry.class);
64 dialogDescription = dialogRegistry.getDialogDescription(super.getName());
65 }
66
67 @Override
68 protected Dialog createDialog(Content configNode, Content storageNode) throws RepositoryException {
69
70 try {
71
72 context = new DialogCreationContext();
73 context.setRequest(request);
74 context.setResponse(response);
75 context.setConfigNode(configNode);
76 context.setWebsiteNode(storageNode);
77 context.setWebsitePath(path);
78
79 DialogCreator dialogCreator = dialogDescription.getDialogCreator();
80 DialogFactoryMetaData factoryMetaData = dialogDescription.getFactoryMetaData();
81 dialogCreator.createDialog(factoryMetaData, context);
82
83 return context.getDialog();
84
85 } catch (RepositoryException e) {
86 throw e;
87 } catch (RuntimeRepositoryException e) {
88 throw e.getNestedException();
89 } catch (RuntimeException e) {
90 throw e;
91 } catch (Exception e) {
92 throw new RepositoryException(e);
93 }
94 }
95
96
97
98
99
100
101 private void setSaveHandler(SaveHandler saveHandler) throws IllegalAccessException, NoSuchFieldException {
102 Field field = DialogMVCHandler.class.getDeclaredField("saveHandler");
103 ReflectionUtils.makeAccessible(field);
104 field.set(this, saveHandler);
105 }
106
107 @Override
108 protected SaveHandler getSaveHandler() {
109 if (context.getSaveHandler() != null) {
110 try {
111 setSaveHandler(context.getSaveHandler());
112 } catch (IllegalAccessException e) {
113 throw new RuntimeException("Unable to set SaveHandler", e);
114 } catch (NoSuchFieldException e) {
115 throw new RuntimeException("Unable to set SaveHandler", e);
116 }
117 configureSaveHandler(context.getSaveHandler());
118 return context.getSaveHandler();
119 }
120 return super.getSaveHandler();
121 }
122 }