@Override public DBPImage getNodeIcon() { DBPImage image = null; final DBSObject object = getObject(); if (object instanceof DBPImageProvider) { image = ((DBPImageProvider) object).getObjectImage(); } if (image == null) { DBXTreeNode meta = getMeta(); if (meta != null) { image = meta.getIcon(this); } } if (image != null && object instanceof DBPStatefulObject) { image = DBNModel.getStateOverlayImage(image, ((DBPStatefulObject) object).getObjectState()); } return image; }
private void loadChildren( DBRProgressMonitor monitor, final DBXTreeNode meta, final DBNDatabaseNode[] oldList, final List<DBNDatabaseNode> toList) 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); 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); } } 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); 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); toList.add(oldObject); break; } } } } else { log.warn("Unsupported meta node type: " + child); // $NON-NLS-1$ } monitor.worked(1); } monitor.done(); if (filtered) { getModel().fireNodeUpdate(this, this, DBNEvent.NodeChange.REFRESH); } }