package edu.ualberta.med.biobank.widgets.infotables.entry;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import edu.ualberta.med.biobank.dialogs.select.SelectClinicContactDialog;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableAddItemListener;
import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableDeleteItemListener;
import edu.ualberta.med.biobank.gui.common.widgets.InfoTableEvent;
import edu.ualberta.med.biobank.model.Contact;
/**
* Allows the user to select a clinic and a contact from a clinic. Note that
* some clinics may have more than one contact.
*/
public class ClinicAddInfoTable extends StudyContactEntryInfoTable {
private List<Contact> origContacts;
public ClinicAddInfoTable(Composite parent,
List<Contact> contacts) {
super(parent, contacts);
this.origContacts = new ArrayList<Contact>(contacts);
addDeleteSupport();
}
@Override
protected boolean isEditMode() {
return true;
}
public void createClinicContact() {
SelectClinicContactDialog dlg;
try {
dlg = new SelectClinicContactDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(),
getList());
if (dlg.open() == Dialog.OK) {
notifyListeners();
Contact contact = dlg.getSelection();
if (contact != null) {
getList().add(contact);
setList(getList());
}
}
} catch (Exception e) {
BgcPlugin.openAsyncError(
Messages.ClinicAddInfoTable_retrieve_error_title, e);
}
}
private void addDeleteSupport() {
addAddItemListener(new IInfoTableAddItemListener<Contact>() {
@Override
public void addItem(InfoTableEvent<Contact> event) {
createClinicContact();
}
});
addDeleteItemListener(new IInfoTableDeleteItemListener<Contact>() {
@Override
public void deleteItem(InfoTableEvent<Contact> event) {
Contact contact = getSelection();
if (contact != null) {
if (!BgcPlugin.openConfirm(
Messages.ClinicAddInfoTable_delete_confirm_title, NLS
.bind(
Messages.ClinicAddInfoTable_delete_confirm_msg,
contact.getName()))) {
return;
}
getList().remove(contact);
setList(getList());
notifyListeners();
}
}
});
}
public void setContacts(List<Contact> contacts) {
setList(contacts);
}
@Override
public void reload() {
setList(origContacts);
}
}