nom.tam.util
Class ColumnTable

java.lang.Object
  extended by nom.tam.util.ColumnTable
All Implemented Interfaces:
DataTable

public class ColumnTable
extends java.lang.Object
implements DataTable

A data table is conventionally considered to consist of rows and columns, where the structure within each column is constant, but different columns may have different structures. I.e., structurally columns may differ but rows are identical. Typically tabular data is usually stored in row order which can make it extremely difficult to access efficiently using Java. This class provides efficient access to data which is stored in row order and allows users to get and set the elements of the table. The table can consist only of arrays of primitive types. Data stored in column order can be efficiently read and written using the BufferedDataXputStream classes. The table is represented entirely as a set of one-dimensional primitive arrays. For a given column, a row consists of some number of contiguous elements of the array. Each column is required to have the same number of rows.


Constructor Summary
ColumnTable(java.lang.Object[] arrays, int[] sizes)
          Create the object after checking consistency.
 
Method Summary
 void addColumn(java.lang.Object newColumn, int size)
          Add a column
protected  void addPointer(java.lang.Object data)
           
 void addRow(java.lang.Object[] row)
          Add a row to the table.
protected  void checkArrayConsistency(java.lang.Object[] arrays, int[] sizes)
          Check that the columns and sizes are consistent.
 int deleteColumns(int start, int len)
          Delete a contiguous set of columns from the table.
 void deleteRow(int row)
          Delete a row from the table.
 void deleteRows(int row, int length)
          Delete a contiguous set of rows from the table.
 java.lang.Class[] getBases()
          Get the base classes of the columns.
 java.lang.Object getColumn(int col)
          Get a particular column.
 java.lang.Object[] getColumns()
          Get the actual data arrays
 java.lang.Object getElement(int row, int col)
          Get a element of the table.
 int getNCols()
          Get the number of columns in the table.
 int getNRows()
          Get the number of rows in the table.
protected  void getNumberOfRows()
          Calculate the number of rows to read/write at a time.
 java.lang.Object getRow(int row)
          Get a row of data.
 int[] getSizes()
           
 char[] getTypes()
          Get the characters describing the base classes of the columns.
protected  void initializePointers()
          Set the pointer arrays for the eight primitive types to point to the appropriate elements of arrays.
 int read(ArrayDataInput is)
          Read a table.
 void setColumn(int col, java.lang.Object newColumn)
          Set the values in a particular column.
 void setElement(int row, int col, java.lang.Object x)
          Modify an element of the table.
 void setRow(int row, java.lang.Object x)
          Modify a row of data.
protected  void setup(java.lang.Object[] arrays, int[] sizes)
          Actually perform the initialization.
 int write(ArrayDataOutput os)
          Write a table.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ColumnTable

public ColumnTable(java.lang.Object[] arrays,
                   int[] sizes)
            throws TableException
Create the object after checking consistency.

Parameters:
arrays - An array of one-d primitive arrays.
sizes - The number of elements in each row for the corresponding column
Throws:
TableException
Method Detail

setup

protected void setup(java.lang.Object[] arrays,
                     int[] sizes)
              throws TableException
Actually perform the initialization.

Throws:
TableException

getNRows

public int getNRows()
Get the number of rows in the table.

Specified by:
getNRows in interface DataTable

getNCols

public int getNCols()
Get the number of columns in the table.

Specified by:
getNCols in interface DataTable

getColumn

public java.lang.Object getColumn(int col)
Get a particular column.

Specified by:
getColumn in interface DataTable
Parameters:
col - The column desired.
Returns:
an object containing the column data desired. This will be an instance of a 1-d primitive array.

setColumn

public void setColumn(int col,
                      java.lang.Object newColumn)
               throws TableException
Set the values in a particular column. The new values must match the old in length but not necessarily in type.

Specified by:
setColumn in interface DataTable
Parameters:
col - The column to modify.
newColumn - The new column data. This should be a primitive array.
Throws:
TableException - Thrown when the new data is not commenserable with information in the table.

addColumn

public void addColumn(java.lang.Object newColumn,
                      int size)
               throws TableException
Add a column

Throws:
TableException

addRow

public void addRow(java.lang.Object[] row)
            throws TableException
Add a row to the table. This method is very inefficient for adding multiple rows and should be avoided if possible.

Throws:
TableException

getElement

public java.lang.Object getElement(int row,
                                   int col)
Get a element of the table.

Specified by:
getElement in interface DataTable
Parameters:
row - The row desired.
col - The column desired.
Returns:
A primitive array containing the information. Note that an array will be returned even if the element is a scalar.

setElement

public void setElement(int row,
                       int col,
                       java.lang.Object x)
                throws TableException
Modify an element of the table.

Specified by:
setElement in interface DataTable
Parameters:
row - The row containing the element.
col - The column containing the element.
x - The new datum. This should be 1-d primitive array.
Throws:
TableException - Thrown when the new data is not of the same type as the data it replaces.

getRow

public java.lang.Object getRow(int row)
Get a row of data.

Specified by:
getRow in interface DataTable
Parameters:
The - row desired.
Returns:
An array of objects each containing a primitive array.

setRow

public void setRow(int row,
                   java.lang.Object x)
            throws TableException
Modify a row of data.

Specified by:
setRow in interface DataTable
Parameters:
row - The row to be modified.
x - The data to be modified. This should be an array of objects. It is described as an Object here since other table implementations may use other methods to store the data (e.g.,
Throws:
TableException
See Also:
ColumnTable.getColumn.

checkArrayConsistency

protected void checkArrayConsistency(java.lang.Object[] arrays,
                                     int[] sizes)
                              throws TableException
Check that the columns and sizes are consistent. Inconsistencies include:

Parameters:
arrays - The arrays defining the columns.
sizes - The number of elements in each row for the column.
Throws:
TableException

getNumberOfRows

protected void getNumberOfRows()
Calculate the number of rows to read/write at a time.

Parameters:
rowSize - The size of a row in bytes.
nrows - The number of rows in the table.

initializePointers

protected void initializePointers()
Set the pointer arrays for the eight primitive types to point to the appropriate elements of arrays.


addPointer

protected void addPointer(java.lang.Object data)
                   throws TableException
Throws:
TableException

read

public int read(ArrayDataInput is)
         throws java.io.IOException
Read a table.

Parameters:
is - The input stream to read from.
Throws:
java.io.IOException

write

public int write(ArrayDataOutput os)
          throws java.io.IOException
Write a table.

Parameters:
os - the output stream to write to.
Throws:
java.io.IOException

getBases

public java.lang.Class[] getBases()
Get the base classes of the columns.

Returns:
An array of Class objects, one for each column.

getTypes

public char[] getTypes()
Get the characters describing the base classes of the columns.

Returns:
An array of char's, one for each column.

getColumns

public java.lang.Object[] getColumns()
Get the actual data arrays


getSizes

public int[] getSizes()

deleteRow

public void deleteRow(int row)
               throws TableException
Delete a row from the table.

Parameters:
row - The row (0-indexed) to be deleted.
Throws:
TableException

deleteRows

public void deleteRows(int row,
                       int length)
                throws TableException
Delete a contiguous set of rows from the table.

Parameters:
row - The row (0-indexed) to be deleted.
length - The number of rows to be deleted.
Throws:
TableException - if the request goes outside the boundaries of the table or if the length is negative.

deleteColumns

public int deleteColumns(int start,
                         int len)
                  throws TableException
Delete a contiguous set of columns from the table.

Parameters:
col - The column (0-indexed) to be deleted.
length - The number of rows to be deleted.
Throws:
TableException - if the request goes outside the boundaries of the table or if the length is negative.