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.cms.core.version.VersionInfo;
37 import info.magnolia.cms.core.version.VersionManager;
38 import info.magnolia.ui.CloseHandler;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.ValueContext;
41 import info.magnolia.ui.editor.FormView;
42
43 import java.util.Optional;
44
45 import javax.inject.Inject;
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48 import javax.jcr.version.Version;
49
50
51
52
53 public class RestoreJcrVersionAction extends CloseAction<RestoreJcrVersionActionDefinition> {
54
55 private final FormView<Node> form;
56 private final ValueContext<Node> valueContext;
57 private final VersionManager versionManager;
58
59 @Inject
60 public RestoreJcrVersionAction(RestoreJcrVersionActionDefinition definition, CloseHandler closeHandler, FormView<Node> form, ValueContext<Node> valueContext, VersionManager versionManager) {
61 super(definition, closeHandler);
62 this.form = form;
63 this.valueContext = valueContext;
64 this.versionManager = versionManager;
65 }
66
67 @Override
68 public void execute() throws ActionExecutionException {
69 Optional<String> version = getVersion();
70 if (version.isPresent()) {
71 try {
72 Node node = valueContext.getSingleOrThrow();
73 final Version versionToRestore;
74 versionToRestore = versionManager.getVersion(node, version.get());
75 versionManager.restore(node, versionToRestore, true);
76 valueContext.set(node);
77 super.execute();
78 } catch (RepositoryException e) {
79 throw new ActionExecutionException(e);
80 }
81 }
82 }
83
84 private Optional<String> getVersion() {
85 return form.<VersionInfo>getPropertyValue(getDefinition().getVersionFieldName()).map(VersionInfo::getVersionName);
86 }
87 }