// Chromis POS - The New Face of Open Source POS
// Copyright (c) (c) 2015-2016
// http://www.chromis.co.uk
//
// This file is part of Chromis POS
//
// Chromis POS is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Chromis POS is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Chromis POS. If not, see <http://www.gnu.org/licenses/>.
package uk.chromis.pos.panels;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import uk.chromis.basic.BasicException;
import uk.chromis.data.loader.DataField;
import uk.chromis.data.loader.DataRead;
import uk.chromis.data.loader.Datas;
/**
*
* @author adrianromero
*/
public class SQLTableModel extends AbstractTableModel {
private List m_aRows;
private DataField[] m_df;
private Datas[] m_classes;
/** Creates a new instance of SQLTableModel
* @param df */
public SQLTableModel(DataField[] df) {
m_aRows = new ArrayList();
m_df = df;
m_classes = new Datas[df.length];
for (int i = 0; i < df.length; i++) {
switch (df[i].Type) {
case Types.INTEGER:
case Types.BIGINT:
case Types.SMALLINT:
case Types.TINYINT:
m_classes[i] = Datas.INT;
break;
case Types.BIT:
case Types.BOOLEAN:
m_classes[i] = Datas.BOOLEAN;
break;
case Types.DECIMAL:
case Types.DOUBLE:
case Types.FLOAT:
case Types.REAL:
case Types.NUMERIC:
m_classes[i] = Datas.DOUBLE;
break;
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
case Types.CLOB:
m_classes[i] = Datas.STRING;
break;
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
m_classes[i] = Datas.TIMESTAMP;
break;
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
case Types.BLOB:
m_classes[i] = Datas.BYTES;
break;
case Types.ARRAY:
case Types.DATALINK:
case Types.DISTINCT:
case Types.JAVA_OBJECT:
case Types.NULL:
case Types.OTHER:
case Types.REF:
case Types.STRUCT:
default:
m_classes[i] = Datas.OBJECT;
break;
}
}
}
/**
*
* @param dr
* @throws BasicException
*/
public void addRow(DataRead dr) throws BasicException {
Object[] m_values = new Object[m_classes.length];
for (int i = 0; i < m_classes.length; i++) {
m_values[i] = m_classes[i].getValue(dr, i + 1);
}
m_aRows.add(m_values);
}
/**
*
* @param row
* @return
*/
public String getColumnString(int row) {
Object [] rowvalues = (Object[]) m_aRows.get(row);
StringBuilder s = new StringBuilder();
for(int i = 0; i < rowvalues.length; i++) {
if (i > 0) {
s.append(", ");
}
s.append(m_classes[i].toString(rowvalues[i]));
}
return s.toString();
}
@Override
public Class getColumnClass(int columnIndex) {
return m_classes[columnIndex].getClassValue();
}
@Override
public String getColumnName(int columnIndex) {
return m_df[columnIndex].Name;
}
@Override
public int getRowCount() {
return m_aRows.size();
}
@Override
public int getColumnCount() {
return m_df.length;
}
@Override
public Object getValueAt(int row, int column) {
Object [] rowvalues = (Object[]) m_aRows.get(row);
return rowvalues[column];
}
}