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.contentapp.action;
35
36 import info.magnolia.jcr.util.NodeNameHelper;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionDefinition;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.contentapp.browser.context.ValueContext;
41 import info.magnolia.ui.framework.datasource.components.SelectedItems;
42
43 import java.util.ArrayList;
44 import java.util.List;
45 import java.util.function.Consumer;
46 import java.util.stream.Stream;
47
48 import javax.inject.Inject;
49 import javax.jcr.Node;
50 import javax.jcr.RepositoryException;
51
52 import lombok.AccessLevel;
53 import lombok.Getter;
54 import lombok.SneakyThrows;
55
56
57
58
59
60 @Getter(AccessLevel.PROTECTED)
61 public abstract class AbstractJcrAction<D extends ActionDefinition> extends AbstractAction<D> {
62
63 private final NodeNameHelper nodeNameHelper;
64 private final ValueContext<Node> valueContext;
65
66 @Inject
67 public AbstractJcrAction(D definition, ValueContext<Node> valueContext, NodeNameHelper nodeNameHelper) {
68 super(definition);
69 this.valueContext = valueContext;
70 this.nodeNameHelper = nodeNameHelper;
71 }
72
73 @Override
74 public void execute() throws ActionExecutionException {
75 List<Node> processedNodes = new ArrayList<>();
76
77 valueContext.current().value().map(SelectedItems::stream).orElse(Stream.empty()).forEach(new Consumer<Node>() {
78 @SneakyThrows(RepositoryException.class)
79 @Override
80 public void accept(Node node) {
81 processedNodes.add(process(node));
82 }
83 });
84
85 valueContext.current().set(SelectedItems.of(processedNodes));
86 }
87
88 protected abstract Node process(Node node) throws RepositoryException;
89 }