blob: 16d377e451d6228c5a2b51423a6e068faa9f4a3c [file] [log] [blame]
/*******************************************************************************
* Copyright 2012 EclipseSource Muenchen GmbH.
*
* 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.handlers;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.ui.controller.UIUpdateProjectController;
import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
import org.eclipse.emf.emfstore.server.model.versioning.HistoryInfo;
import org.eclipse.emf.emfstore.server.model.versioning.RangeQuery;
import org.eclipse.emf.emfstore.server.model.versioning.Versions;
import org.eclipse.emf.emfstore.server.model.versioning.util.HistoryQueryBuilder;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.ui.dialogs.ListDialog;
/**
* Handler for updating a project to a specific version.<br/>
* It is assumed that the user previously has selected a {@link ProjectSpace} instance.<br/>
*
* @author ovonwesen
* @author emueller
* @author eneufeld
*/
public class UpdateProjectVersionHandler extends AbstractEMFStoreHandler {
@Override
public void handle() {
ProjectSpace ps = requireSelection(ProjectSpace.class);
if (ps != null) {
// TODO move logic to UIController
RangeQuery query = HistoryQueryBuilder.rangeQuery(ps.getBaseVersion(), 20, 0, false, false, false, false);
try {
List<HistoryInfo> historyInfo = ps.getHistoryInfo(query);
// filter base version
Iterator<HistoryInfo> iter = historyInfo.iterator();
while (iter.hasNext()) {
if (ps.getBaseVersion().equals(iter.next().getPrimerySpec())) {
iter.remove();
break;
}
}
if (historyInfo.size() == 0) {
new UIUpdateProjectController(getShell(), ps, Versions.createHEAD(ps.getBaseVersion())).execute();
return;
}
ListDialog listDialog = new ListDialog(getShell());
listDialog.setContentProvider(ArrayContentProvider.getInstance());
listDialog.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
HistoryInfo historyInfo = (HistoryInfo) element;
StringBuilder sb = new StringBuilder("Version ");
sb.append(Integer.toString(historyInfo.getPrimerySpec().getIdentifier()));
sb.append(" - ");
sb.append(historyInfo.getLogMessage().getMessage());
return sb.toString();
}
});
listDialog.setInput(historyInfo);
listDialog.setTitle("Select a Version to update to");
listDialog.setMessage("The project will be updated to the selected Version");
listDialog.setInitialSelections(new Object[] { historyInfo.get(0) });
int result = listDialog.open();
if (Dialog.OK == result) {
Object[] selection = listDialog.getResult();
HistoryInfo info = (HistoryInfo) selection[0];
new UIUpdateProjectController(getShell(), ps, Versions.createPRIMARY(info.getPrimerySpec()
.getIdentifier())).execute();
}
} catch (EmfStoreException e) {
}
}
}
}