package fr.openwide.core.wicket.more.export.excel; import java.util.Locale; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.wicket.Application; import org.apache.wicket.Component; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.util.lang.Classes; import com.google.common.base.Joiner; import fr.openwide.core.export.excel.AbstractExcelTableExport; import fr.openwide.core.spring.util.StringUtils; import fr.openwide.core.wicket.markup.html.model.CountMessageModel; /** * Apporte quelques configurations de style ainsi que le support de l'extraction de traduction via wicket. */ public abstract class AbstractSimpleExcelTableExport extends AbstractExcelTableExport { protected static final Joiner DEFAULT_JOINER = Joiner.on("\n").skipNulls(); private final Component component; public AbstractSimpleExcelTableExport(Component component) { this(new XSSFWorkbook(), component); } public AbstractSimpleExcelTableExport(Workbook workbook, Component component) { super(workbook); this.component = component; init(); } @Override protected Sheet createSheet(String title) { Sheet sheet = super.createSheet(title); sheet.setDefaultRowHeight((short) 450); return sheet; } /** * @deprecated Use {@link #localize(String)} instead. */ @Override @Deprecated protected String getLocalizedLabel(String key) { return localize(key); } protected Locale getLocale() { return component.getLocale(); } protected String localize(String key) { return component.getString(key); } protected String localize(String key, IModel<?> model) { return component.getString(key, model); } protected String localize(String resourceKey, IModel<?> model, Object ... positionalParameters) { return new StringResourceModel(resourceKey, component, model).setParameters(positionalParameters).getObject(); } protected String localize(Enum<?> enumValue) { return localize(enumValue, null, null); } protected <E> String localize(Enum<?> enumValue, String prefix, String suffix) { if (enumValue == null) { return null; } StringBuilder key = new StringBuilder(); if (StringUtils.hasText(prefix)) { key.append(prefix).append("."); } key.append(Classes.simpleName(enumValue.getDeclaringClass())) .append(".").append(enumValue.name()); if (StringUtils.hasText(suffix)) { key.append(".").append(suffix); } return localize(key.toString()); } protected <E> String localize(Class<E> clazz, E value) { return Application.get().getConverterLocator().getConverter(clazz).convertToString(value, getLocale()); } protected <N extends Number> String localizeCount(String resourceKey, N value) { return new CountMessageModel(resourceKey, Model.of(value)).getObject(); } @Override protected void initColors() { setHeaderBackgroundColor("#009FE0"); setHeaderFontColor("#FFFFFF"); super.initColors(); } @Override protected void initFonts() { setFontName("Calibri"); super.initFonts(); } @Override protected void initStyles() { super.initStyles(); CellStyle header = getStyle(STYLE_HEADER_NAME); header.setWrapText(true); CellStyle standardOdd = getStyle(STYLE_STANDARD_NAME + ROW_ODD_NAME); standardOdd.setWrapText(true); CellStyle standardEven = getStyle(STYLE_STANDARD_NAME + ROW_EVEN_NAME); standardEven.setWrapText(true); } @Override protected void finalizeSheet(Sheet sheet, boolean landscapePrintSetup) { super.finalizeSheet(sheet, landscapePrintSetup); sheet.setAutobreaks(true); sheet.getPrintSetup().setFitWidth((short) 1); sheet.getPrintSetup().setFitHeight((short) 10000); } @Override protected void addIterableTextCell(Row row, int columnIndex, Iterable<String> iterable) { addTextCell(row, columnIndex, DEFAULT_JOINER.join(iterable)); } }