package ro.nextreports.engine.exporter;
import java.awt.Color;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import ro.nextreports.engine.ReportLayout;
import ro.nextreports.engine.band.Band;
import ro.nextreports.engine.band.BandElement;
import ro.nextreports.engine.band.ColumnBandElement;
import ro.nextreports.engine.exporter.util.DisplayData;
import ro.nextreports.engine.exporter.util.StyleFormatConstants;
import ro.nextreports.engine.queryexec.QueryException;
import ro.nextreports.engine.util.ColorUtil;
import ro.nextreports.engine.util.StringUtil;
public class DisplayExporter extends ResultExporter {
private DisplayData data;
public DisplayExporter(ExporterBean bean) {
super(bean);
data = new DisplayData();
}
protected void exportCell(String bandName, BandElement bandElement, Object value, int gridRow, int row, int column, int cols,
int rowSpan, int colSpan, boolean isImage) {
int headerRows = getHeaderRows();
int detailRows = getDetailRows();
Map<String, Object> style = buildCellStyleMap(bandElement, value, gridRow, column, colSpan);
if (ReportLayout.HEADER_BAND_NAME.equals(bandName)) {
if (headerRows == 1) {
if (row == 0) {
switch (column) {
case 0:
data.setTitle(replaceParameters(getBandElementValueAsString(bandElement)));
if (bandElement.getHorizontalAlign() == BandElement.CENTER) {
data.setTitleAlignment(DisplayData.TITLE_ALIGNMENT_CENTER);
} else {
data.setTitleAlignment(DisplayData.TITLE_ALIGNMENT_VALUE);
}
data.setBackground(ColorUtil.getHexColor(bandElement.getBackground()));
if (style.containsKey(StyleFormatConstants.BACKGROUND_COLOR)) {
data.setBackground(ColorUtil.getHexColor((Color) style.get(StyleFormatConstants.BACKGROUND_COLOR)));
}
data.setTitleColor(ColorUtil.getHexColor(bandElement.getForeground()));
if (style.containsKey(StyleFormatConstants.FONT_COLOR)) {
data.setTitleColor(ColorUtil.getHexColor((Color) style.get(StyleFormatConstants.FONT_COLOR)));
}
break;
case 1:
data.setShouldRise(Boolean.parseBoolean(bandElement.getText()));
break;
case 2:
data.setShadow(Boolean.parseBoolean(bandElement.getText()));
break;
}
}
}
} else if (ReportLayout.DETAIL_BAND_NAME.equals(bandName)) {
if (detailRows == 1) {
if (column == 0) {
data.setValueColor(ColorUtil.getHexColor(bandElement.getForeground()));
if (style.containsKey(StyleFormatConstants.FONT_COLOR)) {
data.setValueColor(ColorUtil.getHexColor((Color) style.get(StyleFormatConstants.FONT_COLOR)));
}
data.setValue(StringUtil.getValueAsString(value, ((ColumnBandElement)bandElement).getPattern()));
for (Alert alert : alerts) {
if (isAlert(alert, value)) {
executeAlert(alert, value, "");
}
}
} else if (column == 1) {
data.setPreviousColor(ColorUtil.getHexColor(bandElement.getForeground()));
if (style.containsKey(StyleFormatConstants.FONT_COLOR)) {
data.setPreviousColor(ColorUtil.getHexColor((Color) style.get(StyleFormatConstants.FONT_COLOR)));
}
data.setPrevious(StringUtil.getValueAsString(value, ((ColumnBandElement)bandElement).getPattern()));
} else if (column == 2) {
data.setUp((Boolean)value);
} else if (column == 3) {
String prev = getBandElementValueAsString(bandElement);
if ((prev != null) && !prev.endsWith("%")) {
prev = prev + "%";
}
data.setPrevious(prev);
}
}
return;
}
}
// replace $P{...} parameters (used in title and x,y legends
private String replaceParameters(String text) {
Map<String, Object> params = bean.getParametersBean().getParamValues();
for (String param : params.keySet()) {
text = StringUtil.replace(text, "\\$P\\{" + param + "\\}", StringUtil.getValueAsString(params.get(param), null));
}
return text;
}
protected void flush() {
}
protected void flushNow() {
}
protected void initExport() throws QueryException {
}
protected void finishExport() {
}
protected Set<CellElement> getIgnoredCells(Band band) {
return new HashSet<CellElement>();
}
protected void afterRowExport() {
}
protected void close() {
}
protected String getNullElement() {
return "";
}
public DisplayData getData() {
return data;
}
}