blob: 4521c00d32c0af88133d631a6bd533cd412c0acb [file] [log] [blame]
package org.eclipse.emf.emfstore.standalone.ui.handlers;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.emfstore.standalone.core.artifacts.Artifact;
import org.eclipse.emf.emfstore.standalone.core.artifacts.ArtifactRegistry;
import org.eclipse.emf.emfstore.standalone.core.exceptions.NoActiveVCSProviderException;
import org.eclipse.emf.emfstore.standalone.core.util.FileUtil;
import org.eclipse.emf.emfstore.standalone.core.vcs.IVCSProvider;
import org.eclipse.emf.emfstore.standalone.core.vcs.VCSProviderRegistry;
import org.eclipse.emf.emfstore.standalone.core.workspace.ResourceFactoryRegistry;
import org.eclipse.emf.emfstore.standalone.ui.ArtifactMerger;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
public class ExecuteMergerHandler extends AbstractTeamProviderHandler implements IViewActionDelegate {
public Object execute(ExecutionEvent event) throws ExecutionException {
return null;
}
@Override
public void run(IAction action) {
if (selectedFile != null) {
IVCSProvider activeProvider = VCSProviderRegistry.getInstance().getActiveProvider();
if (activeProvider == IVCSProvider.NONE) {
MessageDialog.openWarning(Display.getCurrent().getActiveShell(), "Warning",
"The VCS provider could not be determined.");
return;
}
Artifact versionedArtifact = ArtifactRegistry.getInstance().getArtifact(
ResourceFactoryRegistry.CURRENT_URI);
// TODO: how can this be not initalized?
if (!versionedArtifact.isInitialized()) {
try {
versionedArtifact.initialize();
} catch (NoActiveVCSProviderException e) {
// should not happen because of guard above
}
}
ArtifactMerger merger = new ArtifactMerger(activeProvider,
selectedFile, versionedArtifact);
merger.merge();
} else {
MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Execute merging",
"Please first select a conflicting history file.");
}
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
if (!(selection instanceof StructuredSelection)) {
return;
}
StructuredSelection ss = (StructuredSelection) selection;
Object firstElement = ss.getFirstElement();
if (!(firstElement instanceof IFile)) {
return;
}
IFile file = (IFile) firstElement;
if (FileUtil.isHistoryFile(file)) {
selectedFile = file;
}
}
@Override
public void init(IViewPart view) {
// TODO Auto-generated method stub
}
}