// 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.subagent;
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
        {
            registerInfoGroup();
            registerSubagentTable();
        }
        catch(Exception e)
        {
            Logger.error(e);
            throw new SnmpException(e.toString());
        }
    }
    
    public static void unregisterMBeans()
    {
        try
        {
            unregisterInfoGroup();
            unregisterSubagentTable();
        }
        catch(Exception e)
        {
            Logger.error(e);
            throw new SnmpException(e.toString());
        }
    }
    
    /**
     * Create instance and register MBean
     */
    public static void registerInfoGroup() throws Exception
    {
        if ( _infoGroup == null )
        {
            _infoGroup = new InfoGroup(_root, ".1.3.6.1.4.1.15145.1.1.1", null);
        }
        ObjectName objName = new ObjectName("iReasoning:name=InfoGroup");
        if(!_server.isRegistered(objName))
        {
            _server.registerMBean(_infoGroup, objName);
        }
    }
    
    public static void unregisterInfoGroup() throws Exception
    {
        _server.unregisterMBean(new ObjectName("iReasoning:name=InfoGroup"));
    }
    
    /**
     * Create instance and register MBean
     */
    public static void registerSubagentTable() throws Exception
    {
        if ( _subagentTable == null ) 
        {
            _subagentTable = new SubagentTable(_root, ".1.3.6.1.4.1.15145.1.1.2", null);
        }
        ObjectName objName = new ObjectName("iReasoning:name=SubagentTable");
        
        if(!_server.isRegistered(objName))
        {
            _server.registerMBean(_subagentTable, objName);
        }
    }
    
    public static void unregisterSubagentTable() throws Exception
    {
        _server.unregisterMBean(new ObjectName("iReasoning:name=SubagentTable"));
    }
    
    /**
     * Returns InfoGroup object. If InfoGroup is null, it 'll register the corresponding MBean first
     */
    public static InfoGroup getInfoGroup( )
    {
        if( _infoGroup == null )
        {
            try
            {
                registerInfoGroup();
            }
            catch(Exception e)
            {
                Logger.error(e);
            }
        }
        return _infoGroup;
    }
    
    /**
     * Returns SubagentTable object. If SubagentTable is null, it 'll register the corresponding MBean first
     */
    public static SubagentTable getSubagentTable( )
    {
        if( _subagentTable == null )
        {
            try
            {
                registerSubagentTable();
            }
            catch(Exception e)
            {
                Logger.error(e);
            }
        }
        return _subagentTable;
    }
    
    
    static InfoGroup _infoGroup;
    static SubagentTable _subagentTable;
}