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.ui.framework.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.api.context.UiContext;
41 import info.magnolia.ui.api.event.AdmincentralEventBus;
42 import info.magnolia.ui.api.event.ContentChangedEvent;
43 import info.magnolia.ui.dialog.DialogPresenter;
44 import info.magnolia.ui.dialog.callback.DefaultEditorCallback;
45 import info.magnolia.ui.dialog.formdialog.FormDialogPresenter;
46 import info.magnolia.ui.dialog.formdialog.FormDialogPresenterFactory;
47 import info.magnolia.ui.form.EditorCallback;
48 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
49 import info.magnolia.ui.vaadin.integration.contentconnector.SupportsCreation;
50 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
51
52 import javax.inject.Inject;
53 import javax.inject.Named;
54
55 import org.apache.commons.lang3.StringUtils;
56
57 import com.vaadin.v7.data.Item;
58
59
60
61
62
63
64 public class OpenCreateDialogAction extends AbstractAction<OpenCreateDialogActionDefinition> {
65
66 private final Item parentItem;
67 private final FormDialogPresenterFactory formDialogPresenterFactory;
68 private final UiContext uiContext;
69 private final EventBus eventBus;
70 private ContentConnector contentConnector;
71 private final SimpleTranslator i18n;
72
73 @Inject
74 public OpenCreateDialogAction(OpenCreateDialogActionDefinition definition, Item parentItem, FormDialogPresenterFactory formDialogPresenterFactory, UiContext uiContext, @Named(AdmincentralEventBus.NAME) final EventBus eventBus, ContentConnector contentConnector, SimpleTranslator i18n) {
75 super(definition);
76 this.parentItem = parentItem;
77 this.formDialogPresenterFactory = formDialogPresenterFactory;
78 this.uiContext = uiContext;
79 this.eventBus = eventBus;
80 this.contentConnector = contentConnector;
81 this.i18n = i18n;
82 }
83
84 @Override
85 public void execute() throws ActionExecutionException {
86
87 Object parentId = contentConnector.getItemId(parentItem);
88
89 if (contentConnector instanceof SupportsCreation) {
90 final Object itemId = ((SupportsCreation) contentConnector).getNewItemId(parentId, getDefinition().getNodeType());
91
92 final String dialogName = getDefinition().getDialogName();
93 if (StringUtils.isBlank(dialogName)) {
94 uiContext.openNotification(MessageStyleTypeEnum.ERROR, false, i18n.translate("ui-framework.actions.no.dialog.definition", getDefinition().getName()));
95 return;
96
97 }
98
99 final FormDialogPresenter formDialogPresenter = formDialogPresenterFactory.createFormDialogPresenter(dialogName);
100
101 if (formDialogPresenter == null) {
102 uiContext.openNotification(MessageStyleTypeEnum.ERROR, false, i18n.translate("ui-framework.actions.dialog.not.registered", dialogName));
103 return;
104 }
105
106 final Item item = contentConnector.getItem(itemId);
107 formDialogPresenter.start(item, getDefinition().getDialogName(), uiContext, createEditorCallback(formDialogPresenter, item, eventBus));
108 }
109 }
110
111 protected EditorCallback createEditorCallback(final DialogPresenter dialogPresenter, final Item item, final EventBus eventBus) {
112 return new DefaultEditorCallback(dialogPresenter) {
113 @Override
114 public void onSuccess(String actionName) {
115 eventBus.fireEvent(new ContentChangedEvent(contentConnector.getItemId(item), true));
116 super.onSuccess(actionName);
117 }
118 };
119 }
120
121 protected ContentConnector getContentConnector() {
122 return contentConnector;
123 }
124 }