org.glowroot.shaded.h2.jmx.DocumentedMBean Maven / Gradle / Ivy
/*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.glowroot.shaded.h2.jmx;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
import org.glowroot.shaded.h2.util.Utils;
/**
* An MBean that reads the documentation from a resource file.
*/
public class DocumentedMBean extends StandardMBean {
private final String interfaceName;
private Properties resources;
public DocumentedMBean(T impl, Class mbeanInterface)
throws NotCompliantMBeanException {
super(impl, mbeanInterface);
this.interfaceName = impl.getClass().getName() + "MBean";
}
private Properties getResources() {
if (resources == null) {
resources = new Properties();
String resourceName = "/org.glowroot.shaded.h2/res/javadoc.properties";
try {
byte[] buff = Utils.getResource(resourceName);
if (buff != null) {
resources.load(new ByteArrayInputStream(buff));
}
} catch (IOException e) {
// ignore
}
}
return resources;
}
@Override
protected String getDescription(MBeanInfo info) {
String s = getResources().getProperty(interfaceName);
return s == null ? super.getDescription(info) : s;
}
@Override
protected String getDescription(MBeanOperationInfo op) {
String s = getResources().getProperty(interfaceName + "." + op.getName());
return s == null ? super.getDescription(op) : s;
}
@Override
protected String getDescription(MBeanAttributeInfo info) {
String prefix = info.isIs() ? "is" : "get";
String s = getResources().getProperty(
interfaceName + "." + prefix + info.getName());
return s == null ? super.getDescription(info) : s;
}
@Override
protected int getImpact(MBeanOperationInfo info) {
if (info.getName().startsWith("list")) {
return MBeanOperationInfo.INFO;
}
return MBeanOperationInfo.ACTION;
}
}