Когда я хочу заказать вклады точек расширения, я добавляю номер приоритета, например, int 10.
Я использую только числа 10, 20, 30, ... потому что вы можете легко поместить элементы между ними в будущем. Это вы можете использовать для заказа кнопок, композитов или всего, что вы не можете заказать по имени.
Вы можете добавить этот приоритет в интерфейс, который вы используете для определения вашей точки расширения. Или вы можете потратить поле в описании точки расширения.
Когда вы собираете все вклады точек расширения, вы можете запросить приоритет и упорядочить вклады в связанном списке, прежде чем возвращать их.
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;
Код заказа может выглядеть примерно так:
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;
}
});