package com.opendoorlogistics.core.tables.decorators.tables;
import com.opendoorlogistics.api.tables.ODLColumnType;
import com.opendoorlogistics.api.tables.ODLFlatDatastore;
import com.opendoorlogistics.api.tables.ODLTableAlterable;
import com.opendoorlogistics.api.tables.ODLTableDefinition;
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
import com.opendoorlogistics.api.tables.TableQuery;
import com.opendoorlogistics.core.tables.utils.TableUtils;
import gnu.trove.map.hash.TIntObjectHashMap;
/**
* Creates a table object which acts on a flat datastore
* @author Phil
*
*/
public class FlatDs2TableObject implements ODLTableAlterable {
private final ODLFlatDatastore fds;
private final int tableId;
public FlatDs2TableObject(ODLFlatDatastore fds, int id) {
this.fds = fds;
this.tableId = id;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
fds.setValueAt(tableId, aValue, rowIndex, columnIndex);
}
@Override
public void setValueById(Object aValue, long rowid, int columnIndex) {
fds.setValueById(tableId, aValue, rowid, columnIndex);
}
@Override
public int createEmptyRow(long rowLocalId) {
return fds.createEmptyRow(tableId, rowLocalId);
}
@Override
public void insertEmptyRow(int insertAtRowNb, long rowId) {
fds.insertEmptyRow(tableId, insertAtRowNb, rowId);
}
@Override
public void deleteRow(int rowNumber) {
fds.deleteRow(tableId, rowNumber);
}
@Override
public int getRowCount() {
return fds.getRowCount(tableId);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return fds.getValueAt(tableId, rowIndex, columnIndex);
}
@Override
public ODLColumnType getColumnType(int i) {
return fds.getColumnFieldType(tableId, i);
}
@Override
public String getColumnName(int i) {
return fds.getColumnName(tableId, i);
}
@Override
public int getColumnCount() {
return fds.getColumnCount(tableId);
}
@Override
public String getName() {
return fds.getName(tableId);
}
@Override
public long getFlags() {
return fds.getFlags(tableId);
}
@Override
public long getColumnFlags(int i) {
return fds.getColumnFlags(tableId, i);
}
@Override
public int addColumn(int id, String name, ODLColumnType type, long flags) {
return fds.addColumn(tableId, id, name, type, flags);
}
@Override
public void setFlags(long flags) {
fds.setFlags(tableId, flags);
}
@Override
public void setColumnFlags(int col, long flags) {
fds.setColumnFlags(tableId, col, flags);
}
@Override
public int getImmutableId() {
return tableId;
}
@Override
public String toString() {
return TableUtils.convertToString(this);
}
@Override
public void deleteColumn(int col) {
fds.deleteCol(tableId, col);
}
@Override
public boolean insertColumn(int colId, int col, String name, ODLColumnType type, long flags, boolean allowDuplicateNames) {
return fds.insertCol(tableId, colId, col, name, type, flags, allowDuplicateNames);
}
// @Override
// public int getRowIndexByGlobalId(long immutableId) {
// return fds.getRowIndexByGlobalId(tableId, immutableId);
// }
@Override
public long getRowId(int rowIndex) {
return fds.getRowGlobalId(tableId, rowIndex);
}
// @Override
// public int getRowIndexByLocalId(int localId) {
// return fds.getRowIndexByLocalId(tableId, localId);
// }
@Override
public String getColumnDescription(int col) {
return fds.getColumnDescription(tableId, col);
}
@Override
public void setColumnDescription(int col, String description) {
fds.setColumnDescription(tableId, col, description);
}
@Override
public java.util.Set<String> getColumnTags(int col) {
return fds.getColumnTags(tableId, col);
}
@Override
public java.util.Set<String> getTags() {
return fds.getTags(tableId);
}
@Override
public void setTags(java.util.Set<String> tags) {
fds.setTags(tableId, tags);
}
@Override
public void setColumnTags(int col, java.util.Set<String> tags) {
fds.setColumnTags(tableId, col, tags);
}
@Override
public Object getColumnDefaultValue(int col) {
return fds.getColumnDefaultValue(tableId, col);
}
@Override
public void setColumnDefaultValue(int col, Object value) {
fds.setColumnDefaultValue(tableId, col, value);
}
@Override
public Object getValueById(long rowId, int columnIndex) {
return fds.getValueById(tableId, rowId, columnIndex);
}
@Override
public boolean containsRowId(long rowId) {
return fds.containsRowId(tableId, rowId);
}
@Override
public int getColumnImmutableId(int col) {
return fds.getColumnImmutableId(tableId, col);
}
@Override
public long[] find(int col, Object value) {
return fds.find(tableId, col, value);
}
@Override
public long getRowFlags(long rowId) {
return fds.getRowFlags(tableId, rowId);
}
@Override
public void setRowFlags(long flags, long rowId) {
fds.setRowFlags(tableId, flags, rowId);
}
@Override
public ODLTableDefinition deepCopyWithShallowValueCopy() {
return fds.deepCopyWithShallowValueCopy(tableId);
}
@Override
public long getRowLastModifiedTimeMillsecs(long rowId) {
return fds.getRowLastModifiedTimeMillisecs(tableId, rowId);
}
@Override
public ODLTableReadOnly query(TableQuery query) {
return fds.query(tableId, query);
}
public static class Flat2DsTableCache{
private final TIntObjectHashMap<FlatDs2TableObject> tableDecorators = new TIntObjectHashMap<>();
private final ODLFlatDatastore fds;
public Flat2DsTableCache(ODLFlatDatastore fds) {
this.fds = fds;
}
public synchronized ODLTableAlterable getTable(int tableId) {
if(fds.getTableExists(tableId)){
// get table decorator from cache
ODLTableAlterable ret = (ODLTableAlterable)tableDecorators.get(tableId);
// create one if needed
if(ret == null){
FlatDs2TableObject td = new FlatDs2TableObject(fds,tableId);
tableDecorators.put(tableId, td);
ret = (ODLTableAlterable)td;
}
return ret;
}
return null;
}
}
}