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.workbench.column;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.ui.workbench.column.definition.StatusColumnDefinition;
39
40 import java.security.AccessControlException;
41
42 import javax.inject.Inject;
43 import javax.jcr.Item;
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46 import javax.jcr.Session;
47
48 import com.vaadin.v7.ui.Table;
49
50
51
52
53
54 public class StatusColumnFormatter extends AbstractColumnFormatter<StatusColumnDefinition> {
55
56 protected final SimpleTranslator i18n;
57
58 @Inject
59 public StatusColumnFormatter(StatusColumnDefinition definition, SimpleTranslator i18n) {
60 super(definition);
61 this.i18n = i18n;
62 }
63
64 @Override
65 public Object generateCell(Table source, Object itemId, Object columnId) {
66
67 final Item jcrItem = getJcrItem(source, itemId);
68 if (jcrItem != null && jcrItem.isNode()) {
69 Node node = (Node) jcrItem;
70
71 String activationStatus = "";
72 ActivationStatus activationType;
73 String activationStatusMessage = "";
74 String permissionStatus = "";
75
76
77 if (definition.isActivation()) {
78 Integer status;
79 try {
80 status = NodeTypes.Activatable.getActivationStatus(node);
81 } catch (RepositoryException e) {
82 status = NodeTypes.Activatable.ACTIVATION_STATUS_NOT_ACTIVATED;
83 }
84
85 switch (status) {
86 case NodeTypes.Activatable.ACTIVATION_STATUS_MODIFIED:
87 activationType = ActivationStatus.MODIFIED;
88 activationStatusMessage = i18n.translate("activation-status.columns.modified");
89 break;
90 case NodeTypes.Activatable.ACTIVATION_STATUS_ACTIVATED:
91 activationType = ActivationStatus.ACTIVATED;
92 activationStatusMessage = i18n.translate("activation-status.columns.activated");
93 break;
94 default:
95 activationType = ActivationStatus.NOT_ACTIVATED;
96 activationStatusMessage = i18n.translate("activation-status.columns.not-activated");
97 }
98 activationStatus = "<span class=\"" + activationType.getStyleName() + "\" title=\"" + activationStatusMessage + "\"></span>";
99 activationStatus = activationStatus + "<span class=\"hidden-for-aria\">" + activationStatusMessage + "</span>";
100 }
101
102
103 if (definition.isPermissions()) {
104 try {
105 node.getSession().checkPermission(node.getPath(), Session.ACTION_ADD_NODE + "," + Session.ACTION_REMOVE + "," + Session.ACTION_SET_PROPERTY);
106 } catch (AccessControlException e) {
107 permissionStatus = "<span class=\"icon-read-only\"></span>";
108 } catch (RepositoryException e) {
109 throw new RuntimeException("Could not access the JCR permissions for the following node identifier " + itemId, e);
110 }
111 }
112 return activationStatus + permissionStatus;
113 }
114 return null;
115 }
116
117
118
119
120 public enum ActivationStatus {
121
122 ACTIVATED("icon-status-green", "color-green"),
123 MODIFIED("icon-status-orange", "color-yellow"),
124 NOT_ACTIVATED("icon-status-red", "color-red");
125
126 private final String baseStyleName = "activation-status";
127 private String icon;
128 private String color;
129
130 ActivationStatus(String icon, String color) {
131 this.icon = icon;
132 this.color = color;
133 }
134
135 public String getStyleName() {
136 return baseStyleName + " " + icon + " " + color;
137 }
138
139 public String getBaseStyleName() {
140 return baseStyleName;
141 }
142
143 public String getIcon() {
144 return icon;
145 }
146
147 public String getColor() {
148 return color;
149 }
150 }
151 }