package edu.ualberta.med.biobank.views;
import java.util.Map;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISourceProviderListener;
import org.eclipse.ui.part.ViewPart;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.permission.reports.ReportsPermission;
import edu.ualberta.med.biobank.common.reports.AbstractReportTreeNode;
import edu.ualberta.med.biobank.common.reports.BiobankReport;
import edu.ualberta.med.biobank.common.reports.ReportTreeNode;
import edu.ualberta.med.biobank.gui.common.BgcLogger;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.gui.common.LoginPermissionSessionState;
import edu.ualberta.med.biobank.widgets.trees.ReportTreeWidget;
public class ReportsView extends ViewPart {
public static BgcLogger logger = BgcLogger.getLogger(ReportsView.class
.getName());
public static final String ID =
"edu.ualberta.med.biobank.views.ReportsView"; //$NON-NLS-1$
public static ReportsView currentInstance;
private CTabFolder top;
private CTabItem specimenTab;
private ReportTreeWidget specimenTree;
private ReportTreeWidget clinicTree;
private ReportTreeWidget patientTree;
private ReportTreeWidget specimenTypeTree;
private ReportTreeWidget containerTree;
private CTabItem clinicTab;
private CTabItem patientTab;
private CTabItem specimenTypeTab;
private CTabItem containerTab;
private Boolean allowed = false;
private AbstractReportTreeNode specimenRoot;
private AbstractReportTreeNode clinicRoot;
private AbstractReportTreeNode patientRoot;
private AbstractReportTreeNode specimenTypeRoot;
private AbstractReportTreeNode containerRoot;
public ReportsView() {
currentInstance = this;
try {
if (SessionManager.getInstance().isConnected()) allowed =
SessionManager.getAppService().isAllowed(
new ReportsPermission());
} catch (Exception e) {
BgcPlugin.openAccessDeniedErrorMessage(e);
}
BgcPlugin.getLoginStateSourceProvider()
.addSourceProviderListener(new ISourceProviderListener() {
@SuppressWarnings("rawtypes")
@Override
public void sourceChanged(int sourcePriority,
Map sourceValuesByName) {
}
@Override
public void sourceChanged(int sourcePriority,
String sourceName, Object sourceValue) {
try {
if (sourceName
.equals(LoginPermissionSessionState.LOGIN_STATE_SOURCE_NAME)
&& sourceValue.equals(LoginPermissionSessionState.LOGGED_OUT)) {
allowed = false;
}
else if (sourceName
.equals(LoginPermissionSessionState.LOGIN_STATE_SOURCE_NAME)
&& sourceValue.equals(LoginPermissionSessionState.LOGGED_IN)) {
allowed =
SessionManager.getAppService().isAllowed(
new ReportsPermission());
}
reload();
} catch (Exception e) {
BgcPlugin.openAccessDeniedErrorMessage(e);
}
}
});
}
@Override
public void createPartControl(Composite parent) {
top = new CTabFolder(parent, SWT.BORDER);
GridLayout treeLayout = new GridLayout();
GridData treeGd =
new GridData(GridData.FILL, GridData.FILL, true, true);
// Specimens
specimenTab = new CTabItem(top, SWT.NONE);
specimenTab.setText(Messages.ReportsView_specimens_tab_label);
Composite specimenBody = new Composite(top, SWT.NONE);
specimenBody.setLayout(treeLayout);
specimenBody.setLayoutData(treeGd);
specimenTab.setControl(specimenBody);
specimenTree = new ReportTreeWidget(specimenBody);
specimenRoot = new AbstractReportTreeNode(""); //$NON-NLS-1$
specimenTree.setLayoutData(treeGd);
top.setSelection(specimenTab);
// Clinics
clinicTab = new CTabItem(top, SWT.NONE);
clinicTab.setText(Messages.ReportsView_clinics_tab_label);
Composite clinicBody = new Composite(top, SWT.NONE);
clinicBody.setLayout(treeLayout);
clinicBody.setLayoutData(treeGd);
clinicTab.setControl(clinicBody);
clinicTree = new ReportTreeWidget(clinicBody);
clinicRoot = new AbstractReportTreeNode(""); //$NON-NLS-1$
clinicTree.setLayoutData(treeGd);
// Patients
patientTab = new CTabItem(top, SWT.NONE);
patientTab.setText(Messages.ReportsView_patients_tab_label);
Composite patientBody = new Composite(top, SWT.NONE);
patientBody.setLayout(treeLayout);
patientBody.setLayoutData(treeGd);
patientTab.setControl(patientBody);
patientTree = new ReportTreeWidget(patientBody);
patientRoot = new AbstractReportTreeNode(""); //$NON-NLS-1$
patientTree.setLayoutData(treeGd);
// Specimen Types
specimenTypeTab = new CTabItem(top, SWT.NONE);
specimenTypeTab.setText(Messages.ReportsView_specTypes_tab_label);
Composite specimenTypeBody = new Composite(top, SWT.NONE);
specimenTypeBody.setLayout(treeLayout);
specimenTypeBody.setLayoutData(treeGd);
specimenTypeTab.setControl(specimenTypeBody);
specimenTypeTree = new ReportTreeWidget(specimenTypeBody);
specimenTypeRoot =
new AbstractReportTreeNode(""); //$NON-NLS-1$
specimenTypeTree.setLayoutData(treeGd);
// Containers
containerTab = new CTabItem(top, SWT.NONE);
containerTab.setText(Messages.ReportsView_containers_tab_label);
Composite containerBody = new Composite(top, SWT.NONE);
containerBody.setLayout(treeLayout);
containerBody.setLayoutData(treeGd);
containerTab.setControl(containerBody);
containerTree = new ReportTreeWidget(containerBody);
containerRoot = new AbstractReportTreeNode(""); //$NON-NLS-1$
containerTree.setLayoutData(treeGd);
initializeNewReports(specimenRoot, clinicRoot, patientRoot,
specimenTypeRoot, containerRoot);
setInputs();
}
public void setInputs() {
if (allowed) {
specimenTree.setInput(specimenRoot);
specimenTree.expandAll();
clinicTree.setInput(clinicRoot);
clinicTree.expandAll();
patientTree.setInput(patientRoot);
patientTree.expandAll();
specimenTypeTree.setInput(specimenTypeRoot);
specimenTypeTree.expandAll();
containerTree.setInput(containerRoot);
containerTree.expandAll();
}
}
private void initializeNewReports(AbstractReportTreeNode specimens,
AbstractReportTreeNode clinics, AbstractReportTreeNode patients,
AbstractReportTreeNode specimenTypes, AbstractReportTreeNode containers) {
String[] names = BiobankReport.getReportNames();
for (int i = 0; i < names.length; i++) {
try {
ReportTreeNode child = new ReportTreeNode(
BiobankReport.getReportByName(names[i]));
addInTree(specimens, clinics, patients, specimenTypes,
containers, child);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void addInTree(AbstractReportTreeNode specimens,
AbstractReportTreeNode clinics, AbstractReportTreeNode patients,
AbstractReportTreeNode specimenTypes,
AbstractReportTreeNode containers, ReportTreeNode child)
throws Exception {
switch (child.getReport().getType()) {
case SPECIMEN_TYPE:
specimenTypes.addChild(child);
child.setParent(specimenTypes);
break;
case SPECIMEN:
specimens.addChild(child);
child.setParent(specimens);
break;
case PATIENT:
patients.addChild(child);
child.setParent(patients);
break;
case CLINIC:
clinics.addChild(child);
child.setParent(clinics);
break;
case CONTAINER:
containers.addChild(child);
child.setParent(containers);
break;
default:
throw new Exception(NLS.bind("Unable to place report node: {0}", //$NON-NLS-1$
child.getLabel()));
}
}
public void reload() {
specimenTree.setInput(null);
clinicTree.setInput(null);
patientTree.setInput(null);
specimenTypeTree.setInput(null);
containerTree.setInput(null);
setInputs();
}
@Override
public void setFocus() {
}
}