package org.eclipse.emf.emfstore.client.ui.controller;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.model.controller.callbacks.CommitCallback;
import org.eclipse.emf.emfstore.client.ui.dialogs.CommitDialog;
import org.eclipse.emf.emfstore.client.ui.handlers.AbstractEMFStoreUIController;
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.LogMessage;
import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
public class UICommitProjectController extends AbstractEMFStoreUIController implements CommitCallback {
public UICommitProjectController(Shell shell) {
super(shell);
}
public PrimaryVersionSpec commit(ProjectSpace projectSpace) throws EmfStoreException {
return commit(projectSpace, null);
}
public PrimaryVersionSpec commit(ProjectSpace projectSpace, LogMessage logMessage) throws EmfStoreException {
openProgress();
PrimaryVersionSpec commit = projectSpace.commit(logMessage, this, getProgressMonitor());
closeProgress();
return commit;
}
public void noLocalChanges(ProjectSpace projectSpace) {
MessageDialog.openInformation(getShell(), null, "No local changes in your project. No need to commit.");
closeProgress();
}
public boolean baseVersionOutOfDate(ProjectSpace projectSpace) {
String message = "Your project is outdated, you need to update before commit. Do you want to update now?";
if (confirmationDialog(message)) {
// TODO results?
try {
new UIUpdateProjectController(getShell()).update(projectSpace);
} catch (EmfStoreException e) {
handleException(e);
}
}
closeProgress();
return true;
}
public boolean inspectChanges(ProjectSpace projectSpace, ChangePackage changePackage) {
if (changePackage.getOperations().isEmpty()) {
MessageDialog.openInformation(getShell(), "No local changes",
"Your local changes were mutually exclusive.\nThey are no changes pending for commit.");
return false;
}
CommitDialog commitDialog = new CommitDialog(getShell(), changePackage, projectSpace);
if (commitDialog.open() == Dialog.OK) {
changePackage.getLogMessage().setMessage(commitDialog.getLogText());
return true;
}
return false;
}
}