/******************************************************************************* * Copyright (c) 2000, 2011 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.team.internal.ui.synchronize; import java.util.Date; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ChangeSet; import org.eclipse.team.internal.core.subscribers.CheckedInChangeSet; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; /** * Sorter for the change log model provider. * * @since 3.0 */ public class ChangeSetModelSorter extends ViewerSorter { private int commentCriteria; private ChangeSetModelProvider provider; // Comment sorting options public final static int DATE = 1; public final static int COMMENT = 2; public final static int USER = 3; public ChangeSetModelSorter(ChangeSetModelProvider provider, int commentCriteria) { this.provider = provider; this.commentCriteria = commentCriteria; } protected int classComparison(Object element) { if (element instanceof ChangeSetDiffNode) { ChangeSet set = ((ChangeSetDiffNode)element).getSet(); if (set instanceof ActiveChangeSet) { return 0; } return 1; } return 2; } protected int compareClass(Object element1, Object element2) { return classComparison(element1) - classComparison(element2); } protected int compareNames(String s1, String s2) { return getComparator().compare(s1, s2); } private int compareDates(Date d1, Date d2) { if (d1 == null) d1 = new Date(0); if (d2 == null) d2 = new Date(0); return d1.compareTo(d2); } @Override public int compare(Viewer viewer, Object o1, Object o2) { //have to deal with non-resources in navigator //if one or both objects are not resources, returned a comparison //based on class. if (o1 instanceof ChangeSetDiffNode && o2 instanceof ChangeSetDiffNode) { ChangeSet s1 = ((ChangeSetDiffNode) o1).getSet(); ChangeSet s2 = ((ChangeSetDiffNode) o2).getSet(); if (s1 instanceof ActiveChangeSet && s2 instanceof ActiveChangeSet) { return compareNames(((ActiveChangeSet)s1).getTitle(), ((ActiveChangeSet)s2).getTitle()); } if (s1 instanceof CheckedInChangeSet && s2 instanceof CheckedInChangeSet) { CheckedInChangeSet r1 = (CheckedInChangeSet)s1; CheckedInChangeSet r2 = (CheckedInChangeSet)s2; if (commentCriteria == DATE) return compareDates(r1.getDate(), r2.getDate()); else if (commentCriteria == COMMENT) return compareNames(r1.getComment(), r2.getComment()); else if (commentCriteria == USER) return compareNames(r1.getAuthor(), r2.getAuthor()); else return 0; } if (s1 instanceof ActiveChangeSet) { return -1; } else if (s2 instanceof ActiveChangeSet) { return 1; } if (s1 instanceof CheckedInChangeSet) { return -1; } else if (s2 instanceof CheckedInChangeSet) { return 1; } } if (o1 instanceof ISynchronizeModelElement && o2 instanceof ISynchronizeModelElement) { ViewerSorter embeddedSorter = provider.getEmbeddedSorter(); if (embeddedSorter != null) { return embeddedSorter.compare(viewer, o1, o2); } else { return compareNames(((ISynchronizeModelElement)o1).getName(), ((ISynchronizeModelElement)o2).getName()); } } else if (o1 instanceof ISynchronizeModelElement) return 1; else if (o2 instanceof ISynchronizeModelElement) return -1; return 0; } public int getCommentCriteria() { return commentCriteria; } }