package com.brightgenerous.pdfbox.writer.creater; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.brightgenerous.pdfbox.writer.IDataConverter; public class DefaultDataConverter<T> implements IDataConverter<T>, Serializable { private static final long serialVersionUID = 4455144877790443011L; private final DateFormat dateFormat; private final NumberFormat numberFormat; public DefaultDataConverter() { this((NumberFormat) null, (DateFormat) null); } public DefaultDataConverter(NumberFormat numberFormat) { this(numberFormat, null); } public DefaultDataConverter(DateFormat dateFormat) { this(null, dateFormat); } public DefaultDataConverter(NumberFormat numberFormat, DateFormat dateFormat) { this.numberFormat = numberFormat; this.dateFormat = dateFormat; } public DefaultDataConverter(String numberFormat, String dateFormat) { this((numberFormat == null) ? null : new DecimalFormat(numberFormat), (dateFormat == null) ? null : new SimpleDateFormat(dateFormat)); } @Override public Map<String, String> convert(T data) { Map<String, String> ret = new HashMap<>(); if (data == null) { return ret; } if (data instanceof Map) { for (java.util.Map.Entry<?, ?> e : ((Map<?, ?>) data).entrySet()) { String key; { Object k = e.getKey(); if (k instanceof String) { key = (String) k; } else { key = String.valueOf(k); } } Object obj = e.getValue(); String str; if (obj == null) { str = null; } else if (obj instanceof String) { str = (String) obj; } else if ((numberFormat != null) && (obj instanceof Number)) { str = numberFormat.format(obj); } else if ((dateFormat != null) && (obj instanceof Date)) { str = dateFormat.format((Date) obj); } else { str = String.valueOf(obj); } ret.put(key, str); } } else { Class<?> clazz = data.getClass(); for (Field field : clazz.getDeclaredFields()) { Object obj; try { if (!Modifier.isPublic(field.getModifiers()) && !field.isAccessible()) { field.setAccessible(true); } obj = field.get(data); } catch (IllegalArgumentException | IllegalAccessException | SecurityException e) { throw new RuntimeException(e); } String str; if (obj == null) { str = null; } else if (obj instanceof String) { str = (String) obj; } else if ((numberFormat != null) && (obj instanceof Number)) { str = numberFormat.format(obj); } else if ((dateFormat != null) && (obj instanceof Date)) { str = dateFormat.format((Date) obj); } else { str = String.valueOf(obj); } ret.put(field.getName(), str); } } return ret; } }