private String getOnclick(ExportConf exportConf) {

    String oTableId = "oTable_" + table.getId();
    StringBuilder params = new StringBuilder();

    StringBuilder exportFuncName = new StringBuilder("ddl_dt_launch_export_");
    exportFuncName.append(table.getId());
    exportFuncName.append("_");
    exportFuncName.append(exportConf.getFormat());

    StringBuilder exportFunc = new StringBuilder("function ");
    exportFunc.append(exportFuncName.toString());
    exportFunc.append("(){");

    params.append(oTableId).append(".ajax.params()");

    // HTTP GET
    if (exportConf.getMethod().equals(HttpMethod.GET)) {
      exportFunc.append("window.location=\"").append(exportConf.getUrl());
      if (exportConf.getUrl().contains("?")) {
        exportFunc.append("&");
      } else {
        exportFunc.append("?");
      }

      // Parameters should be decoded because jQuery.param() uses
      // .serialize() which encodes the URL
      exportFunc
          .append("\" + decodeURIComponent($.param(")
          .append(params.toString())
          .append(")).replace(/\\+/g,' ');");
    }
    // HTTP POST/PUT/DELETE
    else {
      exportFunc
          .append("$.download('")
          .append(exportConf.getUrl())
          .append("', decodeURIComponent($.param(")
          .append(params.toString())
          .append(")).replace(/\\+/g,' '),'")
          .append(exportConf.getMethod())
          .append("');");
    }

    exportFunc.append("}");

    appendToBeforeAll(exportFunc.toString());

    return exportFuncName.append("();").toString();
  }
  @Override
  public void setup(HtmlTable table) {

    this.table = table;

    // If the export has been configured to be triggered with a POST, PUT or
    // DELETE HTTP method, a custom plugin must be added to the page
    for (ExportConf exportConf : table.getTableConfiguration().getExportConfiguration().values()) {
      if (exportConf.getMethod().equals(HttpMethod.POST)
          || exportConf.getMethod().equals(HttpMethod.PUT)
          || exportConf.getMethod().equals(HttpMethod.DELETE)) {
        addBundle(DatatableBundles.JQUERY_DOWNLOAD);
      }
    }

    String exportContainerStyle =
        DatatableOptions.EXPORT_CONTAINER_STYLE.valueFrom(table.getTableConfiguration());
    String exportContainerClass =
        DatatableOptions.EXPORT_CONTAINER_CLASS.valueFrom(table.getTableConfiguration());

    // In order to be easily positioned around the table, a DataTable
    // feature is created
    ExtraHtml extraHtml = new ExtraHtml();
    extraHtml.setUid("E");
    extraHtml.setContainer("div");
    extraHtml.setCssClass(
        "dataTables_export "
            + (StringUtils.isNotBlank(exportContainerClass) ? exportContainerClass : ""));
    extraHtml.setCssStyle(
        StringUtils.isNotBlank(exportContainerStyle) ? exportContainerStyle : "float: right;");

    String dom = DatatableOptions.FEATURE_DOM.valueFrom(table.getTableConfiguration());
    if (table.getTableConfiguration().getConfigurations().containsKey(DatatableOptions.CSS_THEME)
        && table
            .getTableConfiguration()
            .getConfigurations()
            .get(DatatableOptions.CSS_THEME)
            .getClass()
            .getSimpleName()
            .equals("JQueryUITheme")) {
      addParameter(
          DTConstants.DT_DOM,
          "<'" + TOOLBAR_PREXIX + "-tr'lEfr>t<'" + TOOLBAR_PREXIX + "-br'ip>",
          Mode.OVERRIDE);
    } else if (StringUtils.isBlank(dom)) {
      addParameter(DTConstants.DT_DOM, "lEfrtip", Mode.OVERRIDE);
    }

    StringBuilder content = new StringBuilder();
    HtmlHyperlink link = null;

    // A HTML link is generated for each ExportConf bean
    for (ExportConf conf : table.getTableConfiguration().getExportConfiguration().values()) {

      link = new HtmlHyperlink();

      if (conf.getCssClass() != null) {
        link.setCssClass(conf.getCssClass());
      }

      if (conf.getCssStyle() != null) {
        link.setCssStyle(conf.getCssStyle());
        link.addCssStyle(";margin-left:2px;");
      } else {
        link.addCssStyle("margin-left:2px;");
      }

      if (conf.hasCustomUrl()) {
        link.setOnclick(getOnclick(conf));
      } else {
        link.setHref(conf.getUrl());
      }
      link.addContent(conf.getLabel());
      content.append(link.toHtml());
    }
    extraHtml.setContent(content.toString());

    // Once created, the extraHtml is transformed into Javascript and
    // appended in the DataTables configuration
    appendToAfterStartDocumentReady(extraHtml.getJavascript().toString());
  }