in hawtio-system/src/main/java/io/hawt/jmx/RBACRegistry.java [174:247]
private Map<String, Object> jsonifyMBeanInfo(MBeanInfo mBeanInfo) {
Map<String, Object> result = new LinkedHashMap<>();
// desc
result.put("desc", mBeanInfo.getDescription());
// attr
Map<String, Object> attrMap = new LinkedHashMap<>();
result.put("attr", attrMap);
for (MBeanAttributeInfo attrInfo : mBeanInfo.getAttributes()) {
if (attrInfo == null) {
continue;
}
Map<String, Object> attr = new HashMap<>();
attr.put("type", attrInfo.getType());
attr.put("desc", attrInfo.getDescription());
attr.put("rw", attrInfo.isWritable() && attrInfo.isReadable());
attrMap.put(attrInfo.getName(), attr);
}
// op
Map<String, Object> opMap = new LinkedHashMap<>();
result.put("op", opMap);
for (MBeanOperationInfo opInfo : mBeanInfo.getOperations()) {
Map<String, Object> map = new HashMap<>();
List<Map<String, String>> argList = new ArrayList<>(opInfo.getSignature().length);
for (MBeanParameterInfo paramInfo : opInfo.getSignature()) {
Map<String, String> args = new HashMap<>();
args.put("desc", paramInfo.getDescription());
args.put("name", paramInfo.getName());
args.put("type", paramInfo.getType());
argList.add(args);
}
map.put("args", argList);
map.put("ret", opInfo.getReturnType());
map.put("desc", opInfo.getDescription());
Object ops = opMap.get(opInfo.getName());
if (ops != null) {
if (ops instanceof List) {
// If it is already a list, simply add it to the end
((List) ops).add(map);
} else if (ops instanceof Map) {
// If it is a map, add a list with two elements
// (the old one and the new one)
List<Object> opList = new LinkedList<>();
opList.add(ops);
opList.add(map);
opMap.put(opInfo.getName(), opList);
}
} else {
// No value set yet, simply add the map as plain value
opMap.put(opInfo.getName(), map);
}
}
// not
Map<String, Object> notMap = new LinkedHashMap<>();
result.put("not", notMap);
for (MBeanNotificationInfo notInfo : mBeanInfo.getNotifications()) {
Map<String, Object> map = new HashMap<>();
map.put("name", notInfo.getName());
map.put("desc", notInfo.getDescription());
String[] types = notInfo.getNotifTypes();
List<String> tList = new ArrayList<>(types.length);
Collections.addAll(tList, types);
map.put("types", tList);
notMap.put(notInfo.getName(), map);
}
// this is default - in case we won't find RBACDecorator (possible in hawtio-wildfly for example)
result.put("canInvoke", true);
return result;
}