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

Source Code of org.eclipse.egit.ui.internal.synchronize.mapping.GitChangeSetSorter

/*******************************************************************************
* Copyright (C) 2010, Dariusz Luksza <dariusz@luksza.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
*******************************************************************************/
package org.eclipse.egit.ui.internal.synchronize.mapping;

import org.eclipse.egit.core.synchronize.GitCommitsModelCache.Commit;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelBlob;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelCache;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelCommit;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelTree;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelWorkingTree;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;

/**
* Ensure proper ordering of nodes in Git Change Set.
*
* Working Tree node will be always first in Change Set, then comes node with
* Staged changes, after that will be shown list of commits ordered by commit
* date.
*
* Elements that represents files will be always put after container elements
* (like commit or folder). In other cases elements will be sorted in
* alphabetical order.
*
*/
public class GitChangeSetSorter extends ViewerSorter {

  @Override
  public int compare(Viewer viewer, Object e1, Object e2) {
    if (e1 instanceof GitModelBlob && !(e2 instanceof GitModelBlob))
      return 1;

    if (e2 instanceof GitModelBlob && !(e1 instanceof GitModelBlob))
      return -1;

    if (e1 instanceof GitModelWorkingTree)
      return -1;

    if (e2 instanceof GitModelWorkingTree)
      return 1;

    if (e1 instanceof GitModelCache)
      return -2;

    if (e2 instanceof GitModelCache)
      return 2;

    if ((e1 instanceof GitModelTree && e2 instanceof GitModelTree) ||
        (e1 instanceof GitModelBlob && e2 instanceof GitModelBlob))
      return super.compare(viewer, e1, e2);

    if (e1 instanceof GitModelTree && e2 instanceof GitModelCommit)
      return 1;

    if (e1 instanceof GitModelCommit && e2 instanceof GitModelCommit) {
      Commit rc1 = ((GitModelCommit) e1).getCachedCommitObj();
      Commit rc2 = ((GitModelCommit) e2).getCachedCommitObj();

      return rc2.getCommitDate().compareTo(rc1.getCommitDate());
    }

    return super.compare(viewer, e1, e2);
  }

}
TOP

Related Classes of org.eclipse.egit.ui.internal.synchronize.mapping.GitChangeSetSorter

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.