Я загружаю IEventBroker
в приложении Eclipse RCP уровня компаса.
У меня есть два представления: Triggerer
и Receiver
.
Triggerer
(выдержки):
private IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
btn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = viewer.getStructuredSelection();
List selectionList = selection.toList();
for (Object s : selectionList) {
if (s instanceof MyObject) {
matches.add(s);
}
}
eventBroker.send(MyEventConstants.TOPIC_OBJECT_CHANGED, matches);
}
}
Receiver
(выдержки):
@Override
public void handleEvent(Event event) {
Object data = event.getProperty(EVENT_DATA);
switch (event.getTopic()) {
case MyEventConstants.TOPIC_OBJECT_CHANGED:
try {
if (data instanceof ArrayList) {
List<MyObject> matches = null;
try {
matches = (List<MyObject>) data;
}
catch (ClassCastException e) {
}
Subthing sub = buildSubthing(matches);
getContentViewer().getContents()
.setAll(Collections.singletonList(sub));
}
}
break;
}
}
buildSubthing
выполняет наполнение соответствующими полученными данными и устанавливает их в содержимое редактора GEF4.
В некоторых случаях это работает просто отлично, в некоторых - нет.
handleEvent()
запускается более одного раза, хотя хэш-код event
всегда одинаков, и я непонимаю почему.Тема такая же, а данные тоже одинаковые.Тем не менее, buildSubthing
просто без всякой причины останавливается с некоторыми данными, в то время как для других - нет.Данные структурно одинаковы в обоих случаях.
Как я могу контролировать, как часто вызывается handleEvent
, так как я думаю, что количество раз, которое он вызывается, является причиной, в то время как Subthing
иногда неправильно строится