/**
   * Needed for hyperlink form switches...
   *
   * @param request
   * @throws DatabaseException
   */
  private void doXrefselect(Tuple request) throws DatabaseException {
    // also set the parent menu
    if (getParent() != null && getParent() instanceof MenuController) {
      // set the filter to select the xref-ed entity
      pager.resetFilters();
      getModel().setUserRules(new ArrayList<QueryRule>());
      QueryRule rule =
          new QueryRule(
              request.getString("attribute"),
              QueryRule.Operator.valueOf(request.getString("operator")),
              request.getString("value"));
      pager.addFilter(rule);

      // tell "my" menu to select me
      Tuple parentRequest = new SimpleTuple();
      String aChildName = getModel().getName();
      ScreenController<?> aParent = getParent();
      while (aParent != null) {
        if (aParent instanceof MenuModel) {
          parentRequest.set("select", aChildName);
          MenuController c = (MenuController) aParent;
          c.doSelect(parentRequest);
        }
        aChildName = aParent.getName();
        aParent = aParent.getParent();
      }
    }
  }
  private Show addFilters(DatabasePager<E> pager, Database db, Tuple request)
      throws DatabaseException, MolgenisModelException {
    List<QueryRule> userRules = new ArrayList<QueryRule>();
    for (int i = 0; i < MAX_FILTERS; ++i) {
      // suffix: __filter_value, __filter_value1, __filter_value2 etc.
      String suffix = i > 0 ? i + "" : "";

      String filterAttr = request.getString("__filter_attribute" + suffix);
      if (filterAttr == null) break;

      String operatorStr = request.getString("__filter_operator" + suffix);
      Operator operator = QueryRule.Operator.valueOf(operatorStr);
      String filterValue = request.getString("__filter_value" + suffix);

      QueryRule filterRule;
      if (filterAttr.equals(FILTER_ATTRIBUTE_ALL)) {
        filterRule = createFilterRule(db, operator, filterValue);
      } else {
        String fieldName = toFieldName(filterAttr);
        filterRule = createFilterRule(db, fieldName, operator, filterValue);
      }
      userRules.add(filterRule);
    }

    FormModel<E> model = getModel();
    model.getUserRules().addAll(userRules);

    // reset pager
    List<QueryRule> rules = new ArrayList<QueryRule>();
    rules.addAll(model.getUserRules());
    rules.addAll(model.getSystemRules());
    pager.resetFilters(rules);
    pager.first(db);

    return Show.SHOW_MAIN;
  }