package edu.ualberta.med.biobank.sourceproviders; import java.util.HashMap; import java.util.Map; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.ISources; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.services.ISourceProviderService; import edu.ualberta.med.biobank.common.wrappers.UserWrapper; import edu.ualberta.med.biobank.gui.common.BgcLogger; import edu.ualberta.med.biobank.gui.common.LoginPermissionSessionState; public class UserState extends AbstractSourceProvider { private static BgcLogger logger = BgcLogger.getLogger(UserState.class .getName()); public final static String HAS_WORKING_CENTER_SOURCE_NAME = "edu.ualberta.med.biobank.sourceprovider.hasWorkingCenter"; //$NON-NLS-1$ private boolean hasWorkingCenter; @Override public String[] getProvidedSourceNames() { return new String[] { HAS_WORKING_CENTER_SOURCE_NAME }; } @Override public Map<String, String> getCurrentState() { Map<String, String> currentStateMap = new HashMap<String, String>(1); currentStateMap.put(HAS_WORKING_CENTER_SOURCE_NAME, Boolean.toString(hasWorkingCenter)); return currentStateMap; } @Override public void dispose() { } private void setHasWorkingCenter(boolean hasWorkingCenter) { if (this.hasWorkingCenter == hasWorkingCenter) return; // no change this.hasWorkingCenter = hasWorkingCenter; fireSourceChanged(ISources.WORKBENCH, HAS_WORKING_CENTER_SOURCE_NAME, hasWorkingCenter); } public void setUser(UserWrapper user) { try { setHasWorkingCenter(user != null && user.getCurrentWorkingCenter() != null); } catch (Exception e) { logger.error("Error setting session state", e); //$NON-NLS-1$ } } public static AbstractSourceProvider getUserStateSourceProvider() { IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); ISourceProviderService service = (ISourceProviderService) window .getService(ISourceProviderService.class); return (LoginPermissionSessionState) service .getSourceProvider(UserState.HAS_WORKING_CENTER_SOURCE_NAME); } }