package gui.interfaces;
import gui.events.DataChangeEvent;
import gui.events.DataChangeListener;
import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.HashSet;
/**
* Created by tloehr on 11.05.15.
*/
public abstract class EditPanelDefault<T> extends JPanel implements EditPanelInterface<T>, Reloadable {
protected T data;
protected HashSet<DataChangeListener<T>> listDCL;
private final DataProvider<T> dataProvider;
protected final EditPanelDefault<T> thisPanel = this;
protected boolean edited = false;
// public EditPanelDefault(DataChangeListener dcl, DataProvider<T> dataProvider) {
// this(dataProvider);
// addDataChangeListener(dcl);
// }
public EditPanelDefault(DataProvider<T> dataProvider) {
super();
listDCL = new HashSet<>();
this.dataProvider = dataProvider;
data = dataProvider.getData();
}
@Override
public abstract void setStartFocus();
@Override
public abstract String doValidation();
@Override
public void addDataChangeListener(DataChangeListener<T> dcl) {
listDCL.add(dcl);
}
@Override
public void removeDataChangeListener(DataChangeListener<T> dcl) {
listDCL.remove(dcl);
}
@Override
public void cleanup() {
edited = false;
data = null;
listDCL.clear();
removeAll();
}
public void broadcast(DataChangeEvent<T> dce) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, SQLIntegrityConstraintViolationException {
for (DataChangeListener<T> dcl : listDCL) {
dcl.dataChanged(dce);
}
}
public void reload(T data) {
this.data = data;
edited = false;
}
@Override
public void reload() {
data = dataProvider.getData();
edited = false;
}
public abstract void refreshDisplay();
}