TSK-354: added abstract report structure

This commit is contained in:
Mustapha Zorgati 2018-03-13 17:38:09 +01:00
parent 4765fc242a
commit 41719b0d76
4 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,9 @@
package pro.taskana.impl.report;
public interface QueryItem {
String getKey();
int getValue();
}

View File

@ -0,0 +1,48 @@
package pro.taskana.impl.report;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public abstract class Report<Item extends QueryItem, Column extends ReportColumnHeader<? super Item>> {
protected List<Column> columns = new ArrayList<>(); //this can be done as an array
private Map<String, ReportRow<Item>> reportLines = new LinkedHashMap<>();
private ReportRow<Item> sumLine;
public Report(List<Column> columns) {
sumLine = new ReportRow<>(columns.size());
this.columns.addAll(columns);
}
protected final void addItem(Item item) {
ReportRow<Item> row = reportLines.computeIfAbsent(item.getKey(), (s) -> createReportRow(columns.size()));
for (int i = 0; i < columns.size(); i++) {
if (columns.get(i).fits(item)) {
row.addItem(item, i);
sumLine.addItem(item, i);
}
}
}
public ReportRow<Item> getRow(String key) {
return reportLines.get(key);
}
public void addItems(List<Item> items) {
items.forEach(this::addItem);
}
public final ReportRow<Item> getSumLine() {
return sumLine;
}
public Map<String, ReportRow<Item>> getReportLines() {
return reportLines;
}
protected ReportRow<Item> createReportRow(int columnSize) {
return new ReportRow<>(columnSize);
}
}

View File

@ -0,0 +1,9 @@
package pro.taskana.impl.report;
public interface ReportColumnHeader<Item extends QueryItem> {
String displayName();
boolean fits(Item item);
}

View File

@ -0,0 +1,25 @@
package pro.taskana.impl.report;
public class ReportRow<Item extends QueryItem> {
private final int[] lineItems;
private int totalValue = 0;
public ReportRow(int columnCount) {
//TODO: do you use an assert / throw an exception?
lineItems = new int[columnCount];
}
public int[] getLineItems() {
return lineItems;
}
public int getTotalValue() {
return totalValue;
}
public void addItem(Item item, int index) throws IndexOutOfBoundsException {
totalValue += item.getValue();
lineItems[index] += item.getValue();
}
}