package dbfit.fixture;
import dbfit.api.DBEnvironment;
import dbfit.fixture.report.FitFixtureReportingSystem;
import dbfit.util.DataRow;
import dbfit.util.DataCell;
import dbfit.util.MatchResult;
import static dbfit.util.MatchStatus.*;
import fit.Parse;
import java.util.List;
import java.util.ArrayList;
public class CompareStoredQueriesHideMatchingRows extends CompareStoredQueries {
public CompareStoredQueriesHideMatchingRows() {
super();
}
public CompareStoredQueriesHideMatchingRows(DBEnvironment environment, String symbol1, String symbol2) {
super(environment, symbol1, symbol2);
}
@Override
public void doTable(Parse table) {
super.doTable(table);
addSummary(table);
}
private void addSummary(Parse table) {
Parse summary = getSummary();
summary.parts.addToTag(" colspan=\"" + numColumns(table) + "\"");
Parse lastRow = table.parts.last().more = summary;
}
public Parse getSummary() {
Parse summary = new Parse("tr", null, null, null);
summary.addToTag(" class=\"pass\"");
Parse firstCell = new Parse("td", this.counts(), null, null);
summary.parts = firstCell;
return summary;
}
private int numColumns(Parse table) {
int cnt = 0;
for (Parse row = table.parts; row != null; row = row.more) {
cnt = Math.max(cnt, row.size());
}
return cnt;
}
@Override
protected FitFixtureReporter getReporter(final Parse table) {
return new FitFixtureReporter(new FitFixtureReportingSystem(this, table)) {
List<MatchResult<DataCell, DataCell>> lastRow = new ArrayList<>();
@Override
public void endRow(MatchResult<DataRow, DataRow> result) {
for (MatchResult cellRes: lastRow) {
if (result.getStatus() != SUCCESS) {
reportingSystem.addCell(cellRes);
} else {
reportingSystem.incRight();
}
}
if (result.getStatus() != SUCCESS) {
reportingSystem.endRow(result);
}
lastRow.clear();
}
@Override
public void endCell(MatchResult<DataCell, DataCell> result) {
lastRow.add(result);
}
};
}
}