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.googlesitemap.app.subapp.sitemapdetail.base;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.module.googlesitemap.bean.SiteMapEntry;
38
39 import java.util.ArrayList;
40 import java.util.List;
41
42 import com.vaadin.data.Container;
43 import com.vaadin.data.Property;
44 import com.vaadin.ui.Component;
45 import com.vaadin.ui.Table;
46
47
48
49
50
51
52 public abstract class SiteMapContentViewImpl<T extends Table, L extends SiteMapContentView.Listener> implements SiteMapContentView<L> {
53
54 private static final String[] CENTER_ALIGNED_COLUMNS = {"styleAlert", "priority", "changefreq"};
55
56 private T table;
57
58 private L listener;
59
60 private SimpleTranslator translator;
61
62 public SiteMapContentViewImpl(T table, SimpleTranslator translator) {
63 this.table = table;
64 this.translator = translator;
65 this.table.setSelectable(true);
66 this.table.setImmediate(true);
67 table.setSizeFull();
68 table.addValueChangeListener(new Property.ValueChangeListener() {
69 @Override
70 public void valueChange(Property.ValueChangeEvent event) {
71 SiteMapEntry value = (SiteMapEntry)event.getProperty().getValue();
72 listener.onEntrySelected(value);
73 }
74 });
75
76 table.setCellStyleGenerator(new Table.CellStyleGenerator() {
77 @Override
78 public String getStyle(Table source, Object itemId, Object propertyId) {
79 if ((Boolean)source.getItem(itemId).getItemProperty("styleAlert").getValue()) {
80 return "excluded";
81 }
82 return null;
83 }
84 });
85 }
86
87 public T getTable() {
88 return table;
89 }
90
91 public L getListener() {
92 return listener;
93 }
94
95 @Override
96 public void setDatasource(Container container) {
97 this.table.setContainerDataSource(container);
98 table.setVisibleColumns(getColumnIds());
99 List<String> captions = new ArrayList<String>();
100 for (String caption : getColumnCaptions()) {
101 captions.add(translator.translate(caption));
102 }
103 table.setColumnHeaders(captions.toArray(new String[captions.size()]));
104 for (String colId : CENTER_ALIGNED_COLUMNS) {
105 table.setColumnAlignment(colId, Table.Align.CENTER);
106 }
107 }
108
109 protected abstract String[] getColumnCaptions();
110
111 protected abstract String[] getColumnIds();
112
113 @Override
114 public void setListener(L listener) {
115 this.listener = listener;
116 }
117
118 @Override
119 public SiteMapEntry getValue() {
120 return (SiteMapEntry) table.getValue();
121 }
122
123 @Override
124 public Component asVaadinComponent() {
125 return table;
126 }
127 }