public TabularData listComponents() throws Exception {
try {
// find all components
Map<String, Properties> components = context.findComponents();
TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.listComponentsTabularType());
// gather component detail for each component
for (Map.Entry<String, Properties> entry : components.entrySet()) {
String name = entry.getKey();
String description = null;
// the status can be:
// - in use = used by Camel
// - classpath = on the classpath
// - release = available from the Apache Camel release
// TODO: gather list of components in the Camel release
String status = context.hasComponent(name) != null ? "in use" : "on classpath";
String type = (String) entry.getValue().get("class");
String groupId = null;
String artifactId = null;
String version = null;
// a component may have been given a different name, so resolve its default name by its java type
// as we can find the component json information from the default component name
String defaultName = context.resolveComponentDefaultName(type);
String target = defaultName != null ? defaultName : name;
// load component json data, and parse it to gather the component meta-data
String json = context.getComponentParameterJsonSchema(target);
List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("component", json, false);
for (Map<String, String> row : rows) {
if (row.containsKey("description")) {
description = row.get("description");
} else if (row.containsKey("javaType")) {
type = row.get("javaType");
} else if (row.containsKey("groupId")) {
groupId = row.get("groupId");
} else if (row.containsKey("artifactId")) {
artifactId = row.get("artifactId");
} else if (row.containsKey("version")) {
version = row.get("version");
}
}
CompositeType ct = CamelOpenMBeanTypes.listComponentsCompositeType();
CompositeData data = new CompositeDataSupport(ct, new String[]{"name", "description", "status", "type", "groupId", "artifactId", "version"},
new Object[]{name, description, status, type, groupId, artifactId, version});
answer.put(data);
}
return answer;
} catch (Exception e) {
throw ObjectHelper.wrapRuntimeCamelException(e);
}