1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.eclipse.common.viewer;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.eclipse.jface.viewers.CellEditor;
22 import org.eclipse.jface.viewers.ICellModifier;
23 import org.eclipse.jface.viewers.ITableLabelProvider;
24 import org.eclipse.jface.viewers.LabelProvider;
25 import org.eclipse.jface.viewers.TableViewer;
26 import org.eclipse.swt.graphics.Image;
27 import org.eclipse.swt.widgets.Item;
28 import org.seasar.framework.util.ArrayMap;
29
30
31
32
33
34 public class TableProvider extends LabelProvider implements
35 ITableLabelProvider, ICellModifier {
36
37 private ArrayMap columnDescs;
38
39 private TableViewer viewer;
40
41 public TableProvider(TableViewer viewer, ColumnDescriptor[] cds) {
42 this.viewer = viewer;
43 this.columnDescs = new ArrayMap(cds.length);
44 List<String> keys = new ArrayList<String>(cds.length);
45 List<CellEditor> editors = new ArrayList<CellEditor>(cds.length);
46 for (ColumnDescriptor cd : cds) {
47 String name = cd.getName();
48 if (columnDescs.containsKey(name)) {
49 name = name + "@" + System.identityHashCode(cd);
50 }
51 this.columnDescs.put(name, cd);
52 keys.add(name);
53 editors.add(cd.getCellEditor());
54 }
55 this.viewer.setColumnProperties(keys.toArray(new String[keys
56 .size()]));
57 this.viewer.setCellEditors(editors
58 .toArray(new CellEditor[editors.size()]));
59 this.viewer.setCellModifier(this);
60 }
61
62 protected ColumnDescriptor getDescriptor(String name) {
63 return (ColumnDescriptor) this.columnDescs.get(name);
64 }
65
66 protected ColumnDescriptor getDescriptor(int index) {
67 return (ColumnDescriptor) this.columnDescs.get(index);
68 }
69
70
71
72
73
74
75
76 public Image getColumnImage(Object element, int columnIndex) {
77 ColumnDescriptor cd = getDescriptor(columnIndex);
78 return cd != null ? cd.getImage(element) : null;
79 }
80
81
82
83
84
85
86
87 public String getColumnText(Object element, int columnIndex) {
88 ColumnDescriptor cd = getDescriptor(columnIndex);
89 return cd != null ? cd.getText(element) : "";
90 }
91
92
93
94
95
96
97
98 public boolean canModify(Object element, String property) {
99 ColumnDescriptor cd = getDescriptor(property);
100 return cd != null ? cd.canModify() : false;
101 }
102
103
104
105
106
107
108
109 public Object getValue(Object element, String property) {
110 ColumnDescriptor cd = getDescriptor(property);
111 return cd != null ? cd.getValue(element) : null;
112 }
113
114
115
116
117
118
119
120 public void modify(Object element, String property, Object value) {
121 if (element instanceof Item) {
122 element = ((Item) element).getData();
123 }
124 ColumnDescriptor cd = getDescriptor(property);
125 if (cd != null) {
126 cd.setValue(element, value);
127 this.viewer.update(element, new String[] { property });
128 }
129 }
130 }