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.resources.app.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.resourceloader.Resource;
39 import info.magnolia.resourceloader.ResourceOrigin;
40 import info.magnolia.resources.app.ResourcesContentConnector;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.app.AppContext;
43 import info.magnolia.ui.api.context.UiContext;
44 import info.magnolia.ui.api.event.AdmincentralEventBus;
45 import info.magnolia.ui.api.location.LocationController;
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.framework.action.OpenCreateDialogActionDefinition;
50 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
51 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
52
53 import javax.inject.Named;
54
55 import org.apache.commons.lang3.StringUtils;
56
57 import com.vaadin.data.Item;
58 import com.vaadin.data.util.PropertysetItem;
59
60
61
62
63
64
65
66
67
68
69
70 public abstract class AbstractAddResourceAction<D extends OpenCreateDialogActionDefinition> extends AbstractResourceAction<D> {
71
72 private PropertysetItem newResourceItem;
73
74 private final Item resourceItem;
75 private final FormDialogPresenterFactory formDialogPresenterFactory;
76
77 protected final AppContext appContext;
78 protected final UiContext uiContext;
79 protected final SimpleTranslator i18n;
80 protected final ResourcesContentConnector contentConnector;
81 protected final LocationController locationController;
82 protected final EventBus eventBus;
83
84 public AbstractAddResourceAction(D definition, Item resourceItem, FormDialogPresenterFactory formDialogPresenterFactory, AppContext appContext, UiContext uiContext, ContentConnector contentConnector, SimpleTranslator i18n, LocationController locationController, ResourceOrigin origin, @Named(AdmincentralEventBus.NAME) EventBus eventBus) {
85 super(definition, origin);
86 this.resourceItem = resourceItem;
87 this.formDialogPresenterFactory = formDialogPresenterFactory;
88 this.appContext = appContext;
89 this.uiContext = uiContext;
90 this.contentConnector = (ResourcesContentConnector) contentConnector;
91 this.locationController = locationController;
92 this.i18n = i18n;
93 this.eventBus = eventBus;
94 }
95
96 @Override
97 public void execute() throws ActionExecutionException {
98 final String dialogName = getDefinition().getDialogName();
99 if (StringUtils.isBlank(dialogName)) {
100 uiContext.openNotification(MessageStyleTypeEnum.ERROR, false, i18n.translate("ui-framework.actions.no.dialog.definition", getDefinition().getName()));
101 return;
102 }
103
104 final FormDialogPresenter formDialogPresenter = formDialogPresenterFactory.createFormDialogPresenter(dialogName);
105 if (formDialogPresenter == null) {
106 uiContext.openNotification(MessageStyleTypeEnum.ERROR, false, i18n.translate("ui-framework.actions.dialog.not.registered", dialogName));
107 return;
108 }
109
110 formDialogPresenter.start(getNewResourceItem(), getDefinition().getDialogName(), uiContext, new EditorCallback() {
111 @Override
112 public void onSuccess(String actionName) {
113 addResource();
114 formDialogPresenter.closeDialog();
115 }
116
117 @Override
118 public void onCancel() {
119 formDialogPresenter.closeDialog();
120 }
121 });
122 }
123
124 protected Resource getParentResource() {
125 return unwrapResource(resourceItem);
126 }
127
128 protected PropertysetItem getNewResourceItem() {
129 if (newResourceItem == null) {
130 newResourceItem = new PropertysetItem();
131 }
132 return newResourceItem;
133 }
134
135
136
137
138
139 protected abstract void addResource();
140
141 }