/*
* Copyright 2011 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.x38.dto;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;
/**
* Bean contenedor de las propiedades que utiliza el componente jqGrid.
*
* @author UDA
*
* @param <T> Tipo de bean que se va a representar en el grid.
*/
@JsonInclude(Include.NON_NULL)
public class JQGridDto<T> {
//Página actual
private String page = null;
//Datos de la página
private List<T> rows = null;
//Número total de páginas
private String total = null;
//Número total de registros
private Integer records = null;
// Parámetros adicionales
private Map<String,Object> additionalParams = new HashMap<String, Object>();
//Constantes para parámetros adicionales
public static final String CHILDREN = "children";
/**
* Constructor.
*/
public JQGridDto() {
super();
}
/**
* Contructor.
*
* @param pagination
* Objeto paginación.
* @param recordNum
* Numero de registros.
* @param rows
* Lista contenedora de los registros.
*/
public JQGridDto(Pagination pagination, Long recordNum, List<T> rows) {
this(pagination, recordNum, null, rows);
}
/**
* Contructor.
*
* @param pagination
* Objeto paginación.
* @param recordNum
* Numero de registros.
* @param total
* Numero de resgistros totales.
* @param rows
* Lista contenedora de los registros.
*/
public JQGridDto(Pagination pagination, Long recordNum, Long total, List<T> rows) {
this(pagination, recordNum, total, rows, null);
}
/**
* Contructor.
*
* @param pagination
* Objeto paginación.
* @param recordNum
* Numero de registros.
* @param rows
* Lista contenedora de los registros.
* @param reorderedSelection
* Lista con la reordenación de los registros.
*/
public JQGridDto(Pagination pagination, Long recordNum, List<T> rows, List<TableRowDto<T>> reorderedSelection) {
this(pagination, recordNum, null, rows, reorderedSelection);
}
/**
* Contructor.
*
* @param pagination
* Objeto paginación.
* @param recordNum
* Numero de registros.
* @param total
* Numero de resgistros totales.
* @param rows
* Lista contenedora de los registros.
* @param reorderedSelection
* Lista con la reordenación de los registros.
*/
public JQGridDto(Pagination pagination, Long recordNum, Long total, List<T> rows, List<TableRowDto<T>> reorderedSelection) {
super();
this.page = (pagination.getPage()!=null)?pagination.getPage().toString():"";
this.rows = rows;
this.setTotal(recordNum, (pagination.getRows()!=null)?pagination.getRows():0);
this.records = total!=null?total.intValue():recordNum.intValue();
this.addAdditionalParam("reorderedSelection", reorderedSelection);
this.addAdditionalParam("selectedAll", pagination.getMultiselection().getSelectedAll());
}
/**
* @return the page
*/
public String getPage() {
return page;
}
/**
* @param page the page to set
*/
public void setPage(String page) {
this.page = page;
}
/**
* @return the rows
*/
public List<?> getRows() {
return rows;
}
/**
* @param rows the rows to set
*/
public void setRows(List<T> rows) {
this.rows = rows;
}
/**
* @return the total
*/
public String getTotal() {
return total;
}
/**
* Calcula el numero total de paginas, segun los registros totales y el numero de regitros pro página
*
* @param total el número de registros totales
* @param rows el número de filas por pagina
*/
public void setTotal(Long total, Long rows) {
double dTotal = total.doubleValue();
double dRows = rows.doubleValue();
double totalPages = (total > 0) ? Math.ceil(dTotal / dRows) : 0;
this.total = String.valueOf((int)totalPages);
}
/**
* @return the records
*/
public Integer getRecords() {
return records;
}
/**
* @param records the records to set
*/
public void setRecords(Integer records) {
this.records = records;
}
/*
* Funciones asociadas a la gestión de parámetros adicionales
*/
/**
* Añade un parámetro adicional.
*
* @param key
* Nombre del parámetro.
* @param param
* Objeto a admacenar.
*/
public void addAdditionalParam(String key, Object param){
this.additionalParams.put(key, param);
}
/**
* Recupera un parámetro adicional.
*
* @param key
* Nombre del parámetro.
* @return Parámetro almacenado.
*/
public Object getAdditionalParam(String name) {
return this.additionalParams.get(name);
}
/**
* Elimina un parámetro adicional de estructura.
*
* @param key
* Nombre del parámetro.
*/
public void removeAdditionalParam(String name) {
this.additionalParams.remove(name);
}
/**
* Devuelve el mapa que almacena los parámetros adicionales.
*
* @param name
* @return
*/
@JsonIgnore
public Map<String,Object> getAdditionalParamsMap() {
return this.additionalParams;
}
/**
* Método "any getter" necesario para la serialización del contenido del
* mapa.
*
* @return Mapa que contiene los parámetros adicionales.
*/
@JsonAnyGetter
public Map<String,Object> anyAdditionalParams() {
return this.additionalParams;
}
/**
* Método "any setter" necesario para la deserialización del parámetros al mapa
*
* @return Mapa que contiene los parámetros adicionales.
*/
@JsonAnySetter
public void set(String name, Object value) {
this.additionalParams.put(name, value);
}
/*
* Funciones auxiliares
*/
public void setReorderedSelection(List<TableRowDto<T>> reorderedSelection){
}
public String toString() {
StringBuilder result = new StringBuilder();
result.append(this.getClass().getName()).append(" Object {");
result.append(" [ page: ").append(this.page).append(" ]");
result.append(" [ rows: ").append(this.rows).append(" ]");
result.append(" [ total: ").append(this.total).append(" ]");
result.append(" [ records: ").append(this.records).append(" ]");
result.append("}");
return result.toString();
}
// /**
// * Procesa la estructura reorderedSelection para completar los datos a
// * partir de la información de la paginación.
// *
// * @param reorderedSelection
// * Lista de registros reordenados.
// * @param pagination
// * Objeto paginación.
// * @return Lista procesada de elementos reordenados.
// */
// private List<TableRowDto<T>> processReorderedSelection(List<TableRowDto<T>> reorderedSelection, Pagination pagination){
// if (reorderedSelection != null && pagination != null){
// List<TableRowDto<T>> proccesedReorderedSelection = new ArrayList<TableRowDto<T>>(reorderedSelection);
// for (TableRowDto<T> tableRow : proccesedReorderedSelection) {
// Integer rowNum = tableRow.getTableLine()-1;
// Long page = (rowNum/pagination.getRows())+1;
//
// tableRow.setPage(page.intValue());
// Long rowLine = tableRow.getTableLine()%pagination.getRows();
// tableRow.setTableLine(rowLine.intValue());
// }
// return proccesedReorderedSelection;
// }
// return reorderedSelection;
// }
}