use of org.jkiss.dbeaver.model.navigator.meta.DBXTreeNode in project dbeaver by serge-rider.
the class DBNDatabaseNode method loadChildren.
private void loadChildren(DBRProgressMonitor monitor, final DBXTreeNode meta, final DBNDatabaseNode[] oldList, final List<DBNDatabaseNode> toList, boolean reflect) throws DBException {
if (monitor.isCanceled()) {
return;
}
this.filtered = false;
List<DBXTreeNode> childMetas = meta.getChildren(this);
if (CommonUtils.isEmpty(childMetas)) {
return;
}
monitor.beginTask(ModelMessages.model_navigator_load_items_, childMetas.size());
for (DBXTreeNode child : childMetas) {
if (monitor.isCanceled()) {
break;
}
monitor.subTask(ModelMessages.model_navigator_load_ + " " + child.getChildrenType(getObject().getDataSource()));
if (child instanceof DBXTreeItem) {
final DBXTreeItem item = (DBXTreeItem) child;
boolean isLoaded = loadTreeItems(monitor, item, oldList, toList, reflect);
if (!isLoaded && item.isOptional() && item.getRecursiveLink() == null) {
// This may occur only if no child nodes was read
// Then we try to go on next DBX level
loadChildren(monitor, item, oldList, toList, reflect);
}
} else if (child instanceof DBXTreeFolder) {
if (oldList == null) {
// Load new folders only if there are no old ones
toList.add(new DBNDatabaseFolder(this, (DBXTreeFolder) child));
} else {
for (DBNDatabaseNode oldFolder : oldList) {
if (oldFolder.getMeta() == child) {
oldFolder.reloadChildren(monitor, reflect);
toList.add(oldFolder);
break;
}
}
}
} else if (child instanceof DBXTreeObject) {
if (oldList == null) {
// Load new objects only if there are no old ones
toList.add(new DBNDatabaseObject(this, (DBXTreeObject) child));
} else {
for (DBNDatabaseNode oldObject : oldList) {
if (oldObject.getMeta() == child) {
oldObject.reloadChildren(monitor, reflect);
toList.add(oldObject);
break;
}
}
}
} else {
//$NON-NLS-1$
log.warn("Unsupported meta node type: " + child);
}
monitor.worked(1);
}
monitor.done();
if (reflect && filtered) {
getModel().fireNodeUpdate(this, this, DBNEvent.NodeChange.REFRESH);
}
}
Aggregations