package bndtools.editor.workspace;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
public class PluginClassSorter extends ViewerSorter {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
IConfigurationElement elem1 = (IConfigurationElement) e1;
IConfigurationElement elem2 = (IConfigurationElement) e2;
// Sort undeprecated plugins before deprecated ones.
int result = sortDeprecation(elem1, elem2);
if (result != 0)
return result;
// Sort by rank
result = sortByRank(elem1, elem2);
if (result != 0)
return result;
// Finally sort on name
return sortName(elem1, elem2);
}
private static int sortDeprecation(IConfigurationElement elem1, IConfigurationElement elem2) {
if (isDeprecated(elem1))
return isDeprecated(elem2) ? 0 : 1;
return isDeprecated(elem2) ? -1 : 0;
}
private static boolean isDeprecated(IConfigurationElement elem) {
return elem.getAttribute("deprecated") != null;
}
private static int sortByRank(IConfigurationElement elem1, IConfigurationElement elem2) {
int r1 = getRank(elem1);
int r2 = getRank(elem2);
return r2 - r1;
}
private static int getRank(IConfigurationElement elem1) {
String rankStr = elem1.getAttribute("rank");
int rank = 0;
try {
rank = Integer.parseInt(rankStr);
} catch (NumberFormatException e) {
// ignore
}
return rank;
}
private static int sortName(IConfigurationElement elem1, IConfigurationElement elem2) {
String name1 = elem1.getAttribute("name");
String name2 = elem2.getAttribute("name");
return name1.compareTo(name2);
}
}