--- a/jdk/src/jdk.snmp/share/classes/com/sun/jmx/snmp/daemon/SnmpMibTree.java Thu Oct 23 11:19:25 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,269 +0,0 @@
-/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package com.sun.jmx.snmp.daemon;
-
-
-
-// java imports
-//
-import java.util.Vector;
-import java.util.Enumeration;
-
-// jmx imports
-//
-import com.sun.jmx.snmp.SnmpOid;
-
-// SNMP Runtime imports
-//
-import com.sun.jmx.snmp.agent.SnmpMibAgent;
-
-/**
- * The class is used for building a tree representation of the different
- * root oids of the supported MIBs. Each node is associated to a specific MIB.
- */
-final class SnmpMibTree {
-
- public SnmpMibTree() {
- defaultAgent= null;
- root= new TreeNode(-1, null, null);
- }
-
- public void setDefaultAgent(SnmpMibAgent def) {
- defaultAgent= def;
- root.agent= def;
- }
-
- public SnmpMibAgent getDefaultAgent() {
- return defaultAgent;
- }
-
- public void register(SnmpMibAgent agent) {
- root.registerNode(agent);
- }
-
- public void register(SnmpMibAgent agent, long[] oid) {
- root.registerNode(oid, 0, agent);
- }
-
- public SnmpMibAgent getAgentMib(SnmpOid oid) {
- TreeNode node= root.retrieveMatchingBranch(oid.longValue(), 0);
- if (node == null)
- return defaultAgent;
- else
- if(node.getAgentMib() == null)
- return defaultAgent;
- else
- return node.getAgentMib();
- }
-
- public void unregister(SnmpMibAgent agent, SnmpOid[] oids) {
- for(int i = 0; i < oids.length; i++) {
- long[] oid = oids[i].longValue();
- TreeNode node = root.retrieveMatchingBranch(oid, 0);
- if (node == null)
- continue;
- node.removeAgent(agent);
- }
- }
-
-
- public void unregister(SnmpMibAgent agent) {
-
- root.removeAgentFully(agent);
- }
-
- /*
- public void unregister(SnmpMibAgent agent) {
- long[] oid= agent.getRootOid();
- TreeNode node= root.retrieveMatchingBranch(oid, 0);
- if (node == null)
- return;
- node.removeAgent(agent);
- }
- */
- public void printTree() {
- root.printTree(">");
- }
-
- private SnmpMibAgent defaultAgent;
- private TreeNode root;
-
- // A SnmpMibTree object is a tree of TreeNode
- //
- final class TreeNode {
-
- void registerNode(SnmpMibAgent agent) {
- long[] oid= agent.getRootOid();
- registerNode(oid, 0, agent);
- }
-
- TreeNode retrieveMatchingBranch(long[] oid, int cursor) {
- TreeNode node= retrieveChild(oid, cursor);
- if (node == null)
- return this;
- if (children.isEmpty()) {
- // In this case, the node does not have any children. So no point to
- // continue the search ...
- return node;
- }
- if( cursor + 1 == oid.length) {
- // In this case, the oid does not have any more element. So the search
- // is over.
- return node;
- }
-
- TreeNode n = node.retrieveMatchingBranch(oid, cursor + 1);
- //If the returned node got a null agent, we have to replace it by
- //the current one (in case it is not null)
- //
- return n.agent == null ? this : n;
- }
-
- SnmpMibAgent getAgentMib() {
- return agent;
- }
-
- public void printTree(String ident) {
-
- StringBuilder buff= new StringBuilder();
- if (agents == null) {
- return;
- }
-
- for(Enumeration<SnmpMibAgent> e= agents.elements(); e.hasMoreElements(); ) {
- SnmpMibAgent mib= e.nextElement();
- if (mib == null)
- buff.append("empty ");
- else
- buff.append(mib.getMibName()).append(" ");
- }
- ident+= " ";
- if (children == null) {
- return;
- }
- for(Enumeration<TreeNode> e= children.elements(); e.hasMoreElements(); ) {
- TreeNode node= e.nextElement();
- node.printTree(ident);
- }
- }
-
- // PRIVATE STUFF
- //--------------
-
- /**
- * Only the treeNode class can create an instance of treeNode.
- * The creation occurs when registering a new oid.
- */
- private TreeNode(long nodeValue, SnmpMibAgent agent, TreeNode sup) {
- this.nodeValue= nodeValue;
- this.parent= sup;
- agents.addElement(agent);
- }
-
- private void removeAgentFully(SnmpMibAgent agent) {
- Vector<TreeNode> v = new Vector<>();
- for(Enumeration<TreeNode> e= children.elements();
- e.hasMoreElements(); ) {
-
- TreeNode node= e.nextElement();
- node.removeAgentFully(agent);
- if(node.agents.isEmpty())
- v.add(node);
-
- }
- for(Enumeration<TreeNode> e= v.elements(); e.hasMoreElements(); ) {
- children.removeElement(e.nextElement());
- }
- removeAgent(agent);
-
- }
-
- private void removeAgent(SnmpMibAgent mib) {
- if (!agents.contains(mib))
- return;
- agents.removeElement(mib);
-
- if (!agents.isEmpty())
- agent= agents.firstElement();
-
- }
-
- private void setAgent(SnmpMibAgent agent) {
- this.agent = agent;
- }
-
- private void registerNode(long[] oid, int cursor, SnmpMibAgent agent) {
-
- if (cursor >= oid.length)
- //That's it !
- //
- return;
- TreeNode child = retrieveChild(oid, cursor);
- if (child == null) {
- // Create a child and register it !
- //
- long theValue= oid[cursor];
- child= new TreeNode(theValue, agent, this);
- children.addElement(child);
- }
- else
- if (agents.contains(agent) == false) {
- agents.addElement(agent);
- }
-
- // We have to set the agent attribute
- //
- if(cursor == (oid.length - 1)) {
- child.setAgent(agent);
- }
- else
- child.registerNode(oid, cursor+1, agent);
- }
-
- private TreeNode retrieveChild(long[] oid, int current) {
- long theValue= oid[current];
-
- for(Enumeration<TreeNode> e= children.elements(); e.hasMoreElements(); ) {
- TreeNode node= e.nextElement();
- if (node.match(theValue))
- return node;
- }
- return null;
- }
-
- private boolean match(long value) {
- return (nodeValue == value) ? true : false;
- }
-
- private Vector<TreeNode> children= new Vector<>();
- private Vector<SnmpMibAgent> agents= new Vector<>();
- private long nodeValue;
- private SnmpMibAgent agent;
- private TreeNode parent;
-
- }; // end of class TreeNode
-}