package com.intrbiz.bergamot.check.jmx; import java.util.LinkedList; import java.util.List; import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; public class JMXMBeanOperation { private final JMXMBean mBean; private final MBeanOperationInfo info; private List<JMXMBeanOperationParameter> parameters; private String[] signature; public JMXMBeanOperation(JMXMBean mBean, MBeanOperationInfo info) { this.mBean = mBean; this.info = info; } public String getName() { return this.info.getName(); } public String getReturnType() { return this.info.getReturnType(); } public String getDescription() { return this.info.getDescription(); } public List<JMXMBeanOperationParameter> getParameters() { if (this.parameters == null) { this.parameters = new LinkedList<JMXMBeanOperationParameter>(); for (MBeanParameterInfo info : this.info.getSignature()) { this.parameters.add(new JMXMBeanOperationParameter(info)); } } return this.parameters; } public String[] getSignature() { if (this.signature == null) { MBeanParameterInfo[] params = this.info.getSignature(); this.signature = new String[params.length]; for (int i = 0; i < params.length; i++) { this.signature[i] = params[i].getType(); } } return this.signature; } String getOperationId() { return operationId(this.getName(), this.getSignature()); } static String operationId(String name, String[] signature) { StringBuilder sb = new StringBuilder(name); for (String ss : signature) { sb.append(";").append(ss); } return sb.toString(); } public <T> T invoke(Object... parameters) { return this.mBean.invokeOperation(this.getName(), this.getSignature(), parameters); } }