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.ui.dialog.actions;
35
36 import info.magnolia.config.registry.Registry;
37 import info.magnolia.context.Context;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.contentapp.browser.context.ValueContext;
41 import info.magnolia.ui.dialog.DialogDefinition;
42 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
43 import info.magnolia.ui.dialog.DialogHelper;
44 import info.magnolia.ui.dialog.FormDialogDefinition;
45 import info.magnolia.ui.field.EditorPropertyDefinition;
46 import info.magnolia.ui.form.LocaleContext;
47 import info.magnolia.ui.framework.UiFrameworkView;
48 import info.magnolia.ui.framework.databinding.view.EditorView;
49
50 import java.util.stream.Collectors;
51
52 import javax.inject.Inject;
53
54
55
56
57 public class OpenDialogAction<T> extends AbstractAction<OpenDialogActionDefinition> {
58
59 private final UiFrameworkView parentView;
60 private final DialogDefinitionRegistry dialogDefinitionRegistry;
61 private final ValueContext<T> valueContext;
62 private final LocaleContext localeContext;
63 private final Context mgnlContext;
64
65 @Inject
66 public OpenDialogAction(OpenDialogActionDefinition definition,
67 ValueContext<T> valueContext,
68 LocaleContext localeContext,
69 UiFrameworkView parentView,
70 DialogDefinitionRegistry dialogDefinitionRegistry,
71 Context mgnlContext) {
72 super(definition);
73 this.valueContext = valueContext;
74 this.localeContext = localeContext;
75 this.parentView = parentView;
76 this.dialogDefinitionRegistry = dialogDefinitionRegistry;
77 this.mgnlContext = mgnlContext;
78 }
79
80 @Override
81 public void execute() throws ActionExecutionException {
82 try {
83 DialogDefinition dialogDefinition = dialogDefinitionRegistry.getProvider(getDefinition().getDialogId()).get();
84 if (dialogDefinition instanceof FormDialogDefinition) {
85 FormDialogDefinition<T> formDialogDefinition = (FormDialogDefinition) dialogDefinition;
86 EditorView<T> form = parentView.create(formDialogDefinition.getForm());
87 valueContext.getSingle().ifPresent(form::populate);
88
89 new DialogHelper()
90 .withActions(formDialogDefinition.getActions())
91 .withLayoutDefinition(formDialogDefinition.getFooterLayout())
92 .withContent(form)
93 .withCaption(dialogDefinition.getLabel())
94 .withItems(valueContext.get().collect(Collectors.toList()))
95 .withLocaleContext(formDialogDefinition.getForm().getProperties().stream()
96 .filter(EditorPropertyDefinition::isI18n)
97 .findFirst()
98 .map(any -> localeContext)
99 .orElse(null)
100 )
101 .withUserLanguage(mgnlContext::getLocale)
102 .buildAndOpen();
103
104 } else {
105 throw new ActionExecutionException(String.format("Expected instance of %s but got %s", FormDialogDefinition.class, dialogDefinition));
106 }
107 } catch (Registry.InvalidDefinitionException | Registry.NoSuchDefinitionException e) {
108 throw new ActionExecutionException(e);
109 }
110 }
111 }