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.vaadin.grid;
35
36 import java.lang.reflect.Field;
37 import java.util.Collection;
38 import java.util.Map;
39
40 import org.apache.commons.lang.StringEscapeUtils;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44 import com.vaadin.data.Container;
45 import com.vaadin.data.Property;
46 import com.vaadin.data.Validator;
47 import com.vaadin.shared.ui.treetable.TreeTableState;
48 import com.vaadin.ui.TreeTable;
49
50
51
52
53 public class MagnoliaTreeTable extends TreeTable {
54
55 private static Logger log = LoggerFactory.getLogger(MagnoliaTreeTable.class);
56
57 public MagnoliaTreeTable() {
58 addStyleName("v-magnolia-table");
59 setCacheRate(4);
60 }
61
62
63
64
65
66
67 @Override
68 public int indexOfId(Object itemId) {
69 return super.indexOfId(itemId);
70 }
71
72 @Override
73 protected String formatPropertyValue(Object rowId, Object colId, Property<?> property) {
74 String result = super.formatPropertyValue(rowId, colId, property);
75 return StringEscapeUtils.escapeHtml(result);
76 }
77
78 @Override
79 public void changeVariables(Object source, Map<String, Object> variables) {
80 super.changeVariables(source, variables);
81 if (variables.containsKey("selectAll")) {
82 boolean selectAll = (Boolean) variables.get("selectAll");
83 if (selectAll) {
84 Collection<?> ids = getItemIds();
85 for (final Object id : ids) {
86 select(id);
87 }
88 } else {
89 setValue(null);
90 }
91 }
92
93 if (variables.containsKey("toggleSelection")) {
94 boolean selected = (Boolean) variables.get("toggleSelection");
95 String key = String.valueOf(variables.get("toggledRowId"));
96 final Object id = itemIdMapper.get(key);
97 if (selected) {
98 select(id);
99 } else {
100 unselect(id);
101 }
102 }
103 }
104
105
106
107
108
109 @Override
110 protected TreeTableState getState() {
111 return (TreeTableState) getState(false);
112 }
113
114
115
116
117 @Override
118 public Collection<Validator> getValidators() {
119 return null;
120 }
121
122 @Override
123 public void setContainerDataSource(Container newDataSource) {
124 super.setContainerDataSource(newDataSource);
125
126
127 try {
128 Field f = TreeTable.class.getDeclaredField("containerSupportsPartialUpdates");
129 f.setAccessible(true);
130 f.setBoolean(this, true);
131 } catch (Exception e) {
132 log.warn("Could not enable partial-updates in tree.", e);
133 }
134 }
135 }