blob: f6161a842d23b21896eafac4375f3de6a9b78385 [file] [log] [blame]
/*******************************************************************************
* Copyright 2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
******************************************************************************/
package org.eclipse.emf.emfstore.client.ui.util;
import java.util.concurrent.Callable;
import org.eclipse.emf.emfstore.client.model.PostWorkspaceInitiator;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.model.ServerInfo;
import org.eclipse.emf.emfstore.client.model.Usersession;
import org.eclipse.emf.emfstore.client.model.Workspace;
import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
import org.eclipse.emf.emfstore.client.model.observers.LoginObserver;
import org.eclipse.emf.emfstore.client.model.observers.LogoutObserver;
import org.eclipse.emf.emfstore.client.model.observers.ShareObserver;
import org.eclipse.emf.emfstore.client.model.util.WorkspaceUtil;
import org.eclipse.emf.emfstore.client.ui.common.RunInUI;
import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
/**
* This class is responsible for keeping the workspace's project infos update to date.
*
*/
public class ProjectListUpdater implements PostWorkspaceInitiator, ShareObserver, LoginObserver, LogoutObserver {
private Workspace workspace;
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.PostWorkspaceInitiator#workspaceInitComplete(org.eclipse.emf.emfstore.client.model.Workspace)
*/
public void workspaceInitComplete(Workspace currentWorkspace) {
this.workspace = currentWorkspace;
WorkspaceManager.getObserverBus().register(this);
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.LoginObserver#loginCompleted(org.eclipse.emf.emfstore.client.model.Usersession)
*/
public void loginCompleted(Usersession session) {
try {
update(session);
} catch (EmfStoreException e) {
// fail silently
WorkspaceUtil.logException("Couldn't project infos upon loginCompleted.", e);
}
updateACUser(session);
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.ShareObserver#shareDone(org.eclipse.emf.emfstore.client.model.ProjectSpace)
*/
public void shareDone(ProjectSpace projectSpace) {
try {
update(projectSpace.getUsersession());
} catch (EmfStoreException e) {
// fail silently
WorkspaceUtil.logException("Couldn't project infos upon shareDone.", e);
}
}
private void updateACUser(Usersession session) {
try {
workspace.updateACUser(session);
} catch (EmfStoreException e) {
// fail silently
WorkspaceUtil.logException("Couldn't update ACUser.", e);
}
}
private void update(final Usersession session) throws EmfStoreException {
RunInUI.WithException.run(new Callable<Void>() {
public Void call() throws Exception {
workspace.updateProjectInfos(session);
return null;
}
});
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.client.model.observers.LogoutObserver#logoutCompleted(org.eclipse.emf.emfstore.client.model.Usersession)
*/
public void logoutCompleted(Usersession session) {
ServerInfo serverInfo = session.getServerInfo();
if (serverInfo != null) {
serverInfo.getProjectInfos().clear();
}
}
}