@Override
  public List<String> findLanguageNames(String filter) {
    List<String> answer = new ArrayList<String>();

    List<String> names = findLanguageNames();
    for (String name : names) {
      String json = languageJSonSchema(name);
      if (json != null) {
        List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("language", json, false);
        for (Map<String, String> row : rows) {
          if (row.containsKey("label")) {
            String label = row.get("label");
            String[] parts = label.split(",");
            for (String part : parts) {
              try {
                if (part.equalsIgnoreCase(filter)
                    || CatalogHelper.matchWildcard(part, filter)
                    || part.matches(filter)) {
                  answer.add(name);
                }
              } catch (PatternSyntaxException e) {
                // ignore as filter is maybe not a pattern
              }
            }
          }
        }
      }
    }

    return answer;
  }
  @Override
  public List<String> findModelNames() {
    List<String> names = new ArrayList<String>();

    InputStream is = DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(MODELS_CATALOG);
    if (is != null) {
      try {
        CatalogHelper.loadLines(is, names);
      } catch (IOException e) {
        // ignore
      }
    }
    return names;
  }
  @Override
  public String blueprintSchemaAsXml() {
    String file = SCHEMAS_XML + "/camel-blueprint.xsd";

    InputStream is = DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(file);
    if (is != null) {
      try {
        return CatalogHelper.loadText(is);
      } catch (IOException e) {
        // ignore
      }
    }

    return null;
  }
  @Override
  public String archetypeCatalogAsXml() {
    String file = ARCHETYPES_CATALOG;

    InputStream is = DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(file);
    if (is != null) {
      try {
        return CatalogHelper.loadText(is);
      } catch (IOException e) {
        // ignore
      }
    }

    return null;
  }
  @Override
  public String languageJSonSchema(String name) {
    String file = LANGUAGE_JSON + "/" + name + ".json";

    InputStream is = DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(file);
    if (is != null) {
      try {
        return CatalogHelper.loadText(is);
      } catch (IOException e) {
        // ignore
      }
    }

    return null;
  }
  @Override
  public String listModelsAsJson() {
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    List<String> names = findModelNames();
    for (int i = 0; i < names.size(); i++) {
      String scheme = names.get(i);
      String json = modelJSonSchema(scheme);
      // skip first line
      json = CatalogHelper.between(json, "\"model\": {", "\"properties\": {");
      json = json.trim();
      // skip last comma if not the last
      if (i == names.size() - 1) {
        json = json.substring(0, json.length() - 1);
      }
      sb.append("\n");
      sb.append("  {\n");
      sb.append("    ");
      sb.append(json);
    }

    sb.append("\n]");
    return sb.toString();
  }