1 package org.lcsim.plugin.browser;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import javax.swing.table.AbstractTableModel;
6 import org.lcsim.event.EventHeader;
7 import org.lcsim.geometry.IDDecoder;
8
9
10
11
12
13 public abstract class CellIDTableModel extends AbstractTableModel implements EventBrowserTableModel
14 {
15 private List hits;
16 private final String[] defaultColumns;
17 private List<String> columns;
18 private IDDecoder decoder;
19
20
21 protected CellIDTableModel(String[] defaultColumns)
22 {
23 this.defaultColumns = defaultColumns;
24 }
25
26
27 public void setData(EventHeader.LCMetaData meta, List hits)
28 {
29 this.hits = hits;
30 List oldColumns = columns;
31 columns = new ArrayList<String>();
32
33 try
34 {
35 this.decoder = meta.getIDDecoder();
36 for (int i = 0; i < decoder.getFieldCount(); i++)columns.add("id: " + decoder.getIDDescription().fieldName(i));
37 for (int i = 1; i < defaultColumns.length; i++)columns.add(defaultColumns[i]);
38 } catch (Exception x)
39 {
40 System.err.println("Error accessing decoder "+x);
41 decoder = null;
42 for (int i = 0; i < defaultColumns.length; i++)columns.add(defaultColumns[i]);
43 }
44
45 if (columns.equals(oldColumns)) fireTableDataChanged();
46 else super.fireTableStructureChanged();
47 }
48
49
50 public int getColumnCount()
51 {
52 return columns.size();
53 }
54
55
56 public String getColumnName(int index)
57 {
58 return columns.get(index);
59 }
60
61
62 public int getRowCount()
63 {
64 return hits == null ? 0 : hits.size();
65 }
66
67
68 protected int getFieldCount()
69 {
70 return decoder == null ? 1 : decoder.getFieldCount();
71 }
72
73 protected IDDecoder getIDDecoder()
74 {
75 return decoder;
76 }
77
78 protected Object getHit(int row)
79 {
80 return hits.get(row);
81 }
82 }
83