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.dam.external.app.action;
35
36 import info.magnolia.dam.api.Item;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.api.action.AbstractActionExecutor;
41 import info.magnolia.ui.api.action.ActionDefinition;
42 import info.magnolia.ui.api.action.ActionExecutionException;
43 import info.magnolia.ui.api.action.ActionExecutor;
44 import info.magnolia.ui.api.app.SubAppContext;
45 import info.magnolia.ui.api.context.UiContext;
46 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
47
48 import javax.inject.Inject;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import com.vaadin.data.util.BeanItem;
54
55
56
57
58 public class DelegateAction extends AbstractAction<DelegateActionDefinition> {
59
60 private static final Logger log = LoggerFactory.getLogger(DelegateAction.class);
61
62 private final BeanItem<Item> itemBean;
63 private final SubAppContext subAppContext;
64 private final ComponentProvider componentProvider;
65 private final UiContext uiContext;
66 private final SimpleTranslator i18n;
67
68 @Inject
69 public DelegateAction(DelegateActionDefinition definition, BeanItem<Item> itemBean, SubAppContext subAppContext, ComponentProvider componentProvider, UiContext uiContext, SimpleTranslator i18n) {
70 super(definition);
71 this.itemBean = itemBean;
72 this.subAppContext = subAppContext;
73 this.componentProvider = componentProvider;
74 this.uiContext = uiContext;
75 this.i18n = i18n;
76 }
77
78 @Override
79 public void execute() throws ActionExecutionException {
80 if (!(itemBean.getBean() instanceof Item)) {
81 log.info("The bean is not instance of dam item. Cannot execute delegate action.");
82 uiContext.openNotification(MessageStyleTypeEnum.ERROR, true, i18n.translate("dam-external-app.action.delegate.action.notdamitem"));
83 return;
84 }
85 String providerId = ((Item) itemBean.getBean()).getItemKey().getProviderId();
86 if (!getDefinition().getProviderToAction().containsKey(providerId)) {
87 log.info("Definition does not contain entry for {}. Cannot execute delegate action.", providerId);
88 uiContext.openNotification(MessageStyleTypeEnum.ERROR, true, i18n.translate("dam-external-app.action.delegate.action.nomapping", providerId));
89 return;
90 }
91 String actionName = getDefinition().getProviderToAction().get(providerId);
92 ActionExecutor executor = new AbstractActionExecutor(componentProvider) {
93 @Override
94 public ActionDefinition getActionDefinition(String actionName) {
95 return subAppContext.getSubAppDescriptor().getActions().get(actionName);
96 }
97 };
98 log.debug("Delegation to action {}.", actionName);
99 executor.execute(actionName, itemBean);
100 }
101 }