package org.eclipse.emf.emfstore.client.model.controller; import java.util.List; import org.eclipse.emf.emfstore.client.model.ProjectSpace; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.client.model.connectionmanager.ServerCall; import org.eclipse.emf.emfstore.common.model.util.ModelUtil; import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException; import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage; import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec; public class RevertCommitController extends ServerCall<Void> { private final ProjectSpace projectSpace; private final PrimaryVersionSpec versionSpec; public RevertCommitController(ProjectSpace projectSpace, final PrimaryVersionSpec versionSpec) { this.projectSpace = projectSpace; this.versionSpec = versionSpec; } @Override protected Void run() throws EmfStoreException { ProjectSpace revertSpace = WorkspaceManager.getInstance().getCurrentWorkspace() .checkout(projectSpace.getUsersession(), projectSpace.getProjectInfo(), versionSpec); PrimaryVersionSpec sourceVersion = ModelUtil.clone(versionSpec); sourceVersion.setIdentifier(sourceVersion.getIdentifier() - 1); List<ChangePackage> changes = revertSpace.getChanges(sourceVersion, versionSpec); if (changes.size() != 1) { throw new EmfStoreException("Zero or more than 1 Change Package received for one revision!"); } ChangePackage changePackage = changes.get(0); ChangePackage reversedChangePackage = changePackage.reverse(); reversedChangePackage.apply(revertSpace.getProject(), true); return null; } }