// Home | Go Back //

/*
 * Copyright (c) 2002-2003 iReasoning Inc. All Rights Reserved.
 * 
 * This SOURCE CODE FILE, which has been provided by iReasoning Inc. as part
 * of an iReasoning Software product for use ONLY by licensed users of the product,
 * includes CONFIDENTIAL and PROPRIETARY information of iReasoning Inc.  
 *
 * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
 * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
 * THE PRODUCT.
 *
 * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD IREASONING SOFTWARE, ITS
 * RELATED COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY
 * CLAIMS OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR
 * DISTRIBUTION OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES
 * ARISING OUT OF OR RESULTING FROM THE USE, MODIFICATION, OR
 * DISTRIBUTION OF PROGRAMS OR FILES CREATED FROM, BASED ON, AND/OR
 * DERIVED FROM THIS SOURCE CODE FILE.
 */

package agent.multihome.interface2;
import java.io.*;
import java.util.*;
import com.ireasoning.util.*;
import com.ireasoning.protocol.snmp.*;
import javax.management.*;


/**
 * Class for registering MBeans
 */
public class AgentMib
{
    // MBeanServer reference
    private static MBeanServer _server;
    // Root node of OID tree
    private static OIDTreeNode _root;
    
    /**
     * Registers all necessary MBeans
     */
    public static void registerMBeans(MBeanServer server, OIDTreeNode root)
    {
        _server = server;
        _root = root;
        try
        {
            registerIfTable();
            
            // registerSnmpGroup();
            // registerUdpGroup();
            // registerTcpGroup();
            // registerSystemGroup();
            // registerEgpGroup();
            // registerIpGroup();
            // registerInterfacesGroup();
            // registerIcmpGroup();
            // registerAtTable();
            // registerIpAddrTable();
            // registerIpRouteTable();
            // registerIpNetToMediaTable();
            // registerTcpConnTable();
            // registerUdpTable();
            // registerEgpNeighTable();
        }
        catch(Exception e)
        {
            Logger.error(e);
            throw new SnmpException(e.toString());
        }
    }
    
    /**
     * Unregisters MBeans
     */
    public static void unregisterMBeans()
    {
        try
        {
            unregisterIfTable();

            // unregisterSnmpGroup();
            // unregisterUdpGroup();
            // unregisterTcpGroup();
            // unregisterSystemGroup();
            // unregisterEgpGroup();
            // unregisterIpGroup();
            // unregisterInterfacesGroup();
            // unregisterIcmpGroup();
            // unregisterAtTable();
            // unregisterIpAddrTable();
            // unregisterIpRouteTable();
            // unregisterIpNetToMediaTable();
            // unregisterTcpConnTable();
            // unregisterUdpTable();
            // unregisterEgpNeighTable();
        }
        catch(Exception e)
        {
            Logger.error(e);
            throw new SnmpException(e.toString());
        }
    }
    
    /**
     * Create instance and register MBean
     */
    public static void registerIfTable() throws Exception
    {
        if ( _ifTable == null )
        {
            _ifTable = new IfTable(_root, ".1.3.6.1.2.1.2.2", null);
        }
        ObjectName objName = new ObjectName("interface2:name=IfTable");
        if(!_server.isRegistered(objName))
        {
            _server.registerMBean(_ifTable, objName);
        }
    }
    
    /**
     * Unregister MBean
     */
    public static void unregisterIfTable() throws Exception
    {
        _server.unregisterMBean(new ObjectName("interface2:name=IfTable"));
    }
    
    /**
     * Returns IfTable object. If IfTable is null, it 'll register the corresponding MBean first
     */
    public static IfTable getIfTable( )
    {
        if( _ifTable == null )
        {
            try
            {
                registerIfTable();
            }
            catch(Exception e)
            {
                Logger.error(e);
            }
        }
        return _ifTable;
    }
    
    
    static IfTable _ifTable;
}