/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.core.tables.decorators.datastores.dependencies; import com.opendoorlogistics.api.tables.ODLColumnType; import com.opendoorlogistics.api.tables.ODLDatastore; import com.opendoorlogistics.api.tables.ODLListener; import com.opendoorlogistics.api.tables.ODLTableDefinition; import com.opendoorlogistics.core.tables.decorators.datastores.SimpleDecorator; /** * This decorator records which tables have been read and written to, * thereby recording the dependencies of the client code on the datastore. * @author Phil * */ final public class DataDependenciesRecorder<T extends ODLTableDefinition> extends SimpleDecorator<T> { /** * */ private static final long serialVersionUID = -2607725279850643297L; //private final DataDependencies dependencies; private final DataDependencies dependencies; public DataDependenciesRecorder(Class<T> tableClass, ODLDatastore<? extends T> decorated, DataDependencies dependencies) { super(tableClass, decorated); this.dependencies = dependencies; } public DataDependenciesRecorder(Class<T> tableClass, ODLDatastore<? extends T> decorated) { this(tableClass, decorated, new DataDependencies()); } public DataDependencies getDependencies() { return dependencies; } @Override public int addColumn(int tableId,int id, String name, ODLColumnType type, long flags) { getDependencies().addWrittenTableId(tableId); return super.addColumn(tableId, id,name, type, flags); } @Override public void addListener(ODLListener tml, int... tableIds) { for(int tableId : tableIds){ getDependencies().addReadTableId(tableId,false); } super.addListener(tml, tableIds); } @Override public int createEmptyRow(int tableId, long rowLocalId) { getDependencies().addWrittenTableId(tableId); return super.createEmptyRow(tableId, rowLocalId); } @Override public T createTable(String tablename, int tableId) { getDependencies().setWrittenTableSet(); if(tableId!=-1){ getDependencies().addWrittenTableId(tableId); } return super.createTable(tablename, tableId); } @Override public void deleteCol(int tableId, int col) { getDependencies().addWrittenTableId(tableId); super.deleteCol(tableId, col); } @Override public void deleteRow(int tableId, int rowNumber) { getDependencies().addWrittenTableId(tableId); super.deleteRow(tableId, rowNumber); } @Override public void deleteTableById(int tableId) { getDependencies().setWrittenTableSet(); getDependencies().addWrittenTableId(tableId); super.deleteTableById(tableId); } @Override public void disableListeners() { super.disableListeners(); } @Override public void enableListeners() { super.enableListeners(); } @Override public int getColumnCount(int tableId) { getDependencies().addReadTableId(tableId,false); return super.getColumnCount(tableId); } @Override public ODLColumnType getColumnFieldType(int tableId, int colIndex) { getDependencies().addReadTableId(tableId,false); return super.getColumnFieldType(tableId, colIndex); } @Override public long getColumnFlags(int tableId, int colIndx) { getDependencies().addReadTableId(tableId,false); return super.getColumnFlags(tableId, colIndx); } @Override public int getColumnImmutableId(int tableId, int col) { getDependencies().addReadTableId(tableId,false); return super.getColumnImmutableId(tableId, col); } @Override public String getColumnName(int tableId, int colIndex) { getDependencies().addReadTableId(tableId,false); return super.getColumnName(tableId, colIndex); } @Override public long getFlags() { getDependencies().setReadTableSet(); return super.getFlags(); } @Override public long getFlags(int tableId) { getDependencies().addReadTableId(tableId,false); return super.getFlags(tableId); } @Override public String getName(int tableId) { // Table names are considered a table set property, not an individual table's property. // This allows the dependencies for adapters to only inculde the tables they use. getDependencies().setReadTableSet(); return super.getName(tableId); } @Override public int getRowCount(int tableId) { getDependencies().addReadTableId(tableId,true); return super.getRowCount(tableId); } @Override public long getRowGlobalId(int tableId, int rowIndex) { getDependencies().addReadTableId(tableId,true); return super.getRowGlobalId(tableId, rowIndex); } @Override public long getRowFlags(int tableId, long rowId) { getDependencies().addReadTableId(tableId,true); getDependencies().setReadRowFlags(true); return super.getRowFlags(tableId, rowId); } @Override public long getRowLastModifiedTimeMillisecs(int tableId, long rowId) { getDependencies().addReadTableId(tableId,true); return super.getRowLastModifiedTimeMillisecs(tableId, rowId); } // @Override // public int getRowIndexByGlobalId(int tableId, long immutableId) { // getDependencies().addReadTableId(tableId); // return super.getRowIndexByGlobalId(tableId, immutableId); // } // @Override // public int getRowIndexByLocalId(int tableId, int localId) { // getDependencies().addReadTableId(tableId); // return super.getRowIndexByLocalId(tableId, localId); // } @Override public T getTableAt(int tableIndex) { getDependencies().setReadTableSet(); return super.getTableAt(tableIndex); } @Override public T getTableByImmutableId(int tableId) { getDependencies().setReadTableSet(); return super.getTableByImmutableId(tableId); } @Override public int getTableCount() { getDependencies().setReadTableSet(); return super.getTableCount(); } @Override public Object getValueAt(int tableId, int rowIndex, int columnIndex) { getDependencies().addReadTableId(tableId,true); return super.getValueAt(tableId, rowIndex, columnIndex); } @Override public long[] find(int tableId, int col, Object value) { getDependencies().addReadTableId(tableId,true); return super.find(tableId, col, value); } @Override public boolean containsRowId(int tableId, long rowId) { getDependencies().addReadTableId(tableId,true); return super.containsRowId(tableId, rowId); } @Override public Object getValueById(int tableId, long rowId, int columnIndex) { getDependencies().addReadTableId(tableId,true); return super.getValueById(tableId, rowId, columnIndex); } @Override public boolean insertCol(int tableId, int id,int col, String name, ODLColumnType type, long flags, boolean allowDuplicateNames) { getDependencies().addWrittenTableId(tableId); return super.insertCol(tableId,id, col, name, type, flags, allowDuplicateNames); } @Override public void insertEmptyRow(int tableId, int insertAtRowNb, long rowId) { getDependencies().addWrittenTableId(tableId); super.insertEmptyRow(tableId, insertAtRowNb, rowId); } @Override public void removeListener(ODLListener tml) { super.removeListener(tml); } @Override public void setColumnFlags(int tableId, int col, long flags) { getDependencies().addWrittenTableId(tableId); super.setColumnFlags(tableId, col, flags); } @Override public void setFlags(int tableId, long flags) { getDependencies().addWrittenTableId(tableId); super.setFlags(tableId, flags); } @Override public void setFlags(long flags) { getDependencies().setWrittenTableSet(); super.setFlags(flags); } @Override public boolean setTableName(int tableId, String newName) { // Table names are considered a table set property, not an individual table's property. // This allows the dependencies for adapters to only inculde the tables they use. getDependencies().setWrittenTableSet(); return super.setTableName(tableId, newName); } @Override public void setValueAt(int tableId, Object aValue, int rowIndex, int columnIndex) { getDependencies().addWrittenTableId(tableId); super.setValueAt(tableId, aValue, rowIndex, columnIndex); } @Override public void setValueById(int tableId, Object aValue, long rowId, int columnIndex) { getDependencies().addWrittenTableId(tableId); super.setValueById(tableId, aValue, rowId, columnIndex); } }