private void removeParentNode(TreeNode parentNode) { TreeNode superParentNode = parentNode.getParent(); if (superParentNode != null) { superParentNode.removeChild(parentNode); if (!superParentNode.hasChildNodes()) removeParentNode(superParentNode); } }
public void unregister(Object statsProvider) { // Unregisters the statsProvider try { StatsProviderRegistryElement spre = statsProviderRegistry.getStatsProviderRegistryElement(statsProvider); if (spre == null) { logger.log( Level.INFO, invalidStatsProvider, new Object[] {statsProvider.getClass().getName()}); return; } // get the Parent node and delete all children nodes (only that we know of) String parentNodePath = spre.getParentTreeNodePath(); List<String> childNodeNames = spre.getChildTreeNodeNames(); TreeNode rootNode = mrdr.get(instanceName); if ((rootNode != null) && (parentNodePath != null)) { // This has to return one node List<TreeNode> nodeList = rootNode.getNodes(parentNodePath, false, true); if (nodeList.size() > 0) { TreeNode parentNode = nodeList.get(0); // Remove each of the child nodes Collection<TreeNode> childNodes = parentNode.getChildNodes(); for (TreeNode childNode : childNodes) { if (childNodeNames.contains(childNode.getName())) { parentNode.removeChild(childNode); } } if (!parentNode.hasChildNodes()) removeParentNode(parentNode); } } // get the handles and unregister the listeners from Flashlight Collection<ProbeClientMethodHandle> handles = spre.getHandles(); if (handles != null) { for (ProbeClientMethodHandle handle : handles) { // handle.remove????? Mahesh? // TODO IMPLEMENTATION // For now disable the handle => remove the client from invokerlist handle.disable(); } } // unregister the statsProvider from Gmbal if (spre.getManagedObjectManager() != null) unregisterGmbal(spre); // Unregister from the MonitoringDataTreeRegistry and the map entries statsProviderRegistry.unregisterStatsProvider(statsProvider); } catch (Exception ex) { String msg = MessageFormat.format(errorUnregisteringStatsProvider, statsProvider.getClass().getName()); logger.log(Level.SEVERE, msg, ex); } }