package edu.ualberta.med.biobank.forms;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import edu.ualberta.med.biobank.BiobankPlugin;
import edu.ualberta.med.biobank.gui.common.BgcLogger;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.gui.common.forms.FieldInfo;
import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseText;
import edu.ualberta.med.biobank.treeview.listeners.AdapterChangedEvent;
import edu.ualberta.med.biobank.treeview.listeners.AdapterChangedListener;
/**
* The base class for all BioBank Java Client view forms. The forms are usually
* created when the user selects a node in the <code>SessionView</code> tree
* view.
*/
public abstract class BiobankViewForm extends BiobankFormBase {
private static final String RELOAD_COMMAND_ID =
"edu.ualberta.med.biobank.commands.reload";
private static final String EDIT_COMMAND_ID =
"edu.ualberta.med.biobank.commands.edit";
private static final String CONTEXT_VIEW_FORM = "biobank.context.viewForm";
private static BgcLogger logger = BgcLogger.getLogger(BiobankViewForm.class
.getName());
protected String sessionName;
private AdapterChangedListener adapterChangedListener;
@Override
public void init(IEditorSite editorSite, IEditorInput input)
throws PartInitException {
super.init(editorSite, input);
if (adapter != null) {
adapterChangedListener = new AdapterChangedListener() {
@Override
public void changed(AdapterChangedEvent event) {
try {
reload();
} catch (Exception e) {
logger.error("Error sending event", e);
}
}
};
adapter.addChangedListener(adapterChangedListener);
}
}
@Override
public void dispose() {
if (adapter != null) {
Assert.isNotNull(adapterChangedListener);
adapter.removeChangedListener(adapterChangedListener);
}
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
addToolbarButtons();
IContextService contextService = (IContextService) getSite()
.getService(IContextService.class);
contextService.activateContext(CONTEXT_VIEW_FORM);
}
@Override
public boolean isDirty() {
return false;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
protected void setWidgetValues(Map<String, FieldInfo> fieldsMap, Object bean) {
for (Entry<String, FieldInfo> entry : fieldsMap.entrySet()) {
String label = entry.getKey();
FieldInfo fi = entry.getValue();
IObservableValue ov = BeansObservables.observeValue(bean, label);
Object value = ov.getValue();
if (value != null) {
Control widget = getWidget(label);
if ((fi.widgetClass == Combo.class)
|| (fi.widgetClass == BgcBaseText.class)
|| (fi.widgetClass == Label.class)) {
((BgcBaseText) widget).setText((String) value);
}
}
}
}
protected void addToolbarButtons() {
addReloadAction();
addEditAction();
form.updateToolBar();
}
public void edit() {
getSite().getPage().closeEditor(BiobankViewForm.this, false);
adapter.openEntryForm();
}
protected void addEditAction() {
if ((adapter != null) && adapter.isEditable()) {
CommandContributionItem edit = new CommandContributionItem(
new CommandContributionItemParameter(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow(),
"Edit", EDIT_COMMAND_ID, null,
BiobankPlugin.getImageDescriptor(BgcPlugin.IMG_EDIT_FORM),
null, null, "Edit",
"Edit",
"Edit", SWT.NONE,
"Edit", true));
form.getToolBarManager().add(edit);
}
}
protected void addReloadAction() {
CommandContributionItem reload = new CommandContributionItem(
new CommandContributionItemParameter(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow(),
"Reload", RELOAD_COMMAND_ID, null,
BiobankPlugin.getImageDescriptor(BgcPlugin.IMG_RELOAD_FORM),
null, null, "Reload",
"Reload",
"Reload", SWT.NONE,
"Reload", true));
form.getToolBarManager().add(reload);
}
}