// uniCenta oPOS - Touch Friendly Point Of Sale // Copyright (c) 2009-2013 uniCenta & previous Openbravo POS works // http://www.unicenta.net/unicentaopos // // This file is part of uniCenta oPOS // // uniCenta oPOS 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. // // uniCenta oPOS 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 uniCenta oPOS. If not, see <http://www.gnu.org/licenses/>. package com.openbravo.pos.panels; import com.openbravo.basic.BasicException; import com.openbravo.data.loader.DataField; import com.openbravo.data.loader.DataRead; import com.openbravo.data.loader.Datas; import java.sql.Types; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; /** * * @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 */ 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; } } } 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); } public String getColumnString(int row) { Object [] rowvalues = (Object[]) m_aRows.get(row); // JG 16 May 2013 use StringBuilder instead of StringBuilder 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]; } }