com.collabnet.subversion.merge.actions.UndoMergeAction.java Source code

Java tutorial

Introduction

Here is the source code for com.collabnet.subversion.merge.actions.UndoMergeAction.java

Source

/*******************************************************************************
 * Copyright (c) 2009 CollabNet.
 * 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:
 *     CollabNet - initial API and implementation
 ******************************************************************************/
package com.collabnet.subversion.merge.actions;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.ActionDelegate;
import org.tigris.subversion.subclipse.ui.actions.RevertAction;

import com.collabnet.subversion.merge.Activator;
import com.collabnet.subversion.merge.MergeOutput;
import com.collabnet.subversion.merge.Messages;
import com.collabnet.subversion.merge.UndoMergeOperation;
import com.collabnet.subversion.merge.views.MergeResultsView;
import com.collabnet.subversion.merge.wizards.DialogWizard;
import com.collabnet.subversion.merge.wizards.MergeWizardDialog;

public class UndoMergeAction extends ActionDelegate {
    private IStructuredSelection fSelection;

    public void run(IAction action) {
        DialogWizard dialogWizard = new DialogWizard(DialogWizard.UNDO_MERGE_WARNING);
        MergeWizardDialog dialog = new MergeWizardDialog(Display.getDefault().getActiveShell(), dialogWizard, true);
        if (dialog.open() == MergeWizardDialog.CANCEL)
            return;
        final ArrayList resources = new ArrayList();
        ArrayList mergeOutputs = new ArrayList();
        Iterator iter = fSelection.iterator();
        while (iter.hasNext()) {
            Object object = iter.next();
            if (object instanceof MergeOutput) {
                MergeOutput mergeOutput = (MergeOutput) object;
                mergeOutputs.add(mergeOutput);
                IResource resource = mergeOutput.getResource();
                resources.add(resource);
            }
        }
        final IResource[] resourceArray = new IResource[resources.size()];
        resources.toArray(resourceArray);
        UndoMergeOperation undoMergeOperation = new UndoMergeOperation(MergeResultsView.getView(), resourceArray);
        try {
            undoMergeOperation.run();
        } catch (Exception e) {
            Activator.handleError(Messages.UndoMergeAction_error, e);
            MessageDialog.openError(Display.getCurrent().getActiveShell(), Messages.UndoMergeAction_title,
                    e.getMessage());
            return;
        }
        iter = mergeOutputs.iterator();
        while (iter.hasNext()) {
            MergeOutput mergeOutput = (MergeOutput) iter.next();
            mergeOutput.delete();
        }
        MergeResultsView.getView().refresh();
        dialogWizard = new DialogWizard(DialogWizard.UNDO_MERGE_COMPLETED);
        dialog = new MergeWizardDialog(Display.getDefault().getActiveShell(), dialogWizard, true);
        if (dialog.open() == MergeWizardDialog.CANCEL)
            return;
        RevertAction revertAction = new RevertAction();
        revertAction.setShowNothingToRevertMessage(false);
        IStructuredSelection selection = new IStructuredSelection() {
            public Object getFirstElement() {
                return resourceArray[0];
            }

            public Iterator iterator() {
                return toList().iterator();
            }

            public int size() {
                return resourceArray.length;
            }

            public Object[] toArray() {
                return resourceArray;
            }

            public List toList() {
                return resources;
            }

            public boolean isEmpty() {
                return resources.isEmpty();
            }
        };
        revertAction.selectionChanged(null, selection);
        revertAction.run(null);
    }

    public void selectionChanged(IAction action, ISelection sel) {
        if (sel instanceof IStructuredSelection) {
            fSelection = (IStructuredSelection) sel;
        }
    }
}