package com.ibm.nmon.gui.analysis;
import java.util.List;
import com.ibm.nmon.gui.main.NMONVisualizerGui;
import com.ibm.nmon.gui.table.ChoosableColumnTableModel;
import com.ibm.nmon.analysis.AnalysisSetListener;
import com.ibm.nmon.analysis.AnalysisSet;
import com.ibm.nmon.data.DataSetListener;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.DataType;
/**
* Base table model that maps a row number to a measurement in an AnalysisSet. Updates to the model
* are handled as an AnalysisSetListener.
*/
public abstract class AnalysisSetTableModel extends ChoosableColumnTableModel implements DataSetListener,
AnalysisSetListener {
private static final long serialVersionUID = -8898709588877341715L;
protected final NMONVisualizerGui gui;
protected final AnalysisSet analysisSet;
protected final List<String> keys = new java.util.LinkedList<String>();
protected AnalysisSetTableModel(NMONVisualizerGui gui, AnalysisSet analysisSet) {
super();
this.gui = gui;
this.analysisSet = analysisSet;
gui.addDataSetListener(this);
analysisSet.addListener(this);
}
public String getKey(int index) {
return keys.get(index);
}
@Override
public int getRowCount() {
return keys.size();
}
@Override
public final void analysisAdded(DataType type) {
int startIdx = keys.size();
for (String field : type.getFields()) {
keys.add(type.getKey(field));
}
fireTableRowsInserted(startIdx, keys.size() - 1);
}
@Override
public final void analysisAdded(DataType type, String field) {
int startIdx = keys.size();
keys.add(type.getKey(field));
fireTableRowsInserted(startIdx, startIdx);
}
@Override
public final void analysisRemoved(DataType type) {
for (String field : type.getFields()) {
analysisRemoved(type, field);
}
}
@Override
public final void analysisRemoved(DataType type, String field) {
keys.remove(type.getKey(field));
// may be inefficient since updates are called on each row
fireTableDataChanged();
}
@Override
public final void analysisCleared() {
keys.clear();
fireTableDataChanged();
}
@Override
public void dataAdded(DataSet data) {
fireTableDataChanged();
}
@Override
public void dataRemoved(DataSet data) {
fireTableDataChanged();
}
@Override
public void dataChanged(DataSet data) {
fireTableDataChanged();
}
@Override
public void dataCleared() {
keys.clear();
fireTableDataChanged();
}
}