package edu.ualberta.med.biobank.helpers; import java.awt.Desktop; import java.net.URI; import org.acegisecurity.providers.rcp.RemoteAuthenticationException; import org.eclipse.core.runtime.Platform; import org.springframework.remoting.RemoteAccessException; import edu.ualberta.med.biobank.BiobankPlugin; import edu.ualberta.med.biobank.client.util.ServiceConnection; import edu.ualberta.med.biobank.common.wrappers.UserWrapper; import edu.ualberta.med.biobank.gui.common.BgcLogger; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.server.applicationservice.BiobankApplicationService; import edu.ualberta.med.biobank.server.applicationservice.exceptions.ClientVersionInvalidException; import edu.ualberta.med.biobank.server.applicationservice.exceptions.ServerVersionInvalidException; import edu.ualberta.med.biobank.server.applicationservice.exceptions.ServerVersionNewerException; import edu.ualberta.med.biobank.server.applicationservice.exceptions.ServerVersionOlderException; import gov.nih.nci.system.applicationservice.ApplicationException; public class SessionHelper implements Runnable { private static BgcLogger logger = BgcLogger.getLogger(SessionHelper.class .getName()); private String serverUrl; private String userName; private String password; private BiobankApplicationService appService; private UserWrapper user; private static final String DOWNLOAD_URL = "http://aicml-med.cs.ualberta.ca/CBSR/latest.html"; //$NON-NLS-1$ private static final String DEFAULT_TEST_USER = "testuser"; //$NON-NLS-1$ private static final String DEFAULT_TEST_USER_PWD = "test"; //$NON-NLS-1$ private static final String SECURE_CONNECTION_URI = "https://"; //$NON-NLS-1$ private static final String NON_SECURE_CONNECTION_URI = "http://"; //$NON-NLS-1$ private static final String BIOBANK_URL = "/biobank"; //$NON-NLS-1$ public SessionHelper(String server, boolean secureConnection, String userName, String password) { if (secureConnection) { this.serverUrl = SECURE_CONNECTION_URI; } else { this.serverUrl = NON_SECURE_CONNECTION_URI; } this.serverUrl += server + BIOBANK_URL; this.userName = userName; this.password = password; appService = null; } @Override public void run() { try { if (userName.length() == 0) { if (BiobankPlugin.getDefault().isDebugging()) { userName = DEFAULT_TEST_USER; appService = ServiceConnection.getAppService(serverUrl, userName, DEFAULT_TEST_USER_PWD); } else { appService = ServiceConnection.getAppService(serverUrl); } } else { appService = ServiceConnection.getAppService(serverUrl, userName, password); } String clientVersion = Platform.getProduct().getDefiningBundle() .getVersion().toString(); logger.debug(Messages.SessionHelper_clientVersion_debug_msg + clientVersion); appService.checkVersion(clientVersion); user = UserWrapper.getUser(appService, userName); } catch (ApplicationException exp) { if (exp instanceof ServerVersionInvalidException) { BgcPlugin.openError( Messages.SessionHelper_server_version_error_title, Messages.SessionHelper_server_noversion_error_msg, exp); } else if (exp instanceof ServerVersionNewerException) { if (BgcPlugin.openConfirm( Messages.SessionHelper_server_version_error_title, exp.getMessage() + Messages.SessionHelper_server_oldversion_error_msg)) { try { Desktop.getDesktop().browse(new URI(DOWNLOAD_URL)); } catch (Exception e1) { // ignore } logger.error(exp.getMessage(), exp); } } else if (exp instanceof ServerVersionOlderException) { BgcPlugin.openError( Messages.SessionHelper_server_version_error_title, exp.getMessage(), exp); } else if (exp instanceof ClientVersionInvalidException) { BgcPlugin.openError(Messages.SessionHelper_client_error_title, Messages.SessionHelper_client_invalid_error_msg, exp); } else if (exp.getCause() != null && exp.getCause() instanceof RemoteAuthenticationException) { BgcPlugin.openAsyncError( Messages.SessionHelper_login_error_title, Messages.SessionHelper_login_error_msg, exp); } else if (exp.getCause() != null && exp.getCause() instanceof RemoteAccessException) { BgcPlugin.openAsyncError( Messages.SessionHelper_login_error_title, Messages.SessionHelper_login_server_error_msg, exp); } } catch (Exception exp) { BgcPlugin.openAsyncError(Messages.SessionHelper_login_error_title, exp); } } public BiobankApplicationService getAppService() { return appService; } public UserWrapper getUser() { return user; } }