DatatablePageImpl.java
package sk.iway.iwcm.system.datatable;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import sk.iway.iwcm.Tools;
public class DatatablePageImpl<T> extends PageImpl<T> {
private static final long serialVersionUID = 1L;
private Map<String, List<OptionDto>> options = null; //NOSONAR
private List<NotifyBean> notify;
public DatatablePageImpl(List<T> content) {
super(content);
}
public DatatablePageImpl(Page<T> page) {
super(page.getContent(), page.getPageable(), page.getTotalElements());
if (page instanceof DatatablePageImpl) {
//ak uz je to PageImpl tak prenes options, mozno uz su nejake nastavene
DatatablePageImpl<T> pageImpl = (DatatablePageImpl<T>)page;
this.options = pageImpl.options;
}
}
private List<OptionDto> getFieldOptions(String field) {
if (options == null) {
options = new Hashtable<>();
}
List<OptionDto> fieldOptions = options.get(field);
if (fieldOptions == null) {
fieldOptions = new ArrayList<>();
options.put(field, fieldOptions);
}
return fieldOptions;
}
/**
* Add to output OptionDto value
* @param field - name od DT field
* @param label - value (text) that will be shown
* @param value - value that will be used on BE
*/
public void addDefaultOption(String field, String label, String value) {
addOption(field, label, value, null);
}
/**
* Prida do vystupu OptionDto
* @param field - meno DT fieldu
* @param label
* @param value
*/
public void addOption(String field, String label, String value, Object original) {
List<OptionDto> fieldOptions = getFieldOptions(field);
fieldOptions.add(new OptionDto(label, value, original));
}
/**
* Prida do vystupu OptionDto skonvertovane so zadaneho listu objektov
* @param field - meno DT fieldu
* @param options - list objektov ktore pridavame
* @param labelProperty - nazov label property v options liste
* @param valueProperty - nazov value property v options liste
*/
@SuppressWarnings("rawtypes")
public void addOptions(String field, List options, String labelProperty, String valueProperty, boolean includeOriginalObject) {
List<OptionDto> fieldOptions = getFieldOptions(field);
for (Object o : options) {
BeanWrapperImpl bw = new BeanWrapperImpl(o);
String label;
String value;
if(Tools.isEmpty(labelProperty) && Tools.isEmpty(valueProperty)) {
label = (String)o;
value = (String)o;
} else {
label = String.valueOf(bw.getPropertyValue(labelProperty));
value = String.valueOf(bw.getPropertyValue(valueProperty));
}
Object original;
if (includeOriginalObject) original = o;
else original = null;
fieldOptions.add(new OptionDto(label, value, original));
}
}
public void addOptions(String field, List<String> options) {
for(String option : options)
addOption(field, option, option, null);
}
/**
* Add options from map type id:label, id will be converted to string and used as value for option
* @param field
* @param options
*/
public void addOptions(String field, Map<? extends Number, String> options) {
for(Map.Entry<? extends Number,String> entry : options.entrySet())
addOption(field, entry.getValue(), String.valueOf(entry.getKey()), null);
}
public Map<String, List<OptionDto>> getOptions() {
return options;
}
public List<NotifyBean> getNotify() {
return notify;
}
public void setNotify(List<NotifyBean> notify) {
this.notify = notify;
}
}