All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.data.jpa.support.DataTablesInput Maven / Gradle / Ivy

package org.springframework.data.jpa.support;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

public class DataTablesInput {

  /**
   * Draw counter. This is used by DataTables to ensure that the Ajax returns from
   * server-side processing requests are drawn in sequence by DataTables (Ajax requests
   * are asynchronous and thus can return out of sequence). This is used as part of the
   * draw return parameter (see below).
   */
  @NotNull
  @Min(0)
  private Integer draw = 1;

  /**
   * Paging first record indicator. This is the start point in the current data set (0
   * index based - i.e. 0 is the first record).
   */
  @NotNull
  @Min(0)
  private Integer start = 0;

  /**
   * Number of records that the table can display in the current draw. It is expected that
   * the number of records returned will be equal to this number, unless the server has
   * fewer records to return. Note that this can be -1 to indicate that all records should
   * be returned (although that negates any benefits of server-side processing!)
   */
  @NotNull
  @Min(-1)
  private Integer length = 10;

  /**
   * Global search parameter.
   */
  @NotNull
  private Search search = new Search();

  /**
   * Order parameter
   */
  @NotEmpty
  private List order = new ArrayList();

  /**
   * Per-column search parameter
   */
  @NotEmpty
  private List columns = new ArrayList();

  /**
   * 
   * @return a {@link Map} of {@link Column} indexed by name
   */
  public Map getColumnsAsMap() {
    Map map = new HashMap();
    for (Column column : columns) {
      map.put(column.getData(), column);
    }
    return map;
  }

  /**
   * Find a column by its name
   *
   * @param columnName the name of the column
   * @return the given Column, or null if not found
   */
  public Column getColumn(String columnName) {
    if (columnName == null) {
      return null;
    }
    for (Column column : columns) {
      if (columnName.equals(column.getData())) {
        return column;
      }
    }
    return null;
  }

  /**
   * Add a new column
   *
   * @param columnName the name of the column
   * @param searchable whether the column is searchable or not
   * @param orderable whether the column is orderable or not
   * @param searchValue if any, the search value to apply
   */
  public void addColumn(String columnName, boolean searchable, boolean orderable, String searchValue) {
    this.columns.add(new Column(columnName, "", searchable, orderable, new Search(searchValue, false)));
  }

  /**
   * Add an order on the given column
   *
   * @param columnName the name of the column
   * @param ascending whether the sorting is ascending or descending
   */
  public void addOrder(String columnName, boolean ascending) {
    if (columnName == null) {
      return;
    }
    for (int i = 0; i < columns.size(); i++) {
      if (!columnName.equals(columns.get(i).getData())) {
        continue;
      }
      order.add(new Order(i, ascending ? "asc" : "desc"));
    }
  }

  public Integer getDraw() {
    return draw;
  }

  public void setDraw(Integer draw) {
    this.draw = draw;
  }

  public Integer getStart() {
    return start;
  }

  public void setStart(Integer start) {
    this.start = start;
  }

  public Integer getLength() {
    return length;
  }

  public void setLength(Integer length) {
    this.length = length;
  }

  public Search getSearch() {
    return search;
  }

  public void setSearch(Search search) {
    this.search = search;
  }

  public List getOrder() {
    return order;
  }

  public void setOrder(List order) {
    this.order = order;
  }

  public List getColumns() {
    return columns;
  }

  public void setColumns(List columns) {
    this.columns = columns;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy