blob: f53491ac8fad0e07b18c0ae4bf1624a051d69a0c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Ericsson AB.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial API and implementation
*******************************************************************************/
package org.eclipse.egerrit.internal.ui.table.provider;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.egerrit.internal.core.EGerritCorePlugin;
import org.eclipse.egerrit.internal.core.GerritClient;
import org.eclipse.egerrit.internal.core.command.DeleteDraftRevisionCommand;
import org.eclipse.egerrit.internal.core.exception.EGerritException;
import org.eclipse.egerrit.internal.model.ChangeInfo;
import org.eclipse.egerrit.internal.model.ModelHelpers;
import org.eclipse.egerrit.internal.model.ModelPackage;
import org.eclipse.egerrit.internal.model.RevisionInfo;
import org.eclipse.egerrit.internal.ui.editors.ModelLoader;
import org.eclipse.egerrit.internal.ui.tabs.ObservableCollector;
import org.eclipse.egerrit.internal.ui.utils.Messages;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
/**
* @author lmcbout
*/
public class DeleteDraftRevisionProvider {
private Button fDeleteDraftRevisionButton;
private DataBindingContext bindingContext = new DataBindingContext();
private ObservableCollector observableCollector;
public void create(Composite parent, GerritClient gerritClient, ChangeInfo changeInfo) {
fDeleteDraftRevisionButton = new Button(parent, SWT.BORDER);
fDeleteDraftRevisionButton.setText(Messages.DeleteDraft_Text);
GridData gdDeleteDraft = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
fDeleteDraftRevisionButton.setLayoutData(gdDeleteDraft);
fDeleteDraftRevisionButton.setToolTipText(Messages.DeleteDraft_Tip);
IObservableValue revisionInfoObserveValue = EMFProperties
.value(ModelPackage.Literals.CHANGE_INFO__USER_SELECTED_REVISION)
.value(ModelPackage.Literals.REVISION_INFO__DELETEABLE)
.observe(changeInfo);
bindingContext.bindValue(WidgetProperties.enabled().observe(fDeleteDraftRevisionButton),
revisionInfoObserveValue, null, null);
fDeleteDraftRevisionButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
if (!MessageDialog.openConfirm(fDeleteDraftRevisionButton.getParent().getShell(),
Messages.DeleteDraft_Dialogue_Title, NLS.bind(Messages.DeleteDraft_Dialogue_Message,
changeInfo.getUserSelectedRevision().get_number(), changeInfo.getSubject()))) {
return;
}
DeleteDraftRevisionCommand deleteDraftChangeCmd = gerritClient.deleteDraftRevision(changeInfo.getId(),
changeInfo.getUserSelectedRevision().getId());
try {
deleteDraftChangeCmd.call();
if (changeInfo.getRevisions().size() == 1) {
//We are deleting the last draft, close the editor
IWorkbench workbench = PlatformUI.getWorkbench();
final IWorkbenchPage activePage = workbench.getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = activePage.getActiveEditor();
activePage.closeEditor(editor, false);
} else {
//Change the user selected revision to the most recent one
Collection<RevisionInfo> revisions = new ArrayList<>(changeInfo.getRevisions().values());
revisions.remove(changeInfo.getUserSelectedRevision());
changeInfo.setUserSelectedRevision(
changeInfo.getRevisionByNumber(ModelHelpers.getHighestRevisionNumber(revisions)));
ModelLoader ml = ModelLoader.initialize(gerritClient, changeInfo);
ml.reload(false);
ml.dispose();
}
} catch (EGerritException e1) {
EGerritCorePlugin.logError(gerritClient.getRepository().formatGerritVersion() + e1.getMessage());
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// ignore
}
});
observableCollector = new ObservableCollector(bindingContext);
}
public void dispose() {
observableCollector.dispose();
bindingContext.dispose();
}
}