package com.dwave.util; import java.util.Vector; import java.util.Hashtable; /** * @author Tim Duty * @author Michael Coury * @version 1.0, 05/16/2001 */ public class ObjectTable implements java.io.Serializable { Object[] indexColumn; Vector dataStorage, // possibly use LinkedList instead..... columnTitleList, columnKeyList; Hashtable keyTable; // maybe use a HashMap instead..... String tableTitle = "", indexTitle = "Index"; /** * Create a new Table */ public ObjectTable() { this(100); } /** * Create a new Table */ public ObjectTable(int aNum) { dataStorage = new Vector(aNum, 1); columnTitleList = new Vector(aNum, 1); columnKeyList = new Vector(1, 1); keyTable = new Hashtable(aNum, .75F); } /** * Add a column to the table */ public void addColumn(String key, Object[] column, String title) { keyTable.put(key, new Integer(dataStorage.size())); dataStorage.addElement(column); columnTitleList.addElement(title); columnKeyList.addElement(key); } /** * Add a column to the table */ public void addColumn(String key, Object[] column) { keyTable.put(key, new Integer(dataStorage.size())); dataStorage.addElement(column); columnTitleList.addElement(""); columnKeyList.addElement(key); } /** * retrieve a column by column number */ public Object[] columnAt(int index){ return (Object[])dataStorage.elementAt(index); } /** * Retrieve a columns key by column number */ public String columnKeyAt(int index){ return (String) columnKeyList.elementAt(index); } /** * Check if the Table contains a column with this key */ public boolean containsColumn(String key){ return keyTable.containsKey(key); } /** * Retrieve a column by it's key */ public Object[] getColumn(String key){ int i = ((Integer)keyTable.get(key)).intValue(); if(i >= 0) return (Object[])dataStorage.get(i); else return null; } /** * Retrieve all column keys as an Object[] */ public Object[] getColumnKeysAsArray(){ int keylen = columnKeyList.size(); Object[] keys = new Object[keylen]; for(int i = 0; i < keylen; i++) keys[i] = columnKeyList.elementAt(i); return keys; } /** * Retrieve all column keys, including the index, as an Object[] */ public Object[] getColumnKeysAsArray(boolean withIndex){ int keylen = columnKeyList.size()+1; Object[] keys = new Object[keylen]; keys[0] = "Index"; for(int i = 0; i < keylen - 1; i++) keys[i + 1]= columnKeyList.elementAt(i); return keys; } /** * Retrieve all column keys as a Vector */ public Vector getColumnKeysAsVector(){ Vector keys = new Vector(); keys.addElement("Index"); for(int i = 0; i < columnKeyList.size(); i++) keys.addElement(columnKeyList.elementAt(i)); return keys; } /** * Retrieve all columns as an Object[] */ public Object[] getColumnsAsArray(){ int collen = dataStorage.size(); Object[] columns = new Object[collen]; for(int i = 0; i < collen; i++) columns[i]= dataStorage.elementAt(i); return columns; } /** * Retrieve all columns, including the index, as an Object[] */ public Object[] getColumnsAsArray(boolean withIndex){ int collen = dataStorage.size(); Object[] columns = new Object[collen + 1]; columns[0] = indexColumn; for(int i = 0; i < collen - 1; i++) columns[i + 1] = dataStorage.elementAt(i); return columns; } /** * Retrieve all columns as a Vector */ public Vector getColumnsAsVector(){ Vector columns = new Vector(); columns.addElement(getIndexColumn()); for(int i = 0; i < dataStorage.size(); i++) columns.addElement(dataStorage.elementAt(i)); return columns; } /** * Retrieve an element in a specified row in a specified column */ public Object getElement(String columnKey, int row){ int i = ((Integer)keyTable.get(columnKey)).intValue(); if(i >= 0) return ((Object[])dataStorage.get(i))[row]; else return null; } /** * Returns the index column */ public Object[] getIndexColumn(){ return indexColumn; } /** * Returns the index's title */ public String getIndexTitle(){ return indexTitle; } /** * Returns the number of columns in the Table */ public int getNumberOfColumns(){ return dataStorage.size(); } /** * Returns the number of rows in the Table */ public int getNumberOfRows() { return indexColumn.length; } /** * Retrieves the contents of a specified row as a Object[] */ public Object[] getRowAsArray(int row){ try { Object[] someObject = new Object[getNumberOfColumns()]; int length = someObject.length; for(int i = 0; i < length; i++) someObject[i] = ((Object[])dataStorage.elementAt(i))[row]; Object[] objectarray1d1 = someObject; return objectarray1d1; } catch(Exception e) { e.printStackTrace(); } Object[] objectarray1d = new Object[0]; return objectarray1d; } /** * Retrieves the contents of the Table as a Vector * of the data by row public Vector getRowsAsVector(){ Vector result = new Vector(getNumberOfRows()); for(int row = 0; row < getNumberOfRows(); row++) { Vector v = new Vector(getNumberOfColumns() + 1); v.addElement(new Double(indexColumn.get(row))); for(int col = 0; col < getNumberOfColumns(); col++) v.addElement(new Double(((Object[])dataStorage.elementAt(col)).get(row))); result.addElement(v); } return result; } */ /** * Returns the table's title */ public String getTitle(){ return tableTitle; } /** * Replace an element at a specified column and row with a new value */ public void putElement(String key, int row, Object value){ int i = ((Integer)keyTable.get(key)).intValue(); if (i >= 0) ((Object[])dataStorage.get(i))[row] = value; } /** * Set the Table's index column */ public void setIndexColumn(Object[] column) { indexColumn = column; } /** * Set the Table's index column */ public void setIndexColumn(Object[] column, String title) { indexTitle = title; indexColumn = column; } /** * Set the Table's title */ public void setTitle(String aTitle) { tableTitle = aTitle; } }