package prefuse.data.column;
import java.util.Date;
import prefuse.data.DataTypeException;
import prefuse.data.Table;
import prefuse.data.expression.Expression;
/**
* Factory class for generating appropriate column instances. Used by
* Tables to generate their columns.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class ColumnFactory {
/**
* Get a new column of the given type.
* @param type the column data type
* @return the new column
*/
public static final Column getColumn(Class type) {
return getColumn(type, 0, 0, null);
}
/**
* Get a new column of the given type.
* @param type the column data type
* @param nrows the number of rows to include in the column
* @return the new column
*/
public static final Column getColumn(Class type, int nrows) {
return getColumn(type, nrows, nrows, null);
}
/**
* Get a new column of the given type.
* @param type the column data type
* @param nrows the number of rows to include in the column
* @param defaultValue the default value for the column
* @return the new column
*/
public static final Column getColumn(Class type, int nrows,
Object defaultValue)
{
return getColumn(type, nrows, nrows, defaultValue);
}
/**
* Get a new column of the given type.
* @param type the column data type
* @param nrows the number of rows to include in the column
* @param nnz the number of expected non-zero entries (NOTE: currently
* this value is not being used)
* @param defaultValue the default value for the column
* @return the new column
*/
public static final Column getColumn(Class type, int nrows, int nnz,
Object defaultValue)
{
if ( type == byte.class )
{
if ( defaultValue == null ) {
return new ByteColumn(nrows);
} else {
byte def = ((Number)defaultValue).byteValue();
return new ByteColumn(nrows, nrows, def);
}
}
if ( type == int.class )
{
if ( defaultValue == null ) {
return new IntColumn(nrows);
} else {
int def = ((Number)defaultValue).intValue();
return new IntColumn(nrows, nrows, def);
}
}
else if ( type == long.class )
{
if ( defaultValue == null ) {
return new LongColumn(nrows);
} else {
long def = ((Number)defaultValue).longValue();
return new LongColumn(nrows, nrows, def);
}
}
else if ( type == float.class )
{
if ( defaultValue == null ) {
return new FloatColumn(nrows);
} else {
float def = ((Number)defaultValue).floatValue();
return new FloatColumn(nrows, nrows, def);
}
}
else if ( type == double.class )
{
if ( defaultValue == null ) {
return new DoubleColumn(nrows);
} else {
double def = ((Number)defaultValue).doubleValue();
return new DoubleColumn(nrows, nrows, def);
}
}
else if ( type == boolean.class )
{
if ( defaultValue == null ) {
return new BooleanColumn(nrows);
} else {
boolean def = ((Boolean)defaultValue).booleanValue();
return new BooleanColumn(nrows, nrows, def);
}
}
else if ( Date.class.isAssignableFrom(type) )
{
if ( defaultValue == null ) {
return new DateColumn(type, nrows);
} else {
Date d = ((Date)defaultValue);
return new DateColumn(type, nrows, nrows, d.getTime());
}
}
else if ( type == byte.class
|| type == short.class
|| type == char.class
|| type == void.class )
{
throw new DataTypeException(type);
}
else
{
return new ObjectColumn(type, nrows, nrows, defaultValue);
}
}
/**
* Get a new column based on the given expression.
* @param t the table the column should be added to
* @param expr the expression that should provide the column values
* @return the new column
*/
public static final Column getColumn(Table t, Expression expr) {
return new ExpressionColumn(t, expr);
}
/**
* Get a new column of a constant value.
* @param type the column data type
* @param dflt the default constant value for the column
* @return the new column
*/
public static final Column getConstantColumn(Class type, Object dflt) {
return new ConstantColumn(type, dflt);
}
} // end of class ColumnFactory