package org.openlca.io.xls.results; import java.awt.Color; import java.util.HashMap; import java.util.Map; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; import org.openlca.io.xls.Excel; class CellStyles { private static final int BOLD = 1; private static final int DATE = 2; private final Map<String, CellStyle> styles = new HashMap<>(); private final Workbook workbook; CellStyles(Workbook workbook) { this.workbook = workbook; } CellStyle date() { return get(DATE); } CellStyle bold() { return get(BOLD); } CellStyle bold(Color color) { return get(BOLD, color); } CellStyle normal(Color color) { return get(-1, color); } private CellStyle get(int weight) { return get(weight, null); } private CellStyle get(int type, Color color) { String key = toKey(type, color); if (styles.containsKey(key)) return styles.get(key); XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle(); applyType(style, type); applyColor(style, color); styles.put(key, style); return style; } private void applyType(CellStyle style, int type) { if (type == BOLD) { Font font = workbook.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); } else if (type == DATE) { style.setDataFormat(Excel.dateFormat(workbook)); } } private void applyColor(XSSFCellStyle style, Color color) { if (color == null) return; style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(new XSSFColor(color)); } private String toKey(int type, Color color) { if (color == null) return Integer.toString(type); return type + "_" + color.getRGB(); } }