- moved ICdmFormElement to campanula.compatibility
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / KeyValueViewerElement.java
1
2 package eu.etaxonomy.taxeditor.ui.element;
3
4 import java.util.Map;
5 import java.util.Map.Entry;
6
7 import org.eclipse.jface.viewers.IStructuredContentProvider;
8 import org.eclipse.jface.viewers.ITableLabelProvider;
9 import org.eclipse.jface.viewers.LabelProvider;
10 import org.eclipse.jface.viewers.TableViewer;
11 import org.eclipse.jface.viewers.TableViewerColumn;
12 import org.eclipse.jface.viewers.Viewer;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.graphics.Image;
15 import org.eclipse.swt.widgets.Label;
16 import org.eclipse.swt.widgets.Table;
17 import org.eclipse.ui.forms.widgets.TableWrapData;
18
19 import eu.etaxonomy.taxeditor.ui.section.campanula.compatibility.ICdmFormElement;
20
21
22 /**
23 * <p>KeyValueViewerElement class.</p>
24 *
25 * @author n.hoffmann
26 * @version $Id: $
27 */
28 public class KeyValueViewerElement extends AbstractCdmFormElement {
29
30 private TableViewer tableViewer;
31
32 private Label label;
33
34 /**
35 * <p>Constructor for KeyValueViewerElement.</p>
36 *
37 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
38 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
39 * @param keyHeading a {@link java.lang.String} object.
40 * @param valueHeading a {@link java.lang.String} object.
41 * @param map a {@link java.util.Map} object.
42 */
43 public KeyValueViewerElement(CdmFormFactory formFactory,
44 ICdmFormElement formElement, String keyHeading, String valueHeading, Map<Object, Object> map) {
45 super(formFactory, formElement);
46
47 label = formFactory.createLabel(getLayoutComposite(), "Meta Data");
48 label.setLayoutData(LayoutConstants.FILL(2, 1));
49 addControl(label);
50
51 tableViewer = new TableViewer(formElement.getLayoutComposite(), SWT.MULTI | SWT.H_SCROLL
52 | SWT.V_SCROLL | SWT.FULL_SELECTION);
53 addControl(tableViewer.getControl());
54
55 createColumns(tableViewer, keyHeading, valueHeading);
56
57 TableWrapData layoutData = LayoutConstants.FILL(2, 1);
58 layoutData.heightHint = 100;
59
60 tableViewer.getControl().setLayoutData(layoutData);
61
62 tableViewer.setContentProvider(new KeyValueContentProvider());
63 tableViewer.setLabelProvider(new KeyValueLabelProvider());
64
65 if(map != null){
66 setInput(map);
67 }
68
69 }
70
71 // This will create the columns for the table
72 private void createColumns(TableViewer viewer, String keyHeading, String valueHeading) {
73 Table table = viewer.getTable();
74 String[] titles = {keyHeading, valueHeading};
75 int[] bounds = { 100, 100};
76
77 for (int i = 0; i < titles.length; i++) {
78 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
79 column.getColumn().setText(titles[i]);
80 column.getColumn().setWidth(bounds[i]);
81 column.getColumn().setResizable(true);
82 column.getColumn().setMoveable(true);
83 }
84 table.setHeaderVisible(true);
85 table.setLinesVisible(true);
86 }
87
88
89 /**
90 * <p>setInput</p>
91 *
92 * @param map a {@link java.util.Map} object.
93 */
94 public void setInput(Map<? extends Object, ? extends Object> map) {
95 tableViewer.setInput(map);
96 tableViewer.refresh();
97 }
98
99 private class KeyValueContentProvider implements IStructuredContentProvider{
100
101 public Object[] getElements(Object inputElement) {
102 if(inputElement instanceof Map){
103 return ((Map) inputElement).entrySet().toArray();
104 }
105 return null;
106 }
107
108 public void dispose() {}
109
110 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
111
112 }
113
114 private class KeyValueLabelProvider extends LabelProvider implements ITableLabelProvider{
115
116 public Image getColumnImage(Object element, int columnIndex) {
117 return null;
118 }
119
120 public String getColumnText(Object element, int columnIndex) {
121 if(element instanceof Entry){
122
123 Entry entry = (Entry) element;
124
125 switch(columnIndex){
126 case 0:
127 return entry.getKey().toString();
128 case 1:
129 return entry.getValue().toString();
130 }
131 }
132 return element.toString();
133 }
134 }
135 }