public final DynamicNode getDynamicNode(DbObject dbo, int which, boolean load) throws DbException { SrVector path = new SrVector(10); Db db = dbo.getDb(); db.beginTrans(Db.READ_TRANS); while (dbo != null && !(dbo instanceof DbRoot)) { path.addElement(dbo); dbo = getDbParent(dbo, which); } if (db instanceof DbRAM) { if (DB_RAM != ((DynamicNode) getRoot()).getUserObject()) path.addElement(DB_RAM); } else path.addElement(db); DynamicNode nodeFound = (DynamicNode) getRoot(); for (int i = path.size(); --i >= 0; ) { if (load) loadChildren(nodeFound); Object userObj = path.elementAt(i); dbo = null; DbObject dbParent = null; GroupParams group = GroupParams.defaultGroupParams; DynamicNode groupNode = null; DynamicNode node = null; if (userObj instanceof DbObject) { dbo = (DbObject) userObj; dbParent = getDbParent(dbo, which); group = getGroupParams(dbParent, dbo); } if (group.name == null) { node = getDynamicNode(nodeFound, userObj, 0); } else { groupNode = getGroupNode(nodeFound, group, 0); if (groupNode != null) node = getDynamicNode(groupNode, userObj, 0); } if (node == null && nodeFound.hasLoaded() && !nodeFound.isLeaf() && which == Db.NEW_VALUE) { SemanticalModel model = ApplicationContext.getSemanticalModel(); boolean visible = model.isVisibleOnScreen(dbParent, dbo, Explorer.class); if (visible) { node = createPrimaryNode(dbParent, dbo); if (group.name == null) { insertNodeInto(node, nodeFound, getInsertionIndex(dbParent, dbo, nodeFound, node)); } else { if (groupNode == null) { groupNode = createGroupNode(group); insertNodeInto(groupNode, nodeFound, getSortedIndex(nodeFound, groupNode)); } insertNodeInto(node, groupNode, getInsertionIndex(dbParent, dbo, groupNode, node)); } } } nodeFound = node; if (nodeFound == null) break; } db.commitTrans(); return nodeFound; }
// Overridden protected void insertComponents(SrVector children, DbObject dbParent) throws DbException { SemanticalModel model = ApplicationContext.getSemanticalModel(); DbEnumeration dbEnum = dbParent.getComponents().elements(); while (dbEnum.hasMoreElements()) { DbObject dbo = dbEnum.nextElement(); boolean isVisible = model.isVisibleOnScreen(dbParent, dbo, Explorer.class); if (isVisible) { children.addElement(createPrimaryNode(dbParent, dbo)); } // end if } // end while dbEnum.close(); } // end insertComponents()