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.RuntimeRepositoryException;
37 import info.magnolia.jcr.util.NodeNameHelper;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.action.ActionDefinition;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.contentapp.browser.context.ValueContext;
42
43 import java.util.stream.Collectors;
44
45 import javax.inject.Inject;
46 import javax.jcr.Item;
47 import javax.jcr.RepositoryException;
48
49 import lombok.AccessLevel;
50 import lombok.Getter;
51
52
53
54
55
56
57 @Getter(AccessLevel.PROTECTED)
58 public abstract class AbstractJcrAction<T extends Item, D extends ActionDefinition> extends AbstractAction<D> {
59
60 private final NodeNameHelper nodeNameHelper;
61 private final ValueContext<T> valueContext;
62
63 @Inject
64 public AbstractJcrAction(D definition, ValueContext<T> valueContext, NodeNameHelper nodeNameHelper) {
65 super(definition);
66 this.valueContext = valueContext;
67 this.nodeNameHelper = nodeNameHelper;
68 }
69
70 @Override
71 public void execute() throws ActionExecutionException {
72 valueContext.set(valueContext.get()
73 .map(this::map)
74 .collect(Collectors.toSet())
75 );
76 }
77
78 protected abstract T process(T node) throws RepositoryException;
79
80 protected T map(T node) {
81 try {
82 return process(node);
83 } catch (RepositoryException e) {
84 throw new RuntimeRepositoryException(e);
85 }
86 }
87
88 }