in extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/CellFactory.java [35:119]
record CellFactory(Row row, Cell template) {
public Cell createCell(final int i, final float width, final List<Object> rowData) {
Object cellValue = null;
if (rowData.size() >= i) {
cellValue = rowData.get(i);
if (cellValue instanceof CharSequence seq) {
cellValue = seq.toString()
.replaceAll("\r", "")
.replaceAll("\n", "<br>");
}
}
if(cellValue==null) cellValue = "";
var cell = switch(cellValue.getClass().getSimpleName()) {
case "BufferedImage" -> row.createImageCell(width, (BufferedImage)cellValue);
default -> row.createCell(width, toString(cellValue));
};
cell.copyCellStyle(template);
return cell;
}
/**
* @param cellValue not {@code null} nor {@link BufferedImage}
*/
private String toString(final Object valueAsObj) {
// String
if(valueAsObj instanceof String value) {
return value;
}
// boolean
if(valueAsObj instanceof Boolean value) {
return value ? "+" : "-";
}
// date
if(valueAsObj instanceof Date value) {
var dateTime = LocalDateTime.ofInstant(value.toInstant(), ZoneId.systemDefault());
return DateTimeFormatter.ISO_DATE_TIME.format(dateTime);
}
if(valueAsObj instanceof LocalDate value) {
return DateTimeFormatter.ISO_DATE.format(value);
}
if(valueAsObj instanceof LocalDateTime value) {
return DateTimeFormatter.ISO_DATE_TIME.format(value);
}
if(valueAsObj instanceof OffsetDateTime value) {
return DateTimeFormatter.ISO_DATE_TIME.format(value);
}
// number
if(valueAsObj instanceof Double value) {
value.toString();
}
if(valueAsObj instanceof Float value) {
value.toString();
}
if(valueAsObj instanceof BigDecimal value) {
value.toString();
}
if(valueAsObj instanceof BigInteger value) {
value.toString();
}
if(valueAsObj instanceof Long value) {
value.toString();
}
if(valueAsObj instanceof Integer value) {
value.toString();
}
if(valueAsObj instanceof Short value) {
value.toString();
}
if(valueAsObj instanceof Byte value) {
value.toString();
}
// if all else fails fallback to value's toString method
return valueAsObj.toString();
}
}