package com.hilotec.elexis.kgview;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.data.events.ElexisEventListener;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.data.Patient;
import ch.rgw.tools.StringTool;
public abstract class PatientTextFView extends SimpleTextFView implements ElexisEventListener {
protected final String dbfield;
protected PatientTextFView(String field){
dbfield = field;
}
@Override
protected void initialize(){
Patient p = ElexisEventDispatcher.getSelectedPatient();
if (p != null) {
patientChanged(p);
}
ElexisEventDispatcher.getInstance().addListeners(this);
}
@Override
protected void fieldChanged(){
Patient p = ElexisEventDispatcher.getSelectedPatient();
if(p!=null) p.set(dbfield, getText());
}
private void patientChanged(Patient p){
setEnabled(true);
setText(StringTool.unNull(p.get(dbfield)));
}
public void catchElexisEvent(final ElexisEvent ev){
UiDesk.syncExec(new Runnable() {
public void run(){
Patient p = (Patient) ev.getObject();
if (ev.getType() == ElexisEvent.EVENT_DESELECTED) {
p.set(dbfield, getText());
setEnabled(false);
} else if (ev.getType() == ElexisEvent.EVENT_SELECTED) {
patientChanged(p);
}
}
});
}
private final ElexisEvent eetmpl = new ElexisEvent(null, Patient.class,
ElexisEvent.EVENT_SELECTED | ElexisEvent.EVENT_DESELECTED);
public ElexisEvent getElexisEventFilter(){
return eetmpl;
}
@Override
public void dispose(){
ElexisEventDispatcher.getInstance().removeListeners(this);
super.dispose();
}
}