Quand je veux commander les contributions de point d'extension, j'ajouter un numéro de priorité, comme int 10.
Je n'utilise que le nombre de 10, 20, 30, ... parce que vous pouvez facilement mettre des éléments entre dans l'avenir. Vous pouvez l'utiliser pour commander des boutons, des composites ou tout ce que vous ne pouvez pas classer par nom.
Vous pouvez ajouter cette priorité dans l'interface que vous utilisez pour définir votre point d'extension. Ou vous pouvez dépenser un champ dans la description du point d'extension. Lorsque vous collectez toutes les contributions de points d'extension, vous pouvez demander la priorité et ordonner les contributions dans une liste liée avant de les renvoyer.
String tmpExtensionPoint = "EXTENSION POINT ID"; //$NON-NLS-1$
IExtensionRegistry registry = Platform.getExtensionRegistry();
IConfigurationElement[] elements = registry.getConfigurationElementsFor(tmpExtensionPoint);
List references = new LinkedList();
if (elements != null && elements.length > 0) {
for (int i = 0; i < elements.length; i++) {
try {
Object obj = elements[i].createExecutableExtension("class");
references.add((IExtensionPointInterface)obj); //$NON-NLS-1$
} catch (CoreException e) {
logger.error("Get Extension Point For " + tmpExtensionPoint, e);
}
}
}
//...
//ORDER here
return references;
Le code de commande pourrait par quelque chose comme ceci:
Arrays.sort(references, new Comparator() {
public int compare(Object arg0, Object arg1) {
if (!(arg0 instanceof IExtensionPointInterface)) {
return -1;
}
if (!(arg1 instanceof IExtensionPointInterface)) {
return -1;
}
IExtensionPointInterface part0 = (IExtensionPointInterface)arg0;
IExtensionPointInterface part1 = (IExtensionPointInterface)arg1;
if (part0.getPriority() < part1.getPriority()) {
return -1;
}
if (part0.getPriority() > part1.getPriority()) {
return 1;
}
return 0;
}
});