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.cms.core.version.VersionManager;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.location.LocationController;
40 import info.magnolia.ui.contentapp.detail.DetailLocation;
41 import info.magnolia.ui.contentapp.detail.DetailView;
42 import info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter;
43
44 import javax.inject.Inject;
45 import javax.jcr.RepositoryException;
46 import javax.jcr.version.Version;
47 import javax.jcr.version.VersionIterator;
48
49 import org.apache.commons.lang3.StringUtils;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56 public class PreviewPreviousVersionAction extends AbstractAction<PreviewPreviousVersionActionDefinition> {
57 private final Logger log = LoggerFactory.getLogger(getClass());
58 private final AbstractJcrNodeAdapter nodeItemToEdit;
59 private final LocationController locationController;
60 private final VersionManager versionManager;
61
62 @Inject
63 public PreviewPreviousVersionAction(PreviewPreviousVersionActionDefinition definition, AbstractJcrNodeAdapter nodeItemToEdit, LocationController locationController, VersionManager versionManager) {
64 super(definition);
65 this.nodeItemToEdit = nodeItemToEdit;
66 this.locationController = locationController;
67 this.versionManager = versionManager;
68 }
69
70 @Override
71 public void execute() throws ActionExecutionException {
72 try {
73 final String path = nodeItemToEdit.getJcrItem().getPath();
74 final String previousVersion = getPreviousVersion();
75 DetailLocation location = new DetailLocation("pages", "detail", DetailView.ViewType.VIEW, path, previousVersion);
76 locationController.goTo(location);
77
78 } catch (RepositoryException e) {
79 throw new ActionExecutionException("Could not execute PreviewPreviousVersionAction: ", e);
80 }
81 }
82
83
84
85
86 private String getPreviousVersion() throws RepositoryException {
87 String previousVersion = StringUtils.EMPTY;
88 VersionIterator versionIterator = versionManager.getAllVersions(nodeItemToEdit.getJcrItem());
89
90 if (versionIterator == null) {
91 return previousVersion;
92 }
93
94 while (versionIterator.hasNext()) {
95 Version version = versionIterator.nextVersion();
96 previousVersion = version.getName();
97 }
98
99 return previousVersion;
100 }
101
102 }