blob: 1914bed1ec69e673d825b995b13c1fd97235083d [file] [log] [blame]
/*******************************************************************************
* 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;
}
}