package ro.nextreports.server.web.analysis;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.IModel;
import ro.nextreports.engine.exporter.util.StyleFormatConstants;
import ro.nextreports.engine.util.HtmlUtil;
import ro.nextreports.server.domain.Analysis;
import ro.nextreports.server.web.common.table.BaseTable;
public class AnalysisTablePanel extends GenericPanel<Analysis> {
private AnalysisDataProvider dataProvider;
public AnalysisTablePanel(String id, AnalysisDataProvider dataProvider) {
super(id);
this.dataProvider = dataProvider;
add(createTable(dataProvider));
}
private BaseTable createTable(AnalysisDataProvider dataProvider ) {
BaseTable<AnalysisRow> table = new BaseTable<AnalysisRow>("table", getPropertyColumns(dataProvider.getHeader()), dataProvider, dataProvider.getRowsPerPage());
table.setOutputMarkupId(true);
return table;
}
private List<IColumn<AnalysisRow, String>> getPropertyColumns(List<String> header) {
List<IColumn<AnalysisRow, String>> columns = new ArrayList<IColumn<AnalysisRow, String>>();
int columnCount = header.size();
for (int i = 0; i < columnCount; i++) {
final int j = i;
columns.add(new PropertyColumn<AnalysisRow, String>(new Model<String>(header.get(i)), header.get(i), "cellValues." + i) {
public void populateItem(Item cellItem, String componentId, IModel rowModel) {
setCellStyle(cellItem, rowModel, j);
super.populateItem(cellItem, componentId, rowModel);
}
});
}
// critical case when someone deleted the database folder
if (columns.size() == 0) {
columns.add(new PropertyColumn<AnalysisRow, String>(new Model<String>(""), ""));
}
return columns;
}
private void setCellStyle(Item cellItem, IModel rowModel, int rowIndex) {
List<Map<String, Object>> styles = ((AnalysisRow)rowModel.getObject()).getStyles();
if (styles.size() > rowIndex) {
Map<String, Object> style = styles.get(rowIndex);
Color val = (Color) style.get(StyleFormatConstants.FONT_COLOR);
if (val != null) {
String text = HtmlUtil.getCssCode(null, style, false);
cellItem.add(new AttributeAppender("style", Model.of(text)));
}
}
}
}