package org.eclipse.emf.emfstore.client.model.controller; import java.util.Date; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.emfstore.client.model.Usersession; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.client.model.connectionmanager.ServerCall; import org.eclipse.emf.emfstore.client.model.impl.ProjectSpaceBase; import org.eclipse.emf.emfstore.client.model.observers.LoginObserver; import org.eclipse.emf.emfstore.client.model.observers.ShareObserver; import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException; import org.eclipse.emf.emfstore.server.model.ProjectInfo; import org.eclipse.emf.emfstore.server.model.versioning.LogMessage; import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory; public class ShareController extends ServerCall<Void> { public ShareController(ProjectSpaceBase projectSpaceImpl, Usersession session, IProgressMonitor monitor) { super(projectSpaceImpl); // if session is null, session will be injected by sessionmanager setUsersession(session); setProgressMonitor(monitor); } @Override protected Void run() throws EmfStoreException { doRun(); return null; } @SuppressWarnings("unchecked") private void doRun() throws EmfStoreException { getProgressMonitor().beginTask("Sharing Project", 100); getProgressMonitor().worked(1); getProgressMonitor().subTask("Preparing project for sharing"); LogMessage logMessage = VersioningFactory.eINSTANCE.createLogMessage(); logMessage.setAuthor(getUsersession().getUsername()); logMessage.setClientDate(new Date()); logMessage.setMessage("Initial commit"); ProjectInfo createdProject; getProjectSpace().stopChangeRecording(); getProjectSpace().getStatePersister().setAutoSave(false); getProgressMonitor().worked(10); if (getProgressMonitor().isCanceled()) { getProjectSpace().getStatePersister().setAutoSave(true); getProjectSpace().getStatePersister().saveDirtyResources(); getProjectSpace().startChangeRecording(); getProgressMonitor().done(); } getProgressMonitor().subTask("Sharing project with server"); createdProject = WorkspaceManager .getInstance() .getConnectionManager() .createProject(getUsersession().getSessionId(), getProjectSpace().getProjectName(), getProjectSpace().getProjectDescription(), logMessage, getProjectSpace().getProject()); getProgressMonitor().worked(70); getProgressMonitor().subTask("Finalizing share"); // set attributes after server call this.setUsersession(getUsersession()); WorkspaceManager.getObserverBus().register(getProjectSpace(), LoginObserver.class); getProjectSpace().getStatePersister().setAutoSave(true); getProjectSpace().getStatePersister().saveDirtyResources(); getProjectSpace().startChangeRecording(); getProjectSpace().setBaseVersion(createdProject.getVersion()); getProjectSpace().setLastUpdated(new Date()); getProjectSpace().setProjectId(createdProject.getProjectId()); getProjectSpace().setUsersession(getUsersession()); getProjectSpace().saveProjectSpaceOnly(); // TODO ASYNC implement File Upload with observer // If any files have already been added, upload them. getProjectSpace().getFileTransferManager().uploadQueuedFiles( new NullProgressMonitor()); getProjectSpace().getOperations().clear(); getProjectSpace().updateDirtyState(); getProgressMonitor().done(); WorkspaceManager.getObserverBus().notify(ShareObserver.class) .shareDone(getProjectSpace()); } }