Я не могу найти решение, почему мой Explorer Manager (либо BeanTreeView, либо OutlineView) в приложении NetBeans Platform 7.1 отлично работает с древовидной структурой при удалении одного узла, но не при удалении нескольких узлов. Проблема связана с обновлением дерева, а не с самим удалением. При вызове действия удаления (системного действия) он вызывает метод destroy() на моем узле:
@Override
public void destroy() throws IOException {
//removing the business object
...
try {
IReloadableViewCapability rvc;
if (getParentNode() != null) {
rvc = this.getParentNode().getLookup().lookup(IReloadableViewCapability.class);
}
rvc.reloadChildren();
} catch (Exception ex) {
logger.log(Level.WARNING, null, ex);
}
fireNodeDestroyed();
}
И допустим, у меня есть такая структура:
- Node 1
- 1.1
- 1.2
- 1.3
- Node 2
- 2.1
- ...
Теперь допустим, я хочу удалить узлы 1.1, 1.2 и 1.3. Я выбираю их все, вызываю действие удаления, и оно вызывает метод destroy() узла 1.1, где он удаляет для него данные и вызывает мой метод reloadChildren() для parentNode узла 1.1 (как показано в коде выше). Затем после удаления узла 1.2 он становится 1.3. Он удаляет удаляет данные для версии 1.3, но теперь getParentNode() возвращает значение null, хотя он снова должен возвращать узел 1.
Аналогичная проблема возникает при совместном удалении узла 1 и узла 2 (или любых других верхних узлов), хотя они являются дочерними элементами специального узла RootNode. Единственная разница в root заключается в том, что там все идет нормально только для первого узла, но, чем любой другой выбранный, не может найти своего родителя.
Где может быть проблема?