@RequestMapping("/{menuId}")
  public String forwardMenuDefaultPlugin(@Valid @NotNull @PathVariable String menuId, Model model) {
    MolgenisUiMenu menu = molgenisUi.getMenu(menuId);
    if (menu == null) throw new RuntimeException("menu with id [" + menuId + "] does not exist");
    model.addAttribute(KEY_MENU_ID, menuId);

    MolgenisUiMenuItem activeItem = menu.getActiveItem();
    String pluginId = activeItem != null ? activeItem.getId() : VoidPluginController.ID;

    String contextUri =
        new StringBuilder(URI).append('/').append(menuId).append('/').append(pluginId).toString();
    model.addAttribute(KEY_CONTEXT_URL, contextUri);
    model.addAttribute(KEY_MOLGENIS_VERSION, molgenisVersion);
    model.addAttribute(KEY_MOLGENIS_BUILD_DATE, molgenisBuildData);
    return getForwardPluginUri(pluginId, null);
  }
  @RequestMapping
  public String forwardDefaultMenuDefaultPlugin(Model model) {
    MolgenisUiMenu menu = molgenisUi.getMenu();
    if (menu == null) throw new RuntimeException("main menu does not exist");
    String menuId = menu.getId();
    model.addAttribute(KEY_MENU_ID, menuId);

    MolgenisUiMenuItem activeItem = menu.getActiveItem();
    if (activeItem == null) {
      LOG.warn("main menu does not contain any (accessible) items");
      return "forward:/login";
    }
    String pluginId = activeItem.getId();

    String contextUri =
        new StringBuilder(URI).append('/').append(menuId).append('/').append(pluginId).toString();
    model.addAttribute(KEY_CONTEXT_URL, contextUri);
    model.addAttribute(KEY_MOLGENIS_VERSION, molgenisVersion);
    model.addAttribute(KEY_MOLGENIS_BUILD_DATE, molgenisBuildData);
    return getForwardPluginUri(activeItem.getUrl(), null);
  }