Все добрый день.
Такой вопрос.
Как мне найти в дереве необходимую ветку?
Для этого нужно делать обход всего дерева или есть какое-то более подходящее решение?
Метод, который заполняет контейнер
public void put(DBCursor data, TreeRec parent) {
// карта для хранения записей с ключем rn,
// для быстрого доступа к ним
HashMap<String, TreeRec> dataMap = new HashMap<String, TreeRec>();
for (int i = 0; i < data.getRecCount(); i++) {
TreeRec rec = new TreeRec(data, i);
dataMap.put(rec.getRn(), rec);
this.addItem(rec);
this.getItem(rec).getItemProperty("name").setValue(rec.getMnemo());
// Если у записи есть rp, значит узел не корневой
if (dataMap.containsKey(rec.getRp())) {
// устанавливаем родителя записи
this.setParent(rec, dataMap.get(rec.getRp()));
// если rt = 1, значит это пользователь
if (rec.getRt() > 0) {
this.getContainerProperty(rec, "icon").setValue(new ThemeResource("../runo/icons/16/user.png"));
// у пользователя не может быть дочерних узлов
this.setChildrenAllowed(rec, false);
} else { // иначе, каталог
this.getContainerProperty(rec, "icon").setValue(new ThemeResource("../runo/icons/16/folder.png"));
}
} else { // иначе узел корневой
this.setParent(rec, null);
this.getContainerProperty(rec, "icon").setValue(new ThemeResource("../runo/icons/16/folder.png"));
}
}
}
в TreeRec хранятся данные персоны (из БД)
protected String rn;
protected String rp;
protected Integer rt;
protected String mnemo;
protected Integer level;
Дерево
setContainerDataSource(container);
setItemCaptionPropertyId("name");
setItemIconPropertyId("icon");
setImmediate(true);
В приложении у меня есть текущий пользователь. Я получаю его rn - Application.getUser().getRn().
Теперь мне в дереве нужно найти персону, с таким-же значением rn. Выбрать ее. И развернуть дерево до этой персоны.
Пока я вижу только вариант обхода всего дерева и поиска необходимой мне персоны. Затем повторный обход дерева, в котором всех родителей персоны я помещаю в LinkedList. Ну и напоследок цикл по коллекции и expandItem(TreeRec).
Интересует, как это можно сделать наименее затратно, т.к. дерево может быть очень большим.
Во вложении дерево, каким оно должно быть после всех этих действий.