



/*
 * TeamSpaceConfig.java
 *
 * Created on September 5, 2002, 11:20 AM
 */

package tspace.jmx;

import java.util.ArrayList;

import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;


/**
 * Base class of all MBean client Proxy classes.
 *
 * @author  Herve Tchepannou
 * @version $Revision$
 */
public class BaseMBeanProxy
{    
    private MBeanServer _server;
    private ObjectName  _objectName;
    private String      _name;
    
    protected BaseMBeanProxy( String name )
    {
        _name = name;
    }
    
    public MBeanServer getServer()
        throws Exception
    {
        if ( _server == null )
        {
            // MBeanServer
            ArrayList lst = MBeanServerFactory.findMBeanServer( null );
            if ( lst == null )
            {
                throw new Exception( "MBeanServer not found" );
            }
            _server = ( MBeanServer )lst.iterator().next();            
        }        
        return _server;
    }
    
    public ObjectName getObjectName()
        throws Exception
    {
        if ( _objectName == null )
        {
            _objectName = new ObjectName( _name );
        }
        return _objectName;
    }
    
    protected Object getAttribute( String attributeName )
        throws Exception
    {
        return getServer().getAttribute( getObjectName(), attributeName );
    }
    protected void setAttribute( String attributeName, Object value )
        throws Exception
    {
        getServer().setAttribute( getObjectName(), new Attribute( attributeName, value ) );
    }
    
    protected void invoke( String methodName, Class[] args, String[] types )
        throws Exception
    {
        getServer().invoke( getObjectName(), methodName, args, types );
    }    
}
