Package org.eclipse.egit.ui.internal.repository.tree.command

Source Code of org.eclipse.egit.ui.internal.repository.tree.command.ResetCommand

/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* 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:
*    Mathias Kinzler (SAP AG) - initial implementation
*******************************************************************************/
package org.eclipse.egit.ui.internal.repository.tree.command;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.egit.core.internal.job.JobUtil;
import org.eclipse.egit.core.op.ResetOperation;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.JobFamilies;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.actions.ResetActionHandler;
import org.eclipse.egit.ui.internal.repository.SelectResetTypePage;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jgit.api.ResetCommand.ResetType;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.osgi.util.NLS;

/**
* "Resets" a repository
*/
public class ResetCommand extends
    RepositoriesViewCommandHandler<RepositoryTreeNode<?>> {

  /**
   * Command id
   */
  public static final String ID = "org.eclipse.egit.ui.team.Reset"; //$NON-NLS-1$

  public Object execute(final ExecutionEvent event) throws ExecutionException {

    final RepositoryTreeNode<?> node = getSelectedNodes(event).get(0);
    final String currentBranch;
    try {
      currentBranch = node.getRepository().getFullBranch();
    } catch (IOException e1) {
      throw new ExecutionException(e1.getMessage(), e1);
    }
    final String targetBranch;
    if (!(node.getObject() instanceof Ref))
      // Use same dialog as for project when a repository is selected
      // allowing reset to any commit
      return new ResetActionHandler().execute(event);

    // If a ref is selected in the repository view, only reset to
    // that ref will be possible.
    targetBranch = ((Ref) node.getObject()).getName();

    final String repoName = Activator.getDefault().getRepositoryUtil()
        .getRepositoryName(node.getRepository());

    Wizard wiz = new Wizard() {

      @Override
      public void addPages() {
        addPage(new SelectResetTypePage(repoName, node.getRepository(),
            currentBranch, targetBranch));
        setWindowTitle(UIText.ResetCommand_WizardTitle);
      }

      @Override
      public boolean performFinish() {
        final ResetType resetType = ((SelectResetTypePage) getPages()[0])
            .getResetType();
        if (resetType == ResetType.HARD)
          if (!MessageDialog
              .openQuestion(
                  getShell(),
                  UIText.ResetTargetSelectionDialog_ResetQuestion,
                  UIText.ResetTargetSelectionDialog_ResetConfirmQuestion))
            return true;

        try {
          getContainer().run(false, true,
              new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor)
                    throws InvocationTargetException,
                    InterruptedException {

                  String jobname = NLS.bind(
                      UIText.ResetAction_reset,
                      targetBranch);
                  final ResetOperation operation = new ResetOperation(
                      node.getRepository(), targetBranch,
                      resetType);
                  JobUtil.scheduleUserWorkspaceJob(operation,
                      jobname, JobFamilies.RESET);
                }
              });
        } catch (InvocationTargetException ite) {
          Activator.handleError(
              UIText.ResetCommand_ResetFailureMessage, ite
                  .getCause(), true);
          return false;
        } catch (InterruptedException ie) {
          // ignore here
        }
        return true;
      }
    };
    WizardDialog dlg = new WizardDialog(getShell(event), wiz);
    dlg.setHelpAvailable(false);
    dlg.open();

    return null;
  }
}
TOP

Related Classes of org.eclipse.egit.ui.internal.repository.tree.command.ResetCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.