@Override
  protected Object getProcessedValue(OptionProcessingContext context) {
    Integer result = null;
    String valueAsString = context.getValueAsString();
    try {
      result = StringUtils.isNotBlank(valueAsString) ? Integer.parseInt(valueAsString) : null;
    } catch (NumberFormatException e) {
      throw new DandelionException(
          "The value '" + valueAsString + "' cannot be parsed to Integer", e);
    }

    return result;
  }
 public HtmlColumn(
     Boolean isHeader,
     String content,
     Map<String, String> dynamicAttributes,
     String displayTypes) {
   setHeaderColumn(isHeader);
   if (isHeader) {
     this.columnConfiguration = new ColumnConfiguration();
   }
   if (content != null) {
     setContent(new StringBuilder(content));
   }
   this.dynamicAttributes = dynamicAttributes;
   if (StringUtils.isNotBlank(displayTypes)) {
     String[] displayTypesTab = displayTypes.trim().split(",");
     for (String displayType : displayTypesTab) {
       this.enabledDisplayTypes.add(displayType.toLowerCase().trim());
     }
   } else {
     enabledDisplayTypes.add(ReservedFormat.ALL);
   }
 }
  @Override
  protected StringBuilder getHtmlAttributes() {
    StringBuilder html = new StringBuilder();
    if (this.isHeaderColumn) {
      html.append(
          writeAttribute(
              "class",
              DatatableOptions.CSSCLASS.valueFrom(this.getColumnConfiguration().getOptions())));
      html.append(
          writeAttribute(
              "style",
              DatatableOptions.CSSSTYLE.valueFrom(this.getColumnConfiguration().getOptions())));

      String columnId = DatatableOptions.ID.valueFrom(this.getColumnConfiguration().getOptions());
      if (StringUtils.isNotBlank(columnId)) {
        html.append(writeAttribute("id", columnId));
      }
    } else {
      html.append(writeAttribute("class", this.cssCellClass));
      html.append(writeAttribute("style", this.cssCellStyle));
    }
    return html;
  }
  @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());
  }