school/cs240/record-indexer/src/client/components/tableEntry/TableModel.java

139 lines
3.4 KiB
Java

package client.components.tableEntry;
import client.persistence.Cell;
import client.persistence.ImageState;
import client.persistence.ImageStateListener;
import javax.swing.table.AbstractTableModel;
public class TableModel extends AbstractTableModel {
private String[] columnNames;
private String[][] model;
private ImageState imageState;
private boolean quiet = false;
private boolean updating = false;
private boolean deactivated = false;
public TableModel(ImageState imageState) {
this.imageState = imageState;
this.model = this.imageState.getModel();
this.columnNames = this.imageState.getColumnNames();
this.imageState.addListener(imageStateListener);
if(!this.imageState.isHasImage()) return;
overrideTableModel();
}
private void overrideTableModel() {
String[] imageStateColumns = this.imageState.getColumnNames();
int width = imageStateColumns.length;
String[][] imageStateModel = this.imageState.getModel();
this.model = new String[imageStateModel.length][width + 1];
this.columnNames = new String[width + 1];
this.columnNames[0] = "Record Number";
// Copy Column names from image state so we can have record number
for(int i = 0; i < width; i++) {
this.columnNames[i+1] = imageStateColumns[i];
}
// Copy Model values
for(int x = 0; x < imageStateModel.length; x ++) {
// Set row number first
this.model[x][0] = Integer.toString(x + 1);
// Copy the values with the new offset
for(int i = 0; i < width; i++) {
this.model[x][i+1] = imageStateModel[x][i];
}
}
}
public void setDeactivated(boolean deactivated) {
this.deactivated = deactivated;
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getRowCount() {
return model.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return model[rowIndex][columnIndex];
}
@Override
public void setValueAt(Object value, int row, int column) {
if(quiet || deactivated) return;
model[row][column] = (String)value;
updating = true;
Cell cell = new Cell();
cell.setField(column - 1);
// Check for record number col which is 0
if(column == 0) {
cell.setField(0);
}
cell.setRecord(row);
imageState.setValue(cell, (String)value);
updating = false;
}
private ImageStateListener imageStateListener = new ImageStateListener() {
@Override
public void valueChanged(Cell cell, String newValue) {
if(updating || deactivated) return;
model[cell.getRecord()][cell.getField() + 1] = newValue;
}
@Override
public void selectedCellChanged(Cell newSelectedCell) {
if(updating) return;
}
};
public void setValueQuiet(String newValue, int row, int column) {
if(deactivated) return;
model[row][column] = newValue;
}
public void setQuiet(boolean quiet) {
this.quiet = quiet;
}
}