package net.unit8.axebomber.parser;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Workbook;
public class StyleManager {
public static final int BORDER_TOP = 1;
public static final int BORDER_BOTTOM = 3;
public static final int BORDER_LEFT = 9;
public static final int BORDER_RIGHT = 27;
private static volatile Map<Workbook, StyleManager> cache = new HashMap<Workbook, StyleManager>();
private Workbook workbook;
private volatile Map<Style, List<CellStyle>> styles = new HashMap<Style, List<CellStyle>>();
protected StyleManager(Workbook workbook) {
this.workbook = workbook;
}
public static StyleManager getInstance(Workbook book) {
if (!cache.containsKey(book)) {
synchronized(StyleManager.class) {
if (!cache.containsKey(book)) {
cache.put(book, new StyleManager(book));
}
}
}
return cache.get(book);
}
public CellStyle getStyle(Style style, int borderBits) {
if (!styles.containsKey(style)) {
List<CellStyle> cellStyles = new ArrayList<CellStyle>();
for (int i=0; i < 3*3*3*3; i++) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillForegroundColor(style.getBackgroundColor().getIndex());
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
if ((i % 3) != 0) {
cellStyle.setBorderTop(i % 3==1 ? style.getBorderStyle() : style.getInnerBorderStyle());
}
if ((i / 3) % 3 != 0) {
cellStyle.setBorderBottom((i / 3) % 3 ==1 ? style.getBorderStyle() : style.getInnerBorderStyle());
}
if ((i / 9) % 3 != 0) {
cellStyle.setBorderLeft((i / 9) % 3 ==1 ? style.getBorderStyle() : style.getInnerBorderStyle());
}
if ((i / 27) % 3 != 0) {
cellStyle.setBorderRight((i / 27) % 3 ==1 ? style.getBorderStyle() : style.getInnerBorderStyle());
}
cellStyles.add(cellStyle);
}
styles.put(style, cellStyles);
}
return styles.get(style).get(borderBits);
}
}