blob: 420a51cb7b9842a2281715e7b8af18dbfc0cd1f6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.ui.wizards;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.update.core.*;
import org.eclipse.update.internal.api.operations.IInstallFeatureOperation;
public class FeatureSorter extends ViewerSorter {
public static final int FEATURE_VERSION = 1;
public static final int FEATURE_LABEL = 2;
public static final int FEATURE_PROVIDER = 3;
public static final int ASCENDING = 1;
public static final int DESCENDING = -1;
private int key = FEATURE_LABEL;
private int labelOrder;
private int versionOrder;
private int providerOrder;
public FeatureSorter() {
this(FEATURE_LABEL, ASCENDING, ASCENDING, ASCENDING);
}
public FeatureSorter(int key, int labelOrder, int versionOrder, int providerOrder) {
this.key = key;
this.labelOrder = labelOrder;
this.versionOrder = versionOrder;
this.providerOrder = providerOrder;
}
public int compare(Viewer viewer, Object e1, Object e2) {
if (!(e1 instanceof IInstallFeatureOperation)
|| !(e2 instanceof IInstallFeatureOperation))
return super.compare(viewer, e1, e2);
IFeature f1 = ((IInstallFeatureOperation)e1).getFeature();
IFeature f2 = ((IInstallFeatureOperation)e2).getFeature();
PluginVersionIdentifier v1 = f1.getVersionedIdentifier().getVersion();
PluginVersionIdentifier v2 = f2.getVersionedIdentifier().getVersion();
String label1 = f1.getLabel() == null ? "" : f1.getLabel();
String label2 = f2.getLabel() == null ? "" : f2.getLabel();
String provider1 = f1.getProvider() == null ? "" : f1.getProvider();
String provider2 = f2.getProvider() == null ? "" : f2.getProvider();
int result = 0;
if (key == FEATURE_VERSION) {
result = compareVersions(v1, v2) * versionOrder;
if (result == 0) {
result = collator.compare(label1, label2) * labelOrder;
if (result == 0)
result = collator.compare(provider1, provider2) * providerOrder;
}
} else if (key == FEATURE_LABEL) {
result = collator.compare(label1, label2) * labelOrder;
if (result == 0) {
result = compareVersions(v1, v2) * versionOrder;
if (result == 0)
result = collator.compare(provider1, provider2) * providerOrder;
}
} else if (key == FEATURE_PROVIDER) {
result = collator.compare(provider1, provider2) * providerOrder;
if (result == 0) {
result = collator.compare(label1, label2) * labelOrder;
if (result == 0)
result = compareVersions(v1, v2) * versionOrder;
}
}
return result;
}
private int compareVersions(PluginVersionIdentifier v1, PluginVersionIdentifier v2) {
if (v1.equals(v2))
return 0;
return v2.isGreaterThan(v1) ? -1 : 1;
}
}