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.framework.availability;
35
36 import info.magnolia.jcr.util.NodeUtil;
37 import info.magnolia.jcr.util.SessionUtil;
38 import info.magnolia.objectfactory.Components;
39 import info.magnolia.repository.RepositoryConstants;
40 import info.magnolia.repository.RepositoryManager;
41 import info.magnolia.ui.api.availability.AbstractAvailabilityRule;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrItemId;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrPropertyItemId;
44 import info.magnolia.ui.vaadin.integration.jcr.VersionedJcrItemId;
45
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48 import javax.jcr.version.Version;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56 public class IsNotVersionedRule extends AbstractAvailabilityRule {
57
58 private static final Logger log = LoggerFactory.getLogger(IsDeletedRule.class);
59
60 @Override
61 protected boolean isAvailableForItem(Object itemId) {
62 if (itemId instanceof VersionedJcrItemId) {
63 return false;
64 }
65 if (itemId instanceof JcrItemId && !(itemId instanceof JcrPropertyItemId)) {
66 JcrItemId jcrItemId = (JcrItemId) itemId;
67 Node node = SessionUtil.getNodeByIdentifier(jcrItemId.getWorkspace(), jcrItemId.getUuid());
68 if (node != null) {
69 try {
70 if (NodeUtil.unwrap(node) instanceof Version) {
71 return false;
72 }
73
74 String workspace = node.getSession().getWorkspace().getName();
75 String repositoryId = Components.getComponent(RepositoryManager.class).getRepositoryNameForWorkspace(node.getSession().getWorkspace().getName());
76 if ((repositoryId + "-" + RepositoryConstants.VERSION_STORE).equals(workspace)) {
77 return false;
78 }
79 } catch (RepositoryException e) {
80 log.warn("Error evaluating availability for node [{}], returning false: {}", NodeUtil.getPathIfPossible(node), e);
81 }
82 }
83 }
84
85 return true;
86 }
87
88 }