package ru.gazprom.gtnn.minos.util;
public class TableKeeper {
public static class ColumnDescr {
private String name;
private int type;
public ColumnDescr(String name, int type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public int getType() {
return type;
}
}
public TableKeeper(int rowCount, int columnCount) {
this.rowCount = rowCount;
this.columnCount = columnCount;
columns = new ColumnDescr[columnCount];
if(columnCount == 1) {
lst = new Object[rowCount];
} else {
tbl = new Object[rowCount][];
for(int i = 0; i < rowCount; i++)
tbl[i] = new Object[columnCount];
}
}
/**
* The function set name and type for column
* @param columnName is column name
* @param columnType is column type from java.sql.Types;
* @param columnNumber is index of column (1 <= columnNumber <= columnCount)
*/
public void setColumnDescr(String columnName, int columnType, int columnNumber) throws IllegalArgumentException {
if((columnNumber < 1) || (columnNumber > columnCount))
throw new IllegalArgumentException("TableKeeper.setColumnDescr() get illegal value of columnIndex (" + columnNumber + ")");
ColumnDescr cd = new ColumnDescr(columnName, columnType);
columns[columnNumber - 1] = cd;
}
/**
* The function set name and type for column
* @param cd - filled object of ColumnDescr class
* @param columnNumber is index of column (1 <= columnNumber <= columnCount)
*/
public void setColumnDescr(ColumnDescr cd, int columnNumber) throws IllegalArgumentException {
if((columnNumber < 1) || (columnNumber > columnCount))
throw new IllegalArgumentException("TableKeeper.setColumnDescr() get illegal value of columnIndex (" + columnNumber + ")");
if(cd == null)
throw new IllegalArgumentException("TableKeeper.setColumnDescr() get null value");
columns[columnNumber - 1] = cd;
}
/**
* The function set value in table on
* @param rowNumber is row number (1 <= rowNumber <= rowCount)
* @param columnNumber is column number (1 <= columnNumber <= columnCount)
*/
public void setValue(Object value, int rowNumber, int columnNumber) throws IllegalArgumentException {
if((columnNumber < 1) || (columnNumber > columnCount))
throw new IllegalArgumentException("TableKeeper.setValue() get illegal value of columnNumber (" + columnNumber + ")");
if((rowNumber < 1) || (rowNumber > rowCount))
throw new IllegalArgumentException("TableKeeper.setValue() get illegal value of rowNumber (" + rowNumber + ")");
if(columnCount == 1) {
lst[rowNumber - 1] = value;
} else {
tbl[rowNumber - 1][columnNumber - 1] = value;
}
}
/**
* The function return ColumnDescr object use name of column
* @param name is compare string
* @param flagIgnoreCase is flag of case sensitivity
* @return ColumnDescr object or null if name not exist
*/
public ColumnDescr getColumnDescrByName(String name, boolean flagIgnoreCase) {
for(ColumnDescr cd : columns) {
if(flagIgnoreCase ? name.equalsIgnoreCase(cd.name) : name.equals(cd.name)) {
return cd;
}
}
return null;
}
/**
* The function return column number for column name equal name
* @param name is compare string
* @param flagIgnoreCase is flag of case sensitivity
* @return if column not found then return -1? else return value [1, columnCount]
*/
public int getColumnNumberByName(String name, boolean flagIgnoreCase) {
for(int i = 0; i < columnCount; i++) {
if(flagIgnoreCase ? name.equalsIgnoreCase(columns[i].getName()) : name.equals(columns[i].getName())) {
return i + 1;
}
}
return -1;
}
/**
* The function return ColumnDescr object use index of column
* @param columnNumber - is index of column (1 <= columnNumber <= columnCount)
* @return ColumnDescr object or null if name not exist
*/
public ColumnDescr getColumnDescrByIndex(int columnNumber) throws IllegalArgumentException {
if((columnNumber < 1) || (columnNumber > columnCount))
throw new IllegalArgumentException("TableKeeper.setValue() get illegal value of columnNumber (" + columnNumber + ")");
return columns[columnNumber - 1];
}
/**
* The function return value from table
* @param rowNumber is row number (1 <= rowNumber <= rowCount)
* @param columnNumber is column number (1 <= columnNumber <= columnCount)
* @return
*/
public Object getValue(int rowNumber, int columnNumber) throws IllegalArgumentException {
if((columnNumber < 1) || (columnNumber > columnCount))
throw new IllegalArgumentException("TableKeeper.getValue() get illegal value of columnNumber (" + columnNumber + ")");
if((rowNumber < 1) || (rowNumber > rowCount))
throw new IllegalArgumentException("TableKeeper.getValue() get illegal value of rowNumber (" + rowNumber + ")");
return ((columnCount == 1) ? lst[rowNumber - 1] : tbl[rowNumber - 1][columnNumber - 1]);
}
/**
* The function return count of columns
* @return - number
*/
public int getColumnCount() {
return columnCount;
}
/**
* The function return count of rows
* @return - number
*/
public int getRowCount() {
return rowCount;
}
private Object [][] tbl;
private Object [] lst;
private ColumnDescr[] columns;
private int rowCount;
private int columnCount;
}