私は拡張ポイントの寄与を注文したい場合は、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;
}
});