/** Loads all the children for this node if they haven't been loaded yet. */ public final void load() { if (!_childrenLoaded) { try { if (_logger.isDebugEnabled()) { _logger.debug("Loading child nodes for " + _name); } loadChildren(); _childrenLoaded = true; } catch (AbstractMethodError e) { SQLExplorerPlugin.error("Could not load child nodes for " + _name, e); } catch (Throwable e) { SQLExplorerPlugin.error("Could not load child nodes for " + _name, e); } } }
/** * Returns a list of all available tabs for a given node. These tabs can be standard or plugin * tabs. * * @param node for which to find tabs. * @return List of tabs */ private static List<IDetailTab> createTabs(INode node) { if (_logger.isDebugEnabled()) { _logger.debug("Creating tabs for: " + node.getUniqueIdentifier()); } ArrayList<IDetailTab> tabList = new ArrayList<IDetailTab>(); // create connection info tab if needed if (node instanceof DatabaseNode) { IDetailTab dbTab = new ConnectionInfoTab(); dbTab.setNode(node); tabList.add(dbTab); } // create our basic table tabs if (node instanceof TableNode) { IDetailTab tab1 = new ColumnInfoTab(); IDetailTab tab2 = new TableInfoTab(); IDetailTab tab3 = new PreviewTab(); IDetailTab tab4 = new RowCountTab(); IDetailTab tab5 = new PrimaryKeysTab(); IDetailTab tab6 = new ExportedKeysTab(); IDetailTab tab7 = new ImportedKeysTab(); IDetailTab tab8 = new IndexesTab(); IDetailTab tab9 = new PriviligesTab(); IDetailTab tab10 = new ColumnPriviligesTab(); IDetailTab tab11 = new RowIdsTab(); IDetailTab tab12 = new VersionsTab(); tab1.setNode(node); tab2.setNode(node); tab3.setNode(node); tab4.setNode(node); tab5.setNode(node); tab6.setNode(node); tab7.setNode(node); tab8.setNode(node); tab9.setNode(node); tab10.setNode(node); tab11.setNode(node); tab12.setNode(node); tabList.add(tab1); tabList.add(tab2); tabList.add(tab3); tabList.add(tab4); tabList.add(tab5); tabList.add(tab6); tabList.add(tab7); tabList.add(tab8); tabList.add(tab9); tabList.add(tab10); tabList.add(tab11); tabList.add(tab12); } // create extension point tabs String databaseProductName = node.getSession().getRoot().getDatabaseProductName().toLowerCase().trim(); String nodeType = node.getType().toLowerCase().trim(); IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint point = registry.getExtensionPoint("net.sourceforge.sqlexplorer", "nodeDetailTab"); IExtension[] extensions = point.getExtensions(); for (int i = 0; i < extensions.length; i++) { IExtension e = extensions[i]; IConfigurationElement[] ces = e.getConfigurationElements(); for (int j = 0; j < ces.length; j++) { try { boolean isValidProduct = false; boolean isValidNodeType = false; String[] validProducts = ces[j].getAttribute("database-product-name").split(","); String[] validNodeTypes = ces[j].getAttribute("node-type").split(","); // check if tab is valid for current database product for (int k = 0; k < validProducts.length; k++) { String product = validProducts[k].toLowerCase().trim(); if (product.length() == 0) { continue; } if (product.equals("*")) { isValidProduct = true; break; } String regex = TextUtil.replaceChar(product, '*', ".*"); if (databaseProductName.matches(regex)) { isValidProduct = true; break; } } if (!isValidProduct) { continue; } // check if tab is valid for current node type for (int k = 0; k < validNodeTypes.length; k++) { String type = validNodeTypes[k].toLowerCase().trim(); if (type.length() == 0) { continue; } if (type.equals("*")) { isValidNodeType = true; break; } String regex = TextUtil.replaceChar(type, '*', ".*"); if (nodeType.matches(regex)) { isValidNodeType = true; break; } } if (!isValidNodeType) { continue; } // add tab to list IDetailTab tab = (IDetailTab) ces[j].createExecutableExtension("class"); tab.setNode(node); tabList.add(tab); } catch (Throwable ex) { SQLExplorerPlugin.error("Could not create menu action", ex); } } } return tabList; }