package edu.ualberta.med.biobank.views; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISourceProviderListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; 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.treeview.AbstractAdapterBase; import edu.ualberta.med.biobank.widgets.trees.AdapterTreeWidget; public abstract class AbstractViewWithAdapterTree extends AbstractViewWithTree<AbstractAdapterBase> { protected AdapterTreeWidget adaptersTree; protected AbstractAdapterBase rootNode; private ISourceProviderListener sourceListener; private static BgcLogger logger = BgcLogger .getLogger(AbstractViewWithAdapterTree.class.getName()); protected AbstractViewWithAdapterTree() { sourceListener = new ISourceProviderListener() { @Override public void sourceChanged(int sourcePriority, String sourceName, Object sourceValue) { if (sourceName .equals(LoginPermissionSessionState.LOGIN_STATE_SOURCE_NAME)) { if (sourceValue != null) { if (sourceValue.equals(LoginPermissionSessionState.LOGGED_IN)) reload(); else if (sourceValue .equals(LoginPermissionSessionState.LOGGED_OUT)) clear(); } } } @SuppressWarnings("rawtypes") @Override public void sourceChanged(int sourcePriority, Map sourceValuesByName) { // } }; BgcPlugin.getLoginStateSourceProvider().addSourceProviderListener( sourceListener); } @Override public TreeViewer getTreeViewer() { if (adaptersTree == null) { return null; } return adaptersTree.getTreeViewer(); } @Override public void setFocus() { adaptersTree.setFocus(); } @Override public List<AbstractAdapterBase> searchNode(Class<?> searchedClass, Integer objectId) { return rootNode.search(searchedClass, objectId); } public abstract void reload(); public void opened() { // default does nothing } public abstract String getId(); public void activate() { IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); if (window != null) { IWorkbenchPage page = window.getActivePage(); if (page != null) { try { page.showView(getId()); } catch (PartInitException pie) { logger .error( Messages.AbstractViewWithAdapterTree_view_activate_error_title, pie); } } } } public void clear() { if (rootNode != null) rootNode.removeAll(); } @Override public void createPartControl(Composite parent) { getSite().getWorkbenchWindow().getSelectionService() .addSelectionListener(new ISelectionListener() { @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (part != AbstractViewWithAdapterTree.this && selection instanceof IStructuredSelection) { IStructuredSelection strucSel = (IStructuredSelection) selection; if (!strucSel.isEmpty()) { if (strucSel.getFirstElement() instanceof AbstractAdapterBase) { // if a form is selected, the corresponding // adapter is in strucSel setSelectedNode((AbstractAdapterBase) strucSel .getFirstElement()); } } } } }); createPartControlInternal(parent); } protected abstract void createPartControlInternal(Composite parent); @Override public void dispose() { if (sourceListener != null) BgcPlugin.getLoginStateSourceProvider() .removeSourceProviderListener(sourceListener); super.dispose(); } }