package org.oddjob.jmx.server; import java.util.ArrayList; import java.util.List; import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; public class JMXOperationPlus<T> extends JMXOperation<T> { private final String actionName; private final Class<T> returnType; private final String description; private final int impact; private final List<Param> params = new ArrayList<Param>(); public JMXOperationPlus(String actionName, String description, Class<T> returnType, int impact) { this.actionName = actionName; this.returnType = returnType; this.description = description; this.impact = impact; } public String getActionName() { return actionName; } public String[] getSignature() { String[] signature = new String[params.size()]; int i = 0; for (Param param : params) { signature[i++] = param.type.getName(); } return signature; } public MBeanOperationInfo getOpInfo() { MBeanParameterInfo[] paramInfos = new MBeanParameterInfo[params.size()]; int i = 0; for (Param param : params) { paramInfos[i++] = new MBeanParameterInfo( param.name, param.type.getName(), param.description); } return new MBeanOperationInfo( actionName, description, paramInfos, returnType.getName(), impact); } public JMXOperationPlus<T> addParam(String name, Class<?> type, String description) { params.add(new Param(name, type, description)); return this; } class Param { final String name; final Class<?> type; final String description; Param(String name, Class<?> type, String description) { this.name = name; this.type = type; this.description = description; } } }