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.detail.action;
35
36 import info.magnolia.config.registry.DefinitionProvider;
37 import info.magnolia.context.Context;
38 import info.magnolia.i18nsystem.I18nizer;
39 import info.magnolia.pages.app.detail.PageEditorStatus;
40 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
41 import info.magnolia.ui.dialog.DialogDefinition;
42 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
43 import info.magnolia.ui.dialog.actions.OpenDialogAction;
44 import info.magnolia.ui.editor.LocaleContext;
45 import info.magnolia.ui.form.definition.DefinitionConverter;
46 import info.magnolia.ui.UIComponent;
47 import info.magnolia.ui.ValueContext;
48 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
49
50 import java.util.Optional;
51
52 import javax.inject.Inject;
53 import javax.jcr.Node;
54
55
56
57
58
59 public class EditElementAction extends OpenDialogAction<Node> {
60
61 private final PageEditorStatus pageEditorStatus;
62
63 @Inject
64 public EditElementAction(EditElementActionDefinition definition, UIComponent parentView, LocaleContext localeContext,
65 I18NAuthoringSupport i18NAuthoringSupport, DialogDefinitionRegistry dialogDefinitionRegistry,
66 I18nizer i18nizer,
67 Context context,
68 ValueContext<Node> valueContext,
69 PageEditorStatus pageEditorStatus) {
70 super(definition, localeContext, valueContext, parentView, i18NAuthoringSupport, dialogDefinitionRegistry, i18nizer);
71 this.pageEditorStatus = pageEditorStatus;
72 }
73
74 @Override
75 protected DialogDefinition getDialogDefinition(DialogDefinitionRegistry dialogDefinitionRegistry, I18nizer i18nizer) {
76
77 Optional<DialogDefinition> dialogDefinition = Optional.of(pageEditorStatus)
78 .map(PageEditorStatus::getSelectedElement)
79 .map(AbstractElement::getDialog)
80 .map(dialogDefinitionRegistry::getProvider)
81 .map(DefinitionProvider::get)
82 .map(i18nizer::decorate);
83
84 return dialogDefinition
85 .filter(info.magnolia.ui.dialog.definition.FormDialogDefinition.class::isInstance)
86 .map(info.magnolia.ui.dialog.definition.FormDialogDefinition.class::cast)
87 .map(DefinitionConverter.DIALOG::convert)
88 .orElse(dialogDefinition.orElse(null));
89 }
90
91 PageEditorStatus getPageEditorStatus() {
92 return pageEditorStatus;
93 }
94 }