/**
   * This method does the actual search
   *
   * @return
   */
  public Result searchWikiData() {

    // Get the input values from the search form
    DynamicForm dynamicForm = form().bindFromRequest();

    String entityId = dynamicForm.get("entityId").toUpperCase().trim();
    String lang = dynamicForm.get("language").toLowerCase().trim();
    String depthAsStr = dynamicForm.get("depth").toLowerCase().trim();
    int depth = 0;
    if (StringUtils.isNumeric(depthAsStr)) {
      depth = Integer.valueOf(depthAsStr);
    } else {
      return ok("Depth must be a number");
    }

    String propsStr = getPropertyList(dynamicForm.get("props"));
    String visMethod = dynamicForm.get("visMethod").toLowerCase().trim();

    boolean useInstance = false;

    if (dynamicForm.get("instance") != null) {
      useInstance = true;
      if (entityId.contains("Q")) {

        return ok("You can only use properties when the instance box is checked");
      }
    }

    // Check if the entity is a valid wikidata item
    entityId = getEntityId(entityId);

    if (entityId == null) {
      return ok("Wikidata does not contain such entity [" + entityId + "]");
    }

    searchedEntity = new WDEntity();
    searchedEntity.setId(entityId);
    searchedEntity.setLabel(JacksonDBAPI.getItemLabel(entityId, lang));
    searchedEntity.setDescription(JacksonDBAPI.getItemDescription(entityId, lang));
    searchedEntity.setAliases(JacksonDBAPI.getItemAliases(entityId, lang));
    initPropertyArgsAndFrameMatching(entityId);

    return forwordSeachRequest(entityId, lang, depth, propsStr, visMethod, useInstance);
  }