package org.eclipse.emf.emfstore.client.ui.dialogs.login; import java.util.HashSet; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.emfstore.client.model.ServerInfo; import org.eclipse.emf.emfstore.client.model.Usersession; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.server.exceptions.AccessControlException; import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; public class LoginDialogController implements ILoginDialogController { private Usersession usersession; private ServerInfo serverInfo; public Usersession[] getKnownUsersessions() { HashSet<Object> set = new HashSet<Object>(); for (Usersession session : WorkspaceManager.getInstance().getCurrentWorkspace().getUsersessions()) { if (getServerInfo().equals(session.getServerInfo())) { set.add(session); } } return set.toArray(new Usersession[set.size()]); } private Usersession login() throws EmfStoreException { LoginDialog dialog = new LoginDialog(Display.getCurrent().getActiveShell(), this); dialog.setBlockOnOpen(true); if (dialog.open() != Window.OK || usersession == null) { throw new AccessControlException("Couldn't login."); } // contract #validate() sets the usersession; return this.usersession; } public boolean isUsersessionLocked() { if (getUsersession() == null) { return false; } return true; } public String getServerLabel() { return getServerInfo().getName(); } public void validate(Usersession usersession) throws EmfStoreException { // TODO login code usersession.logIn(); // if successful, else exception is thrown prior reaching this code EList<Usersession> usersessions = WorkspaceManager.getInstance().getCurrentWorkspace().getUsersessions(); if (!usersessions.contains(usersession)) { usersessions.add(usersession); } this.usersession = usersession; } public Usersession getUsersession() { return usersession; } public ServerInfo getServerInfo() { if (serverInfo != null) { return serverInfo; } return usersession.getServerInfo(); } public Usersession login(ServerInfo serverInfo) throws EmfStoreException { this.serverInfo = serverInfo; this.usersession = null; return login(); } public void login(Usersession usersession) throws EmfStoreException { this.serverInfo = null; this.usersession = usersession; login(); } }