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.pages.app.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.app.SubAppContext;
40 import info.magnolia.ui.api.app.SubAppEventBus;
41 import info.magnolia.ui.api.event.ContentChangedEvent;
42 import info.magnolia.ui.dialog.formdialog.FormDialogPresenter;
43 import info.magnolia.ui.dialog.formdialog.FormDialogPresenterFactory;
44 import info.magnolia.ui.form.EditorCallback;
45 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
46 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
47
48 import javax.inject.Inject;
49 import javax.inject.Named;
50
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54
55
56
57
58 public class EditElementAction extends AbstractAction<EditElementActionDefinition> {
59
60 private static final Logger log = LoggerFactory.getLogger(EditElementAction.class);
61
62 private final FormDialogPresenterFactory dialogPresenterFactory;
63 private final JcrItemAdapter item;
64 private final AbstractElement element;
65 private final SubAppContext subAppContext;
66 private final EventBus eventBus;
67
68 @Inject
69 public EditElementAction(final JcrItemAdapter item, final EditElementActionDefinition definition, final AbstractElement element,
70 final SubAppContext subAppContext, final @Named(SubAppEventBus.NAME) EventBus eventBus,
71 final FormDialogPresenterFactory dialogPresenterFactory) {
72 super(definition);
73 this.item = item;
74 this.element = element;
75 this.subAppContext = subAppContext;
76 this.eventBus = eventBus;
77 this.dialogPresenterFactory = dialogPresenterFactory;
78 }
79
80 @Override
81 public void execute() throws ActionExecutionException {
82 final String dialogId = element.getDialog();
83 final FormDialogPresenter formDialogPresenter = dialogPresenterFactory.createFormDialogPresenter(dialogId);
84 formDialogPresenter.start(item, dialogId, subAppContext, new EditElementCallback(formDialogPresenter, item, eventBus));
85 }
86
87 protected JcrItemAdapter getItem() {
88 return item;
89 }
90
91 protected AbstractElement getElement() {
92 return element;
93 }
94
95 protected SubAppContext getSubAppContext() {
96 return subAppContext;
97 }
98
99 protected EventBus getEventBus() {
100 return eventBus;
101 }
102
103
104
105
106 public static class EditElementCallback implements EditorCallback {
107
108 private final FormDialogPresenter formDialogPresenter;
109 private final EventBus eventBus;
110 private final JcrItemAdapter item;
111
112 @Inject
113 public EditElementCallback(FormDialogPresenter formDialogPresenter, JcrItemAdapter item, EventBus eventBus) {
114 this.formDialogPresenter = formDialogPresenter;
115 this.item = item;
116 this.eventBus = eventBus;
117 }
118
119 @Override
120 public void onSuccess(String actionName) {
121 eventBus.fireEvent(new ContentChangedEvent(item.getItemId()));
122 formDialogPresenter.closeDialog();
123 }
124
125 @Override
126 public void onCancel() {
127 formDialogPresenter.closeDialog();
128 }
129 }
130 }