/*
*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
// Copyright (c) 1995-96 by Cisco Systems, Inc.
package com.sun.jmx.snmp;
// java import
//
import java.util.Vector;
// jmx import
//
import com.sun.jmx.snmp.SnmpOidTable;
import com.sun.jmx.snmp.SnmpOidRecord;
import com.sun.jmx.snmp.SnmpStatusException;
import static com.sun.jmx.mbeanserver.Util.cast;
/**
* Defines a set of <CODE>SnmpOidTable</CODE> objects containing metadata definitions for MIB variables.
* Each <CODE>SnmpOidTable</CODE> should contain information on variables of one MIB.
* It provides resolution of all MIB variables contained in the <CODE>SnmpOidTable</CODE> objects.
* <p><b>This API is a Sun Microsystems internal API and is subject
* to change without notice.</b></p>
*/
public class SnmpOidDatabaseSupport implements SnmpOidDatabase {
/**
* Creates an empty <CODE>SnmpOidDatabaseSupport</CODE>.
*/
public SnmpOidDatabaseSupport(){
tables=new Vector<SnmpOidTable>();
}
/**
* Creates an <CODE>SnmpOidDatabaseSupport</CODE> containing the specified <CODE>SnmpOidTable</CODE> object.
* @param table The <CODE>SnmpOidTable</CODE> object used to initialize this <CODE>SnmpOidDatabaseSupport</CODE>.
*/
public SnmpOidDatabaseSupport(SnmpOidTable table){
tables=new Vector<SnmpOidTable>();
tables.addElement(table);
}
/**
* Adds a <CODE>SnmpOidTable</CODE> object in this <CODE>SnmpOidDatabase</CODE>.
* @param table The table to add.
*/
public void add(SnmpOidTable table) {
if (!tables.contains(table)) {
tables.addElement(table);
}
}
/**
* Removes a <CODE>SnmpOidTable</CODE> object from this <CODE>SnmpOidDatabase</CODE>.
* @param table The table to be removed.
* @exception SnmpStatusException The specified <CODE>SnmpOidTable</CODE> does not exist in this <CODE>SnmpOidDatabase</CODE>.
*/
public void remove(SnmpOidTable table) throws SnmpStatusException {
if (!tables.contains(table)) {
throw new SnmpStatusException("The specified SnmpOidTable does not exist in this SnmpOidDatabase");
}
tables.removeElement(table);
}
/**
* Searches for a MIB variable given its logical name and returns an <CODE>SnmpOidRecord</CODE>
* object containing information on the variable.
* @param name The name of the MIB variable.
* @return The <CODE>SnmpOidRecord</CODE> object containing information on the variable.
*
* @exception SnmpStatusException The specified name does not exist in this <CODE>SnmpOidDatabase</CODE>
*/
public SnmpOidRecord resolveVarName(String name) throws SnmpStatusException {
for (int i=0;i<tables.size();i++) {
try {
return (tables.elementAt(i).resolveVarName(name));
}
catch (SnmpStatusException e) {
if (i==tables.size()-1) {
throw new SnmpStatusException(e.getMessage());
}
}
}
return null;
}
/**
* Searches for a MIB variable given its OID and returns an <CODE>SnmpOidRecord</CODE> object containing
* information on the variable.
* @param oid The OID of the MIB variable.
* @return The <CODE>SnmpOidRecord</CODE> object containing information on the variable.
* @exception SnmpStatusException The specified oid does not exist in this <CODE>SnmpOidDatabase</CODE>.
*/
public SnmpOidRecord resolveVarOid(String oid) throws SnmpStatusException {
for (int i=0;i<tables.size();i++) {
try {
return tables.elementAt(i).resolveVarOid(oid);
}
catch (SnmpStatusException e) {
if (i==tables.size()-1) {
throw new SnmpStatusException(e.getMessage());
}
}
}
return null;
}
/**
* Returns a list that can be used to traverse all the entries of the <CODE>SnmpOidTable</CODE> objects
* of this <CODE>SnmpOidDatabase</CODE>.
* @return A vector of <CODE>SnmpOidTable</CODE> objects containing all the elements of this <CODE>SnmpOidDatabase</CODE>.
*/
public Vector<?> getAllEntries() {
Vector<SnmpOidTable> res = new Vector<SnmpOidTable>();
for (int i=0;i<tables.size();i++) {
Vector<SnmpOidTable> tmp = cast(tables.elementAt(i).getAllEntries());
if (tmp != null) {
for(int ii=0; ii<tmp.size(); ii++) {
res.addElement(tmp.elementAt(ii));
}
}
}
// res.addAll(((SnmpOidTable)tables.elementAt(i)).getAllEntries());
return res;
}
/**
* Removes all <CODE>SnmpOidTable</CODE> objects from this <CODE>SnmpOidDatabase</CODE>.
*/
public void removeAll(){
tables.removeAllElements() ;
}
private Vector<SnmpOidTable> tables;
}