Package org.eclipse.egit.ui.internal.push

Source Code of org.eclipse.egit.ui.internal.push.PushTagsWizard

/*******************************************************************************
* Copyright (c) 2013 Robin Stocker <robin@nibor.org> and others.
* 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
*******************************************************************************/
package org.eclipse.egit.ui.internal.push;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import org.eclipse.egit.core.op.PushOperationResult;
import org.eclipse.egit.core.op.PushOperationSpecification;
import org.eclipse.egit.ui.internal.UIIcons;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.components.RepositorySelection;
import org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider;
import org.eclipse.egit.ui.internal.repository.tree.TagNode;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;

/**
* Wizard for pushing one or more tags to a remote.
*/
public class PushTagsWizard extends Wizard {

  private final Repository repository;

  private final PushTagsPage pushTagsPage;

  private final ConfirmationPage confirmationPage;

  /**
   * Creates a wizard with the passed parameters and opens a dialog with it in
   * the active workbench window shell.
   *
   * @param repository
   * @param tagNames
   */
  public static void openWizardDialog(final Repository repository,
      final String... tagNames) {
    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
      public void run() {
        Shell shell = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getShell();
        PushTagsWizard wizard = new PushTagsWizard(repository, Arrays
            .asList(tagNames));
        WizardDialog dialog = new WizardDialog(shell, wizard);
        dialog.setHelpAvailable(false);
        dialog.open();
      }
    });
  }

  /**
   * @param repository
   * @param tagNamesToSelect
   */
  public PushTagsWizard(Repository repository,
      Collection<String> tagNamesToSelect) {
    this.repository = repository;
    pushTagsPage = new PushTagsPage(repository, tagNamesToSelect);
    confirmationPage = new ConfirmationPage(repository) {
      @Override
      public void setVisible(boolean visible) {
        if (visible)
          setSelection(getRepositorySelection(), getRefSpecs());
        super.setVisible(visible);
      }
    };
    setDefaultPageImageDescriptor(UIIcons.WIZBAN_PUSH);
  }

  @Override
  public String getWindowTitle() {
    return UIText.PushTagsWizard_WindowTitle;
  }

  @Override
  public void addPages() {
    addPage(pushTagsPage);
    addPage(confirmationPage);
  }

  @Override
  public IWizardPage getNextPage(IWizardPage page) {
    if (page == pushTagsPage) {
      return confirmationPage;
    }
    return null;
  }

  @Override
  public boolean canFinish() {
    return getContainer().getCurrentPage() == confirmationPage;
  }

  @Override
  public boolean performFinish() {
    try {
      startPush();
      return true;
    } catch (IOException e) {
      confirmationPage.setErrorMessage(e.getMessage());
      return false;
    }
  }

  private RepositorySelection getRepositorySelection() {
    return new RepositorySelection(null,
        pushTagsPage.getSelectedRemoteConfig());
  }

  private List<RefSpec> getRefSpecs() {
    List<RefSpec> specs = new ArrayList<RefSpec>();
    String prefix;
    if (pushTagsPage.isForceUpdateSelected())
      prefix = "+"; //$NON-NLS-1$
    else
      prefix = ""; //$NON-NLS-1$
    for (TagNode tag : pushTagsPage.getSelectedTags()) {
      String refName = tag.getObject().getName();
      RefSpec spec = new RefSpec(prefix + refName);
      specs.add(spec);
    }
    return specs;
  }

  private void startPush() throws IOException {
    PushOperationResult result = confirmationPage.getConfirmedResult();
    PushOperationSpecification pushSpec = result
        .deriveSpecification(confirmationPage
            .isRequireUnchangedSelected());

    PushOperationUI pushOperationUI = new PushOperationUI(repository,
        pushSpec, false);
    pushOperationUI.setCredentialsProvider(new EGitCredentialsProvider());
    pushOperationUI.setShowConfigureButton(false);
    if (confirmationPage.isShowOnlyIfChangedSelected())
      pushOperationUI.setExpectedResult(confirmationPage
          .getConfirmedResult());
    pushOperationUI.start();
  }
}
TOP

Related Classes of org.eclipse.egit.ui.internal.push.PushTagsWizard

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.