Class GridExporter<T>

java.lang.Object
com.flowingcode.vaadin.addons.gridexporter.GridExporter<T>
All Implemented Interfaces:
Serializable

public class GridExporter<T> extends Object implements Serializable
See Also:
  • Field Details

    • MAX_COST

      public static final float MAX_COST
      Represents all the permits available to the semaphore.
      See Also:
    • MIN_COST

      public static final float MIN_COST
      A fractional cost that acquires only one permit.
      See Also:
    • DEFAULT_COST

      public static final float DEFAULT_COST
      The standard unit of resource usage for concurrent downloads.
      See Also:
    • totalcells

      public int totalcells
  • Method Details

    • createFor

      public static <T> GridExporter<T> createFor(com.vaadin.flow.component.grid.Grid<T> grid)
    • createFor

      public static <T> GridExporter<T> createFor(com.vaadin.flow.component.grid.Grid<T> grid, String excelCustomTemplate, String docxCustomTemplate)
    • setButtonsAlignment

      public void setButtonsAlignment(ButtonsAlignment buttonsAlignment)
    • getDocxStreamResource

      public GridExporter<T>.GridExporterStreamResource getDocxStreamResource()
    • getDocxStreamResource

      public GridExporter<T>.GridExporterStreamResource getDocxStreamResource(String template)
    • getPdfStreamResource

      public GridExporter<T>.GridExporterStreamResource getPdfStreamResource()
    • getPdfStreamResource

      public GridExporter<T>.GridExporterStreamResource getPdfStreamResource(String template)
    • getCsvStreamResource

      public com.vaadin.flow.server.StreamResource getCsvStreamResource()
    • getExcelStreamResource

      public GridExporter<T>.GridExporterStreamResource getExcelStreamResource()
    • getExcelStreamResource

      public GridExporter<T>.GridExporterStreamResource getExcelStreamResource(String template)
    • addConcurrentDownloadTimeoutEvent

      public com.vaadin.flow.shared.Registration addConcurrentDownloadTimeoutEvent(com.vaadin.flow.function.SerializableConsumer<ConcurrentDownloadTimeoutEvent> listener)
      Adds a listener for concurrent download timeout events specific to this instance.

      The listener will be called whenever a concurrent download timeout event occurs.

      Parameters:
      listener - the listener to be added
      Returns:
      a Registration object that can be used to remove the listener
    • addGlobalConcurrentDownloadTimeoutEvent

      public static com.vaadin.flow.shared.Registration addGlobalConcurrentDownloadTimeoutEvent(com.vaadin.flow.function.SerializableConsumer<ConcurrentDownloadTimeoutEvent> listener)
      Adds a global listener for concurrent download timeout events.

      The listener will be called whenever a concurrent download timeout event occurs.

      Note that instance-specific listeners take precedence over global listeners. If an instance listener stops the event propagation by calling stopPropagation(), the global listeners will not be notified.

      Parameters:
      listener - the listener to be added
      Returns:
      a Registration object that can be used to remove the listener
    • setConcurrentDownloadLimit

      public static void setConcurrentDownloadLimit(float limit)
      Sets the limit for the cost of concurrent downloads. If all the downloads have a cost of DEFAULT_COST, the limit represents the number of concurrent downloads that are allowed.

      Finite limits are capped to MAX_COST (32767). If the limit is POSITIVE_INFINITY, concurrent downloads will not be limited.

      Parameters:
      limit - the maximum cost of concurrent downloads allowed
      Throws:
      IllegalArgumentException - if the limit is zero or negative.
    • getConcurrentDownloadLimit

      public static float getConcurrentDownloadLimit()
      Returns the limit for the number of concurrent downloads.
      Returns:
      the limit for the number of concurrent downloads, or Float.POSITIVE_INFINITY if concurrent downloads are not limited.
    • setConcurrentDownloadTimeout

      public static void setConcurrentDownloadTimeout(long timeout, TimeUnit unit)
      Sets the timeout for acquiring a permit to start a download when the maximum number of concurrent downloads is reached. If the timeout is less than or equal to zero, the downloads will fail immediately if no enough permits can be acquired. This timeout is crucial for preventing the system from hanging indefinitely while waiting for available resources. If the timeout expires before a permit can be acquired, the download is cancelled.
      Parameters:
      timeout - the maximum time to wait for a permit
      unit - the time unit of the timeout argument
    • setDisableOnClick

      public void setDisableOnClick(boolean disableOnClick)
      Configures the behavior of the system when a download is in progress.

      When disableOnClick is set to true, the system prevents the UI from starting an additional download of the same kind while one is already in progress. Downloads from other UIs are still allowed. When set to false, concurrent downloads are permitted.

      Parameters:
      disableOnClick - Whether to prevent additional downloads during an ongoing download.
    • setConcurrentDownloadCost

      public void setConcurrentDownloadCost(float concurrentDownloadCost)
      Sets the cost for concurrent downloads. This cost is used to determine the number of permits required for downloads to proceed, thereby controlling the concurrency level. At any given time, the sum of the costs of all concurrent downloads will not exceed the limit set by setConcurrentDownloadLimit(float).

      The cost is represented as a float to allow for more granular control over resource usage. By using a floating-point number, fractional costs can be expressed, providing flexibility in determining the resource consumption for different downloads.

      The cost is converted to a number of permits by capping it to stay within the limit. A cost of 1.0 (DEFAULT_COST) represents a standard unit of resource usage, while a cost of 0.5 represents half a unit, and a cost above 1.0 indicates higher than normal resource usage.

      If the cost is zero or negative, no permits are needed. However, any positive cost, no matter how small, will require at least one permit to prevent downloads with very low costs from bypassing the semaphore. MIN_COST represents the minimal fractional cost that acquires only one permit (hence 2*MIN_COST acquires two permits and so on). A cost of MAX_COST prevents any other downloads from acquiring permits simultaneously.

      Parameters:
      concurrentDownloadCost - the cost associated with concurrent downloads for this instance.
    • getTitle

      public String getTitle()
    • setTitle

      public void setTitle(String title)
      Sets the title of the exported file
      Parameters:
      title -
    • getFileName

      public String getFileName()
    • setFileName

      public void setFileName(String fileName)
      Sets the filename of the exported file
      Parameters:
      fileName -
    • isAutoAttachExportButtons

      public boolean isAutoAttachExportButtons()
    • setAutoAttachExportButtons

      public void setAutoAttachExportButtons(boolean autoAttachExportButtons)
      If true, it will automatically generate export buttons in the asociated grid
      Parameters:
      autoAttachExportButtons -
    • getAdditionalPlaceHolders

      public Map<String,String> getAdditionalPlaceHolders()
    • setAdditionalPlaceHolders

      public void setAdditionalPlaceHolders(Map<String,String> additionalPlaceHolders)
      Sets a map that will contain additional place holders that will be replaced with values when processing the exported file
      Parameters:
      additionalPlaceHolders -
    • getSheetNumber

      public int getSheetNumber()
    • setSheetNumber

      public void setSheetNumber(int sheetNumber)
      Configures the excel sheet that will be inspected for placeholders to export the data
      Parameters:
      sheetNumber -
    • isAutoMergeTitle

      public boolean isAutoMergeTitle()
    • setAutoMergeTitle

      public void setAutoMergeTitle(boolean autoMergeTitle)
      If true the title cell will be merged with the next ones to create a single title cell that will span across the columns
      Parameters:
      autoMergeTitle -
    • isExcelExportEnabled

      public boolean isExcelExportEnabled()
    • setExcelExportEnabled

      public void setExcelExportEnabled(boolean excelExportEnabled)
    • isDocxExportEnabled

      public boolean isDocxExportEnabled()
    • setDocxExportEnabled

      public void setDocxExportEnabled(boolean docxExportEnabled)
    • isPdfExportEnabled

      public boolean isPdfExportEnabled()
    • setPdfExportEnabled

      public void setPdfExportEnabled(boolean pdfExportEnabled)
    • isCsvExportEnabled

      public boolean isCsvExportEnabled()
    • setCsvExportEnabled

      public void setCsvExportEnabled(boolean csvExportEnabled)
    • isAutoSizeColumns

      public boolean isAutoSizeColumns()
    • setAutoSizeColumns

      public void setAutoSizeColumns(boolean autoSizeColumns)
    • setExportValue

      public void setExportValue(com.vaadin.flow.component.grid.Grid.Column<T> column, com.vaadin.flow.function.ValueProvider<T,?> vp)
      Configure a value provider for a given column. If there is a value provider, that will be taken into account when exporting the column
      Parameters:
      column -
      vp -
    • setExportColumn

      public void setExportColumn(com.vaadin.flow.component.grid.Grid.Column<T> column, boolean export)
      Configure if the column is exported or not
      Parameters:
      column -
      export - : true will be included in the exported file, false will not be included
    • setNullValueHandler

      public void setNullValueHandler(com.vaadin.flow.function.SerializableSupplier<String> nullValueSupplier)
    • setNumberColumnFormat

      public void setNumberColumnFormat(com.vaadin.flow.component.grid.Grid.Column<T> column, DecimalFormat decimalFormat, String excelFormat)
      If the column is based on a String, it configures a DecimalFormat to parse a number from the value of the column so it can be converted to a Double, and then allows to specify the excel format to be applied to the cell when exported to excel, so the resulting cell is not a string but a number that can be used in formulas.
      Parameters:
      column -
      decimalFormat -
      excelFormat -
    • setNumberColumnFormatProvider

      public void setNumberColumnFormatProvider(com.vaadin.flow.component.grid.Grid.Column<T> column, DecimalFormat decimalFormat, com.vaadin.flow.function.ValueProvider<T,String> excelFormatProvider)
      If the column is based on a String, it configures a DecimalFormat to parse a number from the value of the column so it can be converted to a Double, and then allows to specify the excel format to be applied to the cell when exported to excel with a provider, so the resulting cell is not a string but a number that can be used in formulas.
      Parameters:
      column -
      decimalFormat -
      excelFormatProvider -
    • setDateColumnFormat

      public void setDateColumnFormat(com.vaadin.flow.component.grid.Grid.Column<T> column, DateFormat dateFormat, String excelFormat)
      If the column is based on a String, it configures a DateFormat to parse a date from the value of the column so it can be converted to a java.util.Date, and then allows to specify the excel format to be applied to the cell when exported to excel, so the resulting cell is not a string but a date that can be used in formulas.
      Parameters:
      column -
      dateFormat -
      excelFormat -
    • setDateColumnFormatProvider

      public void setDateColumnFormatProvider(com.vaadin.flow.component.grid.Grid.Column<T> column, DateFormat dateFormat, com.vaadin.flow.function.ValueProvider<T,String> excelFormatProvider)
      If the column is based on a String, it configures a DateFormat to parse a date from the value of the column so it can be converted to a java.util.Date, and then allows to specify the excel format to be applied to the cell when exported to excel, so the resulting cell is not a string but a date that can be used in formulas.
      Parameters:
      column -
      dateFormat -
      excelFormat -
    • setNumberColumnFormat

      public void setNumberColumnFormat(com.vaadin.flow.component.grid.Grid.Column<T> column, String excelFormat)
      If the column is based on a number attribute of the item, rendered with a NumberRenderer, it configures the excel format to be applied to the cell when exported to excel, so the resulting cell is not a string but a number that can be used in formulas.
      Parameters:
      column -
      excelFormat -
    • setDateColumnFormat

      public void setDateColumnFormat(com.vaadin.flow.component.grid.Grid.Column<T> column, String excelFormat)
      If the column is based on a LocalDate attribute of the item, rendered with a LocalDateRenderer, it configures the excel format to be applied to the cell when exported to excel, so the resulting cell is not a string but a date that can be used in formulas.
      Parameters:
      column -
      excelFormat -
    • setCustomHeader

      public void setCustomHeader(com.vaadin.flow.component.grid.Grid.Column<T> column, String header)
      Configures the exporter to use a custom string for a specific column's header. Usefull when the header is a custom component.
      Parameters:
      column -
      header -
    • setCustomFooter

      public void setCustomFooter(com.vaadin.flow.component.grid.Grid.Column<T> column, String header)
      Configures the exporter to use a custom string for a specific column's footer. Usefull when the footer is a custom component.
      Parameters:
      column -
      header -
    • setColumnPosition

      public void setColumnPosition(com.vaadin.flow.component.grid.Grid.Column<T> column, int position)
      Assigns the position of the column in the exported file.
      Parameters:
      column -
      position -
    • setColumns

      public void setColumns(List<com.vaadin.flow.component.grid.Grid.Column<T>> columns)
    • getColumns

      public List<com.vaadin.flow.component.grid.Grid.Column<T>> getColumns()
    • getColumnsOrdered

      public List<com.vaadin.flow.component.grid.Grid.Column<T>> getColumnsOrdered()
      Get columns in the positions specified by GridExporter.setColumnPosition
      Returns:
    • setFooterToolbarItems

      public void setFooterToolbarItems(List<FooterToolbarItem> footerToolbarItems)
    • getCsvCharset

      public Charset getCsvCharset()
      Charset to use when exporting the CSV file.
      Returns:
      CSV file charset or default one.
    • setCsvCharset

      public void setCsvCharset(com.vaadin.flow.function.SerializableSupplier<Charset> charset)