package org.neo4j.kernel.impl.management;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanFeatureInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.StandardMBean;
import org.neo4j.kernel.KernelExtension.KernelData;
import org.neo4j.kernel.management.Kernel;
public class Neo4jMBean extends StandardMBean
{
final ObjectName objectName;
protected Neo4jMBean( ManagementBeanProvider provider, KernelData kernel, boolean isMXBean )
{
super( provider.beanInterface, isMXBean );
this.objectName = provider.getObjectName( kernel );
}
protected Neo4jMBean( ManagementBeanProvider provider, KernelData kernel )
throws NotCompliantMBeanException
{
super( provider.beanInterface );
this.objectName = provider.getObjectName( kernel );
}
Neo4jMBean( Class<Kernel> beenInterface, KernelData kernel ) throws NotCompliantMBeanException
{
super( beenInterface );
this.objectName = JmxExtension.getObjectName( kernel, beenInterface, null );
}
@Override
protected String getDescription( MBeanInfo info )
{
Description description = getClass().getAnnotation( Description.class );
if ( description != null ) return description.value();
return super.getDescription( info );
}
@Override
protected String getDescription( MBeanAttributeInfo info )
{
Description description = describeMethod( info, "get", "is" );
if ( description != null ) return description.value();
return super.getDescription( info );
}
@Override
protected String getDescription( MBeanOperationInfo info )
{
Description description = describeMethod( info );
if ( description != null ) return description.value();
return super.getDescription( info );
}
@Override
protected int getImpact( MBeanOperationInfo info )
{
Description description = describeMethod( info );
if ( description != null ) return description.impact();
return super.getImpact( info );
}
private Description describeMethod( MBeanFeatureInfo info, String... prefixes )
{
if ( prefixes == null || prefixes.length == 0 )
{
try
{
return getClass().getMethod( info.getName() ).getAnnotation( Description.class );
}
catch ( Exception e )
{
return null;
}
}
else
{
for ( String prefix : prefixes )
{
try
{
return getClass().getMethod( prefix + info.getName() ).getAnnotation(
Description.class );
}
catch ( Exception e )
{
}
}
return null;
}
}
}