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.module.forum.app.availability;
35
36 import info.magnolia.jcr.util.NodeUtil;
37 import info.magnolia.jcr.util.SessionUtil;
38 import info.magnolia.module.forum.DefaultForumManager;
39 import info.magnolia.ui.api.availability.AvailabilityRule;
40 import info.magnolia.ui.vaadin.integration.jcr.JcrItemId;
41
42 import java.util.Collection;
43
44 import javax.jcr.Node;
45 import javax.jcr.PathNotFoundException;
46 import javax.jcr.Property;
47 import javax.jcr.RepositoryException;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52
53
54
55 public class ValidatableRule implements AvailabilityRule {
56
57 private static final Logger log = LoggerFactory.getLogger(InvalidatableRule.class);
58
59 @Override
60 public boolean isAvailable(Collection<?> itemIds) {
61 if (itemIds.size() > 0 && itemIds.iterator().hasNext() && itemIds.iterator().next() instanceof JcrItemId) {
62 JcrItemId jcrItemId = (JcrItemId) itemIds.iterator().next();
63 Node node = SessionUtil.getNodeByIdentifier(jcrItemId.getWorkspace(), jcrItemId.getUuid());
64 if (node != null) {
65 try {
66 if (NodeUtil.isNodeType(node, DefaultForumManager.MESSAGE_NODETYPE)) {
67 return allow(node.getProperty(DefaultForumManager.VALIDATED_PROPERTY));
68 }
69 } catch(PathNotFoundException paex){
70
71 return true;
72 }catch (RepositoryException e) {
73 log.warn("Error evaluating availability for node [{}], returning false: {}", NodeUtil.getPathIfPossible(node), e.getMessage());
74 }
75 }
76 }
77 return false;
78 }
79
80
81 protected boolean allow(Property property) throws RepositoryException {
82 if (property == null) {
83 return true;
84 }
85 return "false".equals(property.getString());
86 }
87
88 }