/******************************************************************************* * Copyright (c) 2004, 2007 Boeing. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Boeing - initial API and implementation *******************************************************************************/ package org.eclipse.osee.framework.ui.skynet; import java.util.logging.Level; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.UserManager; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.listener.IAccessControlEventListener; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.event.model.AccessControlEventType; import org.eclipse.osee.framework.skynet.core.event.model.Sender; import org.eclipse.osee.framework.ui.plugin.OseeStatusContributionItem; import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; import org.eclipse.osee.framework.ui.skynet.dialogs.AuthenticationDialog; import org.eclipse.osee.framework.ui.swt.Displays; import org.eclipse.osee.framework.ui.swt.ImageManager; import org.eclipse.osee.framework.ui.swt.OverlayImage; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.PlatformUI; /** * @author Roberto E. Escobar */ public final class SessionContributionItem extends OseeStatusContributionItem implements IAccessControlEventListener { private static final String CONTRIBUTION_ITEM_ID = "session.contribution.item"; private static final Image DISABLED_IMAGE = new OverlayImage(ImageManager.getImage(FrameworkImage.USER), ImageManager.getImageDescriptor(FrameworkImage.SLASH_RED_OVERLAY)).createImage(); private static final String ENABLED_TOOLTIP = "Authenticated as: %s (%s) - session(%s)\nDouble-Click to Log Off."; private static final String DISABLED_TOOLTIP = "Not Authenticated.\nDouble-Click to Log On."; public SessionContributionItem() { super(CONTRIBUTION_ITEM_ID); init(); updateStatus(true); OseeEventManager.addListener(this); } private void init() { setActionHandler(new Action() { @Override public void run() { try { if (ClientSessionManager.isSessionValid()) { boolean result = MessageDialog.openQuestion(AWorkbench.getActiveShell(), "Log Off...", "Are you sure you want to log off and exit OSEE?"); if (result) { ClientSessionManager.releaseSession(); PlatformUI.getWorkbench().close(); } } else { // if (oseeAuthentication.isLoginAllowed()) { AuthenticationDialog.openDialog(); // } else { // oseeAuthentication.authenticate("", "", "", false); // } if (ClientSessionManager.isSessionValid()) { Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { try { AccessControlEvent event = new AccessControlEvent(); event.setEventType(AccessControlEventType.UserAuthenticated); OseeEventManager.kickAccessControlArtifactsEvent(this, event); } catch (Exception ex) { OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); } } }); } } } catch (OseeCoreException ex) { OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); } } }); } @Override public void dispose() { OseeEventManager.removeListener(this); super.dispose(); } @Override public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) { if (accessControlEvent.getEventType() == AccessControlEventType.UserAuthenticated) { Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { updateStatus(ClientSessionManager.isSessionValid()); } }); } } @Override protected Image getDisabledImage() { return DISABLED_IMAGE; } @Override protected String getDisabledToolTip() { return DISABLED_TOOLTIP; } @Override protected Image getEnabledImage() { return ImageManager.getImage(FrameworkImage.USER); } @Override protected String getEnabledToolTip() { if (ClientSessionManager.isSessionValid()) { String skynetName = "Unknown"; String userId = "-"; String sessionId = "-"; try { skynetName = UserManager.getUser().getName(); userId = UserManager.getUser().getUserId(); sessionId = ClientSessionManager.getSessionId(); } catch (OseeCoreException ex) { OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); } return String.format(ENABLED_TOOLTIP, skynetName, userId, sessionId); } return DISABLED_TOOLTIP; } }