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.availability;
35
36 import info.magnolia.cms.core.version.VersionManager;
37 import info.magnolia.jcr.util.SessionUtil;
38 import info.magnolia.resourceloader.Resource;
39 import info.magnolia.resourceloader.ResourceOrigin;
40 import info.magnolia.resourceloader.jcr.JcrResourceOrigin;
41 import info.magnolia.resourceloader.layered.LayeredResource;
42
43 import javax.inject.Inject;
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46 import javax.jcr.version.VersionHistory;
47
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54 public class HasVersionsRule extends AbstractResourceAvailabilityRule {
55
56 private static final Logger log = LoggerFactory.getLogger(HasVersionsRule.class);
57
58 private final VersionManager versionManager;
59
60 @Inject
61 public HasVersionsRule(ResourceOrigin origin, VersionManager versionManager) {
62 super(origin);
63 this.versionManager = versionManager;
64 }
65
66 @Override
67 protected boolean isAvailableFor(Resource itemId) {
68 LayeredResource layeredResource = (LayeredResource) itemId;
69 if (layeredResource.getFirst().getOrigin() instanceof JcrResourceOrigin) {
70 String resourcePath = layeredResource.getFirst().getPath();
71 Node node = SessionUtil.getNode(JcrResourceOrigin.RESOURCES_WORKSPACE, resourcePath);
72
73 if (node != null) {
74 try {
75 VersionHistory versionHistory = versionManager.getVersionHistory(node);
76 if (versionHistory == null || versionHistory.getAllVersions() == null) {
77 log.debug("Node [{}] doesn't have versions.", node);
78 return false;
79 }
80
81 return versionHistory.getAllVersions().getSize() > 1;
82 } catch (RepositoryException e) {
83 log.debug("Could not version item [{}]", node, e);
84 return false;
85 }
86 }
87 }
88 return false;
89 }
90 }