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.action.browser;
35
36 import info.magnolia.jcr.util.NodeNameHelper;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.objectfactory.Components;
40 import info.magnolia.pages.app.data.NewRenderableNodeWrapper;
41 import info.magnolia.pages.app.data.RenderableNodeMetadata;
42 import info.magnolia.rendering.template.TemplateDefinition;
43 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
44 import info.magnolia.ui.CloseHandler;
45 import info.magnolia.ui.ValueContext;
46 import info.magnolia.ui.api.action.ActionExecutionException;
47 import info.magnolia.ui.contentapp.Datasource;
48 import info.magnolia.ui.contentapp.action.CommitAction;
49 import info.magnolia.ui.datasource.jcr.JcrDatasource;
50 import info.magnolia.ui.editor.FormView;
51 import info.magnolia.ui.observation.DatasourceObservation;
52
53 import javax.inject.Inject;
54 import javax.jcr.Node;
55
56 import com.machinezoo.noexception.Exceptions;
57
58
59
60
61
62
63
64
65 public class CreatePageAction extends CommitAction<Node> {
66
67 private final JcrDatasource jcrDatasource;
68 private final CloseHandler closeHandler;
69 private final NodeNameHelper nodeNameHelper;
70 private final TemplateDefinitionRegistry templateDefinitionRegistry;
71
72 @Inject
73 CreatePageAction(CreatePageActionDefinition definition,
74 FormView<Node> form,
75 ValueContext<Node> valueContext,
76 JcrDatasource jcrDatasource,
77 CloseHandler closeHandler,
78 NodeNameHelper nodeNameHelper,
79 TemplateDefinitionRegistry templateDefinitionRegistry,
80 DatasourceObservation.Manual datasourceObservation
81 ) {
82 super(definition, closeHandler, valueContext, form, (Datasource) jcrDatasource, datasourceObservation);
83 this.jcrDatasource = jcrDatasource;
84 this.closeHandler = closeHandler;
85 this.nodeNameHelper = nodeNameHelper;
86 this.templateDefinitionRegistry = templateDefinitionRegistry;
87 }
88
89
90
91
92 @Deprecated
93 public CreatePageAction(CreatePageActionDefinition definition, FormView<Node> form, ValueContext<Node> valueContext, JcrDatasource jcrDatasource, CloseHandler closeHandler, NodeNameHelper nodeNameHelper, TemplateDefinitionRegistry templateDefinitionRegistry) {
94 this(definition, form, valueContext, jcrDatasource, closeHandler, nodeNameHelper, templateDefinitionRegistry, Components.getComponent(DatasourceObservation.Manual.class));
95 }
96
97 @Override
98 public void write() {
99 Exceptions.wrap().run(() -> {
100 Node parent = getValueContext().getSingle().orElseGet(jcrDatasource::getRoot);
101
102
103 String pageName = getForm().<String>getPropertyValue("jcrName")
104 .orElseThrow(ActionExecutionException::new);
105
106
107 pageName = nodeNameHelper.getUniqueName(parent, pageName);
108
109
110 pageName = nodeNameHelper.getValidatedName(pageName);
111
112 String pageTemplate = getForm().<String>getPropertyValue(NodeTypes.Renderable.TEMPLATE)
113 .orElseThrow(ActionExecutionException::new);
114
115 TemplateDefinition templateDefinition = templateDefinitionRegistry.getProvider(pageTemplate).get();
116 String pageDialog = templateDefinition.getDialog();
117
118
119 Node page = NodeUtil.createPath(parent, pageName, NodeTypes.Page.NAME);
120
121 RenderableNodeMetadata pageMetadata = RenderableNodeMetadata.builder()
122 .nodeName(pageName)
123 .templateId(templateDefinition.getId())
124 .build();
125
126
127
128
129 page = new NewRenderableNodeWrapper(page, pageMetadata);
130
131 if (pageDialog == null) {
132 page.getSession().save();
133 }
134
135 getValueContext().set(page);
136
137
138 closeHandler.close();
139 });
140 }
141
142 @Override
143 protected FormView<Node> getForm() {
144 return (FormView<Node>) super.getForm();
145 }
146 }