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

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

/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* Copyright (c) 2011, Matthias Sohn <matthias.sohn@sap.com>
* Copyright (c) 2011, Dariusz Luksza <dariusz@luksa.org>
* 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
*    Dariusz Luksza (dariusz@luksza.org - set action disabled when there is
*                        no configuration for remotes
*******************************************************************************/
package org.eclipse.egit.ui.internal.repository.tree.command;

import java.net.URISyntaxException;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.push.PushOperationUI;
import org.eclipse.egit.ui.internal.push.SimpleConfigurePushDialog;
import org.eclipse.egit.ui.internal.repository.tree.PushNode;
import org.eclipse.egit.ui.internal.repository.tree.RemoteNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jgit.transport.RemoteConfig;

/**
* Pushes to the remote
*/
public class PushConfiguredRemoteCommand extends
    RepositoriesViewCommandHandler<RepositoryTreeNode<?>> {
  public Object execute(ExecutionEvent event) throws ExecutionException {
    RepositoryTreeNode node = getSelectedNodes(event).get(0);
    RemoteConfig config = getRemoteConfig(node);
    if (config == null) {
      MessageDialog.openInformation(getShell(event),
          UIText.SimplePushActionHandler_NothingToPushDialogTitle,
          UIText.SimplePushActionHandler_NothingToPushDialogMessage);
      return null;
    }
    new PushOperationUI(node.getRepository(), config.getName(), false)
        .start();
    return null;
  }

  @Override
  public boolean isEnabled() {
    RepositoryTreeNode<?> node = getSelectedNodes().get(0);
    return getRemoteConfig(node) != null;
  }

  private RemoteConfig getRemoteConfig(RepositoryTreeNode node) {
    if (node instanceof RepositoryNode)
      return SimpleConfigurePushDialog.getConfiguredRemote(node
          .getRepository());

    if (node instanceof RemoteNode || node instanceof PushNode) {
      RemoteNode remoteNode;
      if (node instanceof PushNode)
        remoteNode = (RemoteNode) node.getParent();
      else
        remoteNode = (RemoteNode) node;

      try {
        RemoteConfig config = new RemoteConfig(remoteNode
            .getRepository().getConfig(), remoteNode.getObject());
        boolean fetchConfigured = !config.getFetchRefSpecs().isEmpty();
        boolean pushConfigured = !config.getPushRefSpecs().isEmpty();
        if (fetchConfigured || pushConfigured)
          return config;
        else
          return null;
      } catch (URISyntaxException e) {
        return null;
      }
    }

    return null;
  }

}
TOP

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

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.