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.resources.app.action;
35
36 import info.magnolia.resourceloader.Resource;
37 import info.magnolia.resourceloader.ResourceOrigin;
38 import info.magnolia.resources.app.data.ResourceHelper;
39 import info.magnolia.ui.CloseHandler;
40 import info.magnolia.ui.ValueContext;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.contentapp.Datasource;
43 import info.magnolia.ui.contentapp.action.CloseAction;
44 import info.magnolia.ui.editor.FormView;
45 import info.magnolia.ui.editor.JcrBinaryHelper;
46 import info.magnolia.ui.observation.DatasourceObservation;
47
48 import javax.jcr.Node;
49
50
51
52
53
54 public abstract class AbstractAddResourceAction extends CloseAction<AddResourceActionDefinition> implements ResourceHelper, JcrBinaryHelper {
55
56 private final ValueContext<Resource> valueContext;
57 private final FormView<Resource> form;
58 private final Datasource<Resource> datasource;
59 private final DatasourceObservation.Manual datasourceObservation;
60 private final ResourceOrigin resourceOrigin;
61
62 public AbstractAddResourceAction(AddResourceActionDefinition definition, CloseHandler closeHandler,
63 ValueContext<Resource> valueContext, FormView<Resource> form,
64 Datasource<Resource> datasource,
65 DatasourceObservation.Manual datasourceObservation,
66 ResourceOrigin resourceOrigin) {
67 super(definition, closeHandler);
68 this.form = form;
69 this.valueContext = valueContext;
70 this.datasource = datasource;
71 this.datasourceObservation = datasourceObservation;
72 this.resourceOrigin = resourceOrigin;
73 }
74
75 @Override
76 public void execute() throws ActionExecutionException {
77 Resource selectedResource = valueContext.getSingle().orElse(resourceOrigin.getRoot());
78 Node rootNode = getJcrNode(selectedResource.getOrigin().getRoot()).orElseThrow(() -> new IllegalStateException("Can't " +
79 "retrieve root node from " + selectedResource));
80
81 addResource(selectedResource, rootNode);
82
83 datasourceObservation.trigger();
84 super.execute();
85 }
86
87
88
89
90
91
92
93 protected abstract void addResource(Resource parent, Node rootNode);
94 }