package edu.ualberta.med.biobank.views;
import java.util.Map;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISourceProviderListener;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.permission.reports.ReportsPermission;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.gui.common.LoginPermissionSessionState;
import edu.ualberta.med.biobank.treeview.AbstractAdapterBase;
import edu.ualberta.med.biobank.treeview.RootNode;
import edu.ualberta.med.biobank.treeview.report.AbstractReportGroup;
import edu.ualberta.med.biobank.treeview.report.PrivateReportsGroup;
import edu.ualberta.med.biobank.treeview.report.SharedReportsGroup;
public class AdvancedReportsView extends AbstractAdministrationView {
public static final String ID =
"edu.ualberta.med.biobank.views.AdvancedReportsView"; //$NON-NLS-1$
private static AdvancedReportsView currentView;
private Boolean allowed = false;
public AdvancedReportsView() {
currentView = this;
SessionManager.addView(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) {
super.createPartControl(parent);
createNodes();
}
@Override
public void reload() {
rootNode.removeAll();
createNodes();
for (AbstractAdapterBase adapter : rootNode.getChildren()) {
adapter.rebuild();
}
super.reload();
}
public static AdvancedReportsView getCurrent() {
return currentView;
}
private void createNodes() {
if (allowed) {
AbstractReportGroup adapter = new PrivateReportsGroup(
(RootNode) rootNode, 0);
adapter.setParent(rootNode);
adapter.setModifiable(true);
rootNode.addChild(adapter);
adapter = new SharedReportsGroup((RootNode) rootNode, 1);
adapter.setParent(rootNode);
rootNode.addChild(adapter);
}
}
@Override
protected void internalSearch() {
//
}
@Override
protected String getTreeTextToolTip() {
return null;
}
@Override
public String getId() {
return ID;
}
@Override
protected void createRootNode() {
createOldRootNode();
}
}