package edu.ualberta.med.biobank.mvp.view.item;
import java.util.ArrayList;
import java.util.List;
import edu.ualberta.med.biobank.common.util.ListChangeEvent;
import edu.ualberta.med.biobank.common.util.ListChangeHandler;
import edu.ualberta.med.biobank.gui.common.widgets.AbstractInfoTableWidget;
/**
*
* @author jferland
*
* @param <T>
*/
// TODO: ideally, tables would use MVP too, but for now, do this
public class TableItem<E> extends AbstractListField<E> {
private final ListChangeHandler<E> listChangeHandler =
new ListChangeHandler<E>() {
@Override
public void onListChange(ListChangeEvent<E> event) {
setElementsInternal(table.getList());
}
};
private AbstractInfoTableWidget<E> table;
public synchronized void setTable(AbstractInfoTableWidget<E> table) {
unbindOldTable();
this.table = table;
updateGui();
table.addListChangeHandler(listChangeHandler);
}
@Override
protected void updateGui() {
if (table != null) {
table.removeListChangeHandler(listChangeHandler);
List<E> copy = new ArrayList<E>(asUnmodifiableList());
table.setList(copy);
table.addListChangeHandler(listChangeHandler);
}
}
private void unbindOldTable() {
if (table != null) {
table.removeListChangeHandler(listChangeHandler);
}
}
}