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.resourceloader.Resource;
38 import info.magnolia.ui.api.availability.AvailabilityDefinition;
39 import info.magnolia.ui.api.availability.AvailabilityRuleDefinition;
40
41 import javax.inject.Inject;
42 import javax.jcr.Node;
43 import javax.jcr.RepositoryException;
44 import javax.jcr.version.VersionHistory;
45
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49
50
51
52 public class HasVersionsRule extends AbstractResourceAvailabilityRule {
53
54 private static final Logger log = LoggerFactory.getLogger(HasVersionsRule.class);
55
56 private final VersionManager versionManager;
57
58 @Inject
59 public HasVersionsRule(AvailabilityDefinition availabilityDefinition, AvailabilityRuleDefinition ruleDefinition, VersionManager versionManager) {
60 super(availabilityDefinition, ruleDefinition);
61 this.versionManager = versionManager;
62 }
63
64 @Override
65 protected boolean isAvailableFor(Resource resource) {
66 return getJcrNode(resource)
67 .map(this::hasVersion)
68 .orElse(false);
69 }
70
71 private boolean hasVersion(Node node) {
72 try {
73 VersionHistory versionHistory = versionManager.getVersionHistory(node);
74 if (versionHistory == null || versionHistory.getAllVersions() == null) {
75 log.debug("Node [{}] doesn't have versions.", node);
76 return false;
77 }
78
79 return versionHistory.getAllVersions().getSize() > 1;
80 } catch (RepositoryException e) {
81 log.debug("Could not version item [{}]", node, e);
82 return false;
83 }
84 }
85 }