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.objectfactory.Components;
38 import info.magnolia.pages.app.editor.PagesContentConnector;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.api.app.SubAppContext;
42 import info.magnolia.ui.api.app.SubAppDescriptor;
43 import info.magnolia.ui.api.app.SubAppEventBus;
44 import info.magnolia.ui.api.event.ContentChangedEvent;
45 import info.magnolia.ui.contentapp.definition.ContentSubAppDescriptor;
46 import info.magnolia.ui.dialog.formdialog.FormDialogPresenter;
47 import info.magnolia.ui.dialog.formdialog.FormDialogPresenterFactory;
48 import info.magnolia.ui.form.EditorCallback;
49 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
50 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnectorDefinition;
51 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
52
53 import javax.inject.Inject;
54 import javax.inject.Named;
55
56 import org.slf4j.Logger;
57 import org.slf4j.LoggerFactory;
58
59
60
61
62
63 public class EditElementAction extends AbstractAction<EditElementActionDefinition> {
64
65 private static final Logger log = LoggerFactory.getLogger(EditElementAction.class);
66
67 private final FormDialogPresenterFactory dialogPresenterFactory;
68 private final JcrItemAdapter item;
69 private final AbstractElement element;
70 private final SubAppContext subAppContext;
71 private final EventBus eventBus;
72
73 @Inject
74 public EditElementAction(final JcrItemAdapter item, final EditElementActionDefinition definition, final AbstractElement element,
75 final SubAppContext subAppContext, final @Named(SubAppEventBus.NAME) EventBus eventBus,
76 final FormDialogPresenterFactory dialogPresenterFactory) {
77 super(definition);
78 this.item = item;
79 this.element = element;
80 this.subAppContext = subAppContext;
81 this.eventBus = eventBus;
82 this.dialogPresenterFactory = dialogPresenterFactory;
83 }
84
85
86
87
88 @Deprecated
89 public EditElementAction(EditElementActionDefinition definition, AbstractElement element,
90 SubAppContext subAppContext, @Named(SubAppEventBus.NAME) EventBus eventBus, FormDialogPresenterFactory dialogPresenterFactory) {
91 this(resolveItemForDeprecations(element, subAppContext, eventBus), definition, element, subAppContext, eventBus, dialogPresenterFactory);
92 }
93
94
95
96
97
98
99 private static JcrItemAdapter resolveItemForDeprecations(AbstractElement element, SubAppContext subAppContext, EventBus eventBus) {
100 SubAppDescriptor subAppDescriptor = subAppContext.getSubAppDescriptor();
101 if (subAppDescriptor instanceof ContentSubAppDescriptor) {
102 ContentConnectorDefinition contentConnectorDefinition = ((ContentSubAppDescriptor) subAppDescriptor).getContentConnector();
103 if (contentConnectorDefinition != null) {
104 PagesContentConnector contentConnector = (PagesContentConnector) Components.newInstance(contentConnectorDefinition.getImplementationClass(), subAppContext, eventBus, contentConnectorDefinition);
105 return contentConnector.getItemByElement(element);
106 } else {
107 log.warn("Sub-app descriptor {} ({}) expected a ContentConnectorDefinition, but no contentConnector is currently configured.", subAppDescriptor.getName(), subAppDescriptor.getClass().getSimpleName());
108 }
109 }
110 log.warn("Not able to resolve the content-connector using the fallback mechanism in '{}'. Please omit the deprecated code. Return 'null'.",
111 EditElementAction.class.getName());
112 return null;
113 }
114
115 @Override
116 public void execute() throws ActionExecutionException {
117 String dialogId = element.getDialog();
118
119 final FormDialogPresenter formDialogPresenter = dialogPresenterFactory.createFormDialogPresenter(dialogId);
120 formDialogPresenter.start(item, dialogId, subAppContext, new EditorCallback() {
121
122 @Override
123 public void onSuccess(String actionName) {
124 eventBus.fireEvent(new ContentChangedEvent(item.getItemId()));
125 formDialogPresenter.closeDialog();
126 }
127
128 @Override
129 public void onCancel() {
130 formDialogPresenter.closeDialog();
131 }
132 });
133 }
134 }