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;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
39 import info.magnolia.ui.admincentral.dialog.action.SaveDialogAction;
40 import info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.app.SubAppContext;
43 import info.magnolia.ui.api.event.AdmincentralEventBus;
44 import info.magnolia.ui.api.event.ContentChangedEvent;
45 import info.magnolia.ui.dialog.DialogPresenter;
46 import info.magnolia.ui.dialog.callback.DefaultEditorCallback;
47 import info.magnolia.ui.dialog.formdialog.FormDialogPresenter;
48 import info.magnolia.ui.dialog.formdialog.FormDialogPresenterFactory;
49 import info.magnolia.ui.form.EditorCallback;
50 import info.magnolia.ui.form.EditorValidator;
51 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
52 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
53
54 import javax.inject.Inject;
55 import javax.inject.Named;
56 import javax.jcr.Node;
57 import javax.jcr.RepositoryException;
58
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
61
62
63
64
65 public class CreatePageAction extends SaveDialogAction {
66
67 private static final Logger log = LoggerFactory.getLogger(CreatePageAction.class);
68
69 private final FormDialogPresenterFactory dialogPresenterFactory;
70 private final SubAppContext subAppContext;
71 private final TemplateDefinitionRegistry templateDefinitionRegistry;
72 private final EventBus eventBus;
73 private final ContentConnector contentConnector;
74
75 @Inject
76 public CreatePageAction(SaveDialogActionDefinition definition, JcrNodeAdapter item, EditorValidator validator, EditorCallback callback, FormDialogPresenterFactory dialogPresenterFactory, SubAppContext subAppContext, TemplateDefinitionRegistry templateDefinitionRegistry, @Named(AdmincentralEventBus.NAME) final EventBus eventBus, ContentConnector contentConnector) {
77 super(definition, item, validator, callback);
78 this.dialogPresenterFactory = dialogPresenterFactory;
79 this.subAppContext = subAppContext;
80 this.templateDefinitionRegistry = templateDefinitionRegistry;
81 this.eventBus = eventBus;
82 this.contentConnector = contentConnector;
83 }
84
85 @Override
86 public void execute() throws ActionExecutionException {
87 validator.showValidation(true);
88
89 if (validator.isValid()) {
90 final JcrNodeAdapter itemChanged = (JcrNodeAdapter) item;
91 try {
92 final String dialogId = templateDefinitionRegistry.getProvider((String) item.getItemProperty(NodeTypes.Renderable.TEMPLATE).getValue()).get().getDialog();
93 if (dialogId != null) {
94 callback.onSuccess(getDefinition().getName());
95 final FormDialogPresenter formDialogPresenter = dialogPresenterFactory.createFormDialogPresenter(dialogId);
96 formDialogPresenter.start(item, dialogId, subAppContext, createDialogCallback(formDialogPresenter));
97 } else {
98 Node node = itemChanged.applyChanges();
99 setNodeName(node, itemChanged);
100 node.getSession().save();
101 callback.onSuccess(getDefinition().getName());
102 }
103 } catch (RepositoryException e) {
104 throw new ActionExecutionException(e);
105 }
106 } else {
107 log.info("Validation error(s) occurred. No save performed.");
108 }
109 }
110
111 private EditorCallback createDialogCallback(final DialogPresenter formDialogPresenter) {
112 return new DefaultEditorCallback(formDialogPresenter) {
113 @Override
114 public void onSuccess(String actionName) {
115 eventBus.fireEvent(new ContentChangedEvent(contentConnector.getItemId(item), true));
116 super.onSuccess(actionName);
117 }
118 };
119 }
120
121
122
123
124
125 @Deprecated
126 protected EditorCallback createDialogCallback(final JcrNodeAdapter itemChanged, final DialogPresenter formDialogPresenter) {
127 return createDialogCallback(formDialogPresenter);
128 }
129
130
131
132
133 public static class Definition extends SaveDialogActionDefinition {
134 public Definition() {
135 setImplementationClass(CreatePageAction.class);
136 }
137 }
138 }