package com.bstek.bdf2.export.excel; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import com.bstek.bdf2.export.AbstractReportModelGenerater; import com.bstek.bdf2.export.model.ReportGridData; import com.bstek.bdf2.export.model.ReportGridHeader; import com.bstek.bdf2.export.model.ReportGrid; /** * * @author matt.yao@bstek.com * @since 2.0 * */ @Component(ExcelReportModelGenerater.BEAN_ID) public class ExcelReportModelGenerater extends AbstractReportModelGenerater { public static final String BEAN_ID="bdf2.ExcelReportModelGenerater"; @SuppressWarnings("unchecked") public ReportGrid generateReportGridModel(Map map, String intercepterBean) throws Exception { ReportGrid gridModel = new ReportGrid(); List> columnInfos = (List>) map.get("columnInfos"); List gridHeaders = new ArrayList(); this.createGridColumnHeader(columnInfos, gridHeaders, null); gridModel.setGridHeaderModelList(gridHeaders); gridModel.setGridDataModel(this.createGridColumnData(map, columnInfos, intercepterBean)); return gridModel; } @SuppressWarnings("unchecked") private void createGridColumnHeader(List> columnInfos, List headerList, ReportGridHeader parent) { if (columnInfos == null) return; for (Map column : columnInfos) { String columnName = (String) column.get("columnName"); int level = (Integer) column.get("level"); String label = (String) column.get("label"); int width = (Integer) column.get("width"); String bgColor = (String) column.get("bgColor"); String fontColor = (String) column.get("fontColor"); int fontSize = 10; if (column.get("fontSize") != null) { fontSize = (Integer) column.get("fontSize"); } int align = 1; if (column.get("align") != null) { align = (Integer) column.get("align"); } int dataAlign = 1; if (column.get("dataAlign") != null) { dataAlign = (Integer) column.get("dataAlign"); } String dataTypeName = "String"; if (column.containsKey("dataType")){ dataTypeName = StringUtils.defaultIfBlank((String)column.get("dataType"), "String"); } String displayFormat = ""; if (column.containsKey("displayFormat")){ displayFormat = StringUtils.defaultIfBlank((String)column.get("displayFormat"), ""); } ReportGridHeader header = new ReportGridHeader(); header.setLevel(level); header.setAlign(align); header.setDataAlign(dataAlign); if (StringUtils.isNotEmpty(bgColor)) { header.setBgColor(this.createRGB(bgColor)); } if (StringUtils.isNotEmpty(fontColor)) { header.setFontColor(this.createRGB(fontColor)); } header.setColumnName(columnName); header.setLabel(label); header.setFontSize(fontSize); header.setWidth(width); header.setDataTypeName(dataTypeName); header.setDisplayFormat(displayFormat); if (parent != null) { parent.addGridHeader(header); header.setParent(parent); } else { headerList.add(header); } List> children = (List>) column.get("children"); if (children != null) { this.createGridColumnHeader(children, headerList, header); } } } @SuppressWarnings("unchecked") private ReportGridData createGridColumnData(Map map, List> columnInfos, String intercepterBean) throws Exception { Map style = (Map) map.get("gridDataStyle"); String treeColumn = (String) map.get("treeColumn"); List> dataList = getGridModelData(map, columnInfos, intercepterBean); ReportGridData gridData = new ReportGridData(); gridData.setDatas(dataList); gridData.setTreeColumn(treeColumn); if (style != null) { gridData.setContentFontSize((Integer) style.get("fontSize")); String contentFontColor = (String) style.get("fontColor"); String contentBgColor = (String) style.get("bgColor"); gridData.setContentFontColor(this.createRGB(contentFontColor)); gridData.setContentFontAlign((Integer) style.get("fontAlign")); gridData.setContentBgColor(this.createRGB(contentBgColor)); } return gridData; } }