// TableUtil.java
package net.sf.gogui.util;
import java.util.ArrayList;
/** Utility functions for class Table. */
public final class TableUtil
{
/** Check if all elements in a column are empty.
@param table The table.
@param column The column title.
@return True, if all elements in this column are null or strings
containing only whitespaces. */
public static boolean allEmpty(Table table, String column)
throws Table.InvalidLocation
{
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(column, row);
if (! StringUtil.isEmpty(value))
return false;
}
return true;
}
/** Append row from other table.
The tables need to have the same number of columns.
@param to The table to append to.
@param from The table to take the row from.
@param row The index of the row in table from. */
public static void appendRow(Table to, Table from, int row)
{
assert to.getNumberColumns() == from.getNumberColumns();
to.startRow();
for (int column = 0; column < to.getNumberColumns(); ++column)
to.set(column, from.get(column, row));
}
/** Find row with required values for two columns.
@param table The table.
@param compareColumn1 The first column title.
@param compareValue1 The required value for the first column.
@param compareColumn2 The second column title.
@param compareValue2 The required value for the second column.
@return The row with matching values for both columns or -1,
if no such row exists. */
public static int findRow(Table table,
String compareColumn1, String compareValue1,
String compareColumn2, String compareValue2)
throws Table.InvalidLocation
{
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value1 = table.get(compareColumn1, row);
if (value1 == null || ! value1.equals(compareValue1))
continue;
String value2 = table.get(compareColumn2, row);
if (value2 == null || ! value2.equals(compareValue2))
continue;
return row;
}
return -1;
}
public static Table fromHistogram(Histogram histogram, String name)
{
ArrayList<String> columnTitles = new ArrayList<String>(2);
columnTitles.add(name);
columnTitles.add("Count");
Table result = new Table(columnTitles);
for (int i = 0; i < histogram.getSize(); ++i)
{
int count = histogram.getCount(i);
if (count == 0)
continue;
result.startRow();
try
{
result.set(name, histogram.getValue(i));
result.set("Count", count);
}
catch (Table.InvalidLocation e)
{
assert false;
}
}
return result;
}
/** Get elements of a column without null and whitespace-only elements. */
public static ArrayList<String> getColumnNotEmpty(Table table,
String column)
throws Table.InvalidLocation
{
ArrayList<String> result = new ArrayList<String>();
int col = table.getColumnIndex(column);
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(col, row);
if (! StringUtil.isEmpty(value))
result.add(value);
}
return result;
}
public static ArrayList<String> getColumnUnique(Table table, String column)
throws Table.InvalidLocation
{
ArrayList<String> result = new ArrayList<String>();
int col = table.getColumnIndex(column);
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(col, row);
if (value != null && ! value.equals("")
&& ! result.contains(value))
result.add(value);
}
return result;
}
public static double getMax(Table table, String column)
throws Table.InvalidLocation
{
double max = Double.NEGATIVE_INFINITY;
int col = table.getColumnIndex(column);
for (int row = 0; row < table.getNumberRows(); ++row)
{
try
{
double value = Double.parseDouble(table.get(col, row));
max = Math.max(max, value);
}
catch (NumberFormatException e)
{
}
}
return max;
}
public static Statistics getStatistics(Table table, String column)
throws Table.InvalidLocation
{
Statistics statistics = new Statistics();
int col = table.getColumnIndex(column);
for (int row = 0; row < table.getNumberRows(); ++row)
{
try
{
String value = table.get(col, row);
if (value == null)
continue;
double doubleValue = Double.parseDouble(value);
statistics.add(doubleValue);
}
catch (NumberFormatException e)
{
}
}
return statistics;
}
public static boolean isNumberValue(String string)
{
if (string == null)
return false;
try
{
Double.parseDouble(string);
}
catch (NumberFormatException e)
{
return false;
}
return true;
}
public static boolean isBoolValue(String string)
{
return (string.equals("0") || string.equals("1"));
}
public static boolean isIntValue(String string)
{
try
{
Integer.parseInt(string);
}
catch (NumberFormatException e)
{
return false;
}
return true;
}
public static Table select(Table table, String compareColumn,
String compareValue)
throws Table.InvalidLocation
{
Table result = new Table(table.getColumnTitles());
int numberColumns = table.getNumberColumns();
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(compareColumn, row);
if (value == null || ! value.equals(compareValue))
continue;
result.startRow();
for (int column = 0; column < numberColumns; ++column)
result.set(column, table.get(column, row));
}
return result;
}
public static Table select(Table table, String compareColumn,
String compareValue, String selectColumn)
throws Table.InvalidLocation
{
ArrayList<String> columnTitles = new ArrayList<String>(1);
columnTitles.add(selectColumn);
Table result = new Table(columnTitles);
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(compareColumn, row);
if (value == null || ! value.equals(compareValue))
continue;
result.startRow();
result.set(selectColumn, table.get(selectColumn, row));
}
return result;
}
public static Table select(Table table, String compareColumn,
String compareValue, String selectColumn1,
String selectColumn2)
throws Table.InvalidLocation
{
ArrayList<String> columnTitles = new ArrayList<String>(2);
columnTitles.add(selectColumn1);
columnTitles.add(selectColumn2);
Table result = new Table(columnTitles);
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(compareColumn, row);
if (value == null || ! value.equals(compareValue))
continue;
result.startRow();
result.set(selectColumn1, table.get(selectColumn1, row));
result.set(selectColumn2, table.get(selectColumn2, row));
}
return result;
}
public static Table selectIntRange(Table table, String compareColumn,
int min, int max)
throws Table.InvalidLocation
{
Table result = new Table(table.getColumnTitles());
int numberColumns = table.getNumberColumns();
for (int row = 0; row < table.getNumberRows(); ++row)
{
String value = table.get(compareColumn, row);
try
{
int intValue = Integer.parseInt(value);
if (intValue >= min && intValue <= max)
{
result.startRow();
for (int column = 0; column < numberColumns; ++column)
result.set(column, table.get(column, row));
}
}
catch (NumberFormatException e)
{
}
}
return result;
}
/** Make constructor unavailable; class is for namespace only. */
private TableUtil()
{
}
}