public String componentParameterJsonSchema(String componentName) throws Exception { // favor using pre generated schema if component has that String json = context.getComponentParameterJsonSchema(componentName); if (json == null) { // okay this requires having the component on the classpath and being instantiated Component component = context.getComponent(componentName); if (component != null) { ComponentConfiguration configuration = component.createComponentConfiguration(); json = configuration.createParameterJsonSchema(); } } return json; }
@Override 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 title = null; String syntax = null; String description = null; String label = null; String deprecated = null; 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("title")) { title = row.get("title"); } else if (row.containsKey("syntax")) { syntax = row.get("syntax"); } else if (row.containsKey("description")) { description = row.get("description"); } else if (row.containsKey("label")) { label = row.get("label"); } else if (row.containsKey("deprecated")) { deprecated = row.get("deprecated"); } 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", "title", "syntax", "description", "label", "deprecated", "status", "type", "groupId", "artifactId", "version" }, new Object[] { name, title, syntax, description, label, deprecated, status, type, groupId, artifactId, version }); answer.put(data); } return answer; } catch (Exception e) { throw ObjectHelper.wrapRuntimeCamelException(e); } }