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.jcr.util.NodeTypes;
37 import info.magnolia.pages.app.detail.PageEditorStatus;
38 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
39 import info.magnolia.ui.CloseHandler;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.contentapp.Datasource;
42 import info.magnolia.ui.contentapp.action.CommitAction;
43 import info.magnolia.ui.contentapp.action.CommitActionDefinition;
44 import info.magnolia.ui.ValueContext;
45 import info.magnolia.ui.editor.FormView;
46 import info.magnolia.ui.observation.DatasourceObservation;
47 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
48 import info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement;
49
50 import javax.inject.Inject;
51 import javax.jcr.Node;
52
53 import com.vaadin.data.BinderValidationStatus;
54
55
56
57
58
59 public class ChangeComponentTemplateAction extends CommitAction<Node> {
60
61 private final FormView<Node> formView;
62 private final PageEditorStatus pageEditorStatus;
63 private final TemplateDefinitionRegistry templateDefinitionRegistry;
64
65 @Inject
66 public ChangeComponentTemplateAction(CommitActionDefinition definition,
67 CloseHandler closeHandler, ValueContext<Node> valueContext, FormView<Node> form,
68 PageEditorStatus pageEditorStatus, TemplateDefinitionRegistry templateDefinitionRegistry,
69 DatasourceObservation.Manual datasourceObservation,
70 Datasource<Node> datasource
71 ) {
72 super(definition, closeHandler, valueContext, form, datasource, datasourceObservation);
73 this.formView = form;
74 this.pageEditorStatus = pageEditorStatus;
75 this.templateDefinitionRegistry = templateDefinitionRegistry;
76 }
77
78 @Override
79 public void execute() throws ActionExecutionException {
80 super.execute();
81 if (formView.validate().stream().allMatch(BinderValidationStatus::isOk)) {
82 final AbstractElement selectedElement = pageEditorStatus.getSelectedElement();
83 final String template = formView.<String>getPropertyValue(NodeTypes.Renderable.TEMPLATE).orElseThrow(ActionExecutionException::new);
84 pageEditorStatus.setSelectedElement(new ComponentElement(selectedElement.getWorkspace(), selectedElement.getPath(), templateDefinitionRegistry.getProvider(template).get().getDialog()));
85 }
86 }
87 }