Package org.eclipse.egit.ui.internal.synchronize

Source Code of org.eclipse.egit.ui.internal.synchronize.GitSynchronizeWizard

/*******************************************************************************
* Copyright (c) 2010 IBM Corporation 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
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Dariusz Luksza <dariusz@luksza.org>
*******************************************************************************/
package org.eclipse.egit.ui.internal.synchronize;

import static org.eclipse.jgit.lib.Constants.HEAD;

import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.egit.core.Activator;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData;
import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet;
import org.eclipse.egit.ui.internal.UIIcons;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.PlatformUI;

/**
* Synchronization wizard for Git repositories
*/
public class GitSynchronizeWizard extends Wizard {

  private GitSynchronizeWizardPage page;

  /**
   * Instantiates a new wizard for synchronizing resources that are being
   * managed by EGit.
   */
  public GitSynchronizeWizard() {
    setWindowTitle(UIText.GitSynchronizeWizard_synchronize);
    setDefaultPageImageDescriptor(UIIcons.WIZBAN_SYNCHRONIZE);
  }

  @Override
  public void addPages() {
    page = new GitSynchronizeWizardPage();
    addPage(page);
  }

  @Override
  public boolean performFinish() {
    GitSynchronizeDataSet gsdSet = new GitSynchronizeDataSet(page.forceFetch());

    Map<Repository, String> branches = page.getSelectedBranches();
    boolean shouldIncludeLocal = page.shouldIncludeLocal();
    for (Entry<Repository, String> branchesEntry : branches.entrySet())
      try {
        Repository repo = branchesEntry.getKey();
        GitSynchronizeData data = new GitSynchronizeData(
            repo, HEAD, branchesEntry.getValue(),
            shouldIncludeLocal);
        Set<IResource> resources = getSelectedResources(repo);
        if (resources != null && resources.size() > 0)
          data.setIncludedResources(resources);
        gsdSet.add(data);
      } catch (IOException e) {
        Activator.logError(e.getMessage(), e);
      }

    Set<IProject> selectedProjects
         = page.getSelectedProjects();
    GitModelSynchronize.launch(gsdSet, selectedProjects
        .toArray(new IResource[selectedProjects
        .size()]));

    return true;
  }

  private Set<IResource> getSelectedResources(Repository repo) {
    ISelectionService selectionService = PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getSelectionService();
    ISelection selection = selectionService.getSelection();
    if (selection instanceof IStructuredSelection) {
      Set<IResource> result = new HashSet<IResource>();
      IStructuredSelection sel = (IStructuredSelection) selection;
      if (sel.size() == 0)
        return null;

      File workTree = repo.getWorkTree();
      for (Object o : sel.toArray()) {
        if (!(o instanceof IAdaptable))
          continue;

        IResource res = (IResource) ((IAdaptable) o)
            .getAdapter(IResource.class);
        if (res == null)
          continue;

        int type = res.getType();
        if (type == IResource.FOLDER) {
          Repository selRepo = RepositoryMapping.getMapping(res)
              .getRepository();
          if (workTree.equals(selRepo.getWorkTree()))
            result.add(res);
        }
      }

      return result;
    }
    return null;
  }

}
TOP

Related Classes of org.eclipse.egit.ui.internal.synchronize.GitSynchronizeWizard

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.