package zeta.util;
import java.text.Format;
import java.util.ArrayList;
import java.util.List;
public class Table {
public static final int LEFT = -1;
public static final int CENTER = 0;
public static final int RIGHT = 1;
public Table(int columns) {
columnNames = new String[columns];
format = new Format[columns];
alignment = new int[columns];
rows = new ArrayList();
types = new int[columns];
precision = new int[columns];
scale = new int[columns];
}
public Table(Table table, int rows) {
columnNames = table.columnNames;
format = table.format;
alignment = table.alignment;
this.rows = new ArrayList(rows);
types = table.types;
precision = table.precision;
scale = table.scale;
int l = Math.min((table != null)? table.rows.size() : 0, rows);
for (int i = 0; i < l; ++i) {
this.rows.add(table.rows.get(i));
}
}
public void clear() {
rows.clear();
}
public int getHiddenColumnCount() {
return hiddenColumnCount;
}
public void setHiddenColumnCount(int hiddenColumnCount) {
this.hiddenColumnCount = hiddenColumnCount;
}
public int getColumnCount() {
return columnNames.length-hiddenColumnCount;
}
public int getRowCount() {
return rows.size();
}
public String getColumnName(int index) {
return columnNames[index];
}
public void setColumnName(int index, String name) {
columnNames[index] = name;
}
public int getAlignment(int index) {
return alignment[index];
}
public void setAlignment(int index, int alignment) {
this.alignment[index] = alignment;
}
public int getType(int index) {
return types[index];
}
public void setType(int index, int type) {
types[index] = type;
}
public int getPrecision(int index) {
return precision[index];
}
public void setPrecision(int index, int precision) {
this.precision[index] = precision;
}
public int getScale(int index) {
return scale[index];
}
public void setScale(int index, int scale) {
this.scale[index] = scale;
}
public Format getFormat(int index) {
return format[index];
}
public void setFormat(int index, Format format) {
this.format[index] = format;
}
public void addRow() {
rows.add(new Object[columnNames.length]);
}
public void addRow(int row) {
rows.add(row, new Object[columnNames.length]);
}
public Object[] getRow(int row) {
return (Object[])rows.get(row);
}
public Object getValue(int row, int col) {
return ((Object[])rows.get(row))[col];
}
public void setValue(int row, int col, Object value) {
((Object[])rows.get(row))[col] = value;
}
public int indexOfRow(Object o, int searchColumn) {
return indexOfRow(o, searchColumn, 0);
}
public int indexOfRow(Object o, int searchColumn, int startIdx) {
for (int l = rows.size(); startIdx < l; ++startIdx) {
Object[] row = (Object[])rows.get(startIdx);
if (o.equals(row[searchColumn])) {
return startIdx;
}
}
return -1;
}
public int indexOfRowIgnoreCase(String o, int searchColumn) {
return indexOfRowIgnoreCase(o, searchColumn, 0);
}
public int indexOfRowIgnoreCase(String o, int searchColumn, int startIdx) {
for (int l = rows.size(); startIdx < l; ++startIdx) {
Object[] row = (Object[])rows.get(startIdx);
if (o.equalsIgnoreCase((String)row[searchColumn])) {
return startIdx;
}
}
return -1;
}
public void insertColumn(int col) {
int columns = columnNames.length+1;
String[] columnNames2 = new String[columns];
Format[] format2 = new Format[columns];
int[] alignment2 = new int[columns];
int[] types2 = new int[columns];
int[] precision2 = new int[columns];
int[] scale2 = new int[columns];
for (int i = 0; i < columns; ++i) {
if (i != col) {
int j = (i < col)? i : i-1;
columnNames2[i] = columnNames[j];
format2[i] = format[j];
alignment2[i] = alignment[j];
types2[i] = types[j];
precision2[i] = precision[j];
scale2[i] = scale[j];
}
}
columnNames = columnNames2;
format = format2;
alignment = alignment2;
types = types2;
precision = precision2;
scale = scale2;
int l = rows.size();
for (int i = 0; i < l; ++i) {
Object[] o = (Object[])rows.get(i);
Object[] o2 = new Object[columns];
for (int j = 0; j < columns; ++j) {
if (j != col) {
o2[j] = o[(j < col)? j : j-1];
}
}
rows.set(i, o2);
}
}
private String[] columnNames;
private Format[] format;
private int[] alignment;
private List rows;
private int[] types;
private int[] precision;
private int[] scale;
private int hiddenColumnCount;
}