package dbfit.util;
import static dbfit.util.MatchStatus.*;
public class DiffResultsSummarizer implements DiffListener {
private Class childType;
private MatchResult result;
public DiffResultsSummarizer(final MatchResult initialResult, final Class childType) {
this.childType = childType;
this.result = initialResult;
initStatus();
}
protected void initStatus() {
if (result.getObject2() == null) {
result.setStatus(MISSING);
} else if (result.getObject1() == null) {
result.setStatus(SURPLUS);
} else {
result.setStatus(SUCCESS);
}
}
protected void onChildEvent(final MatchResult childResult) {
switch (getStatus()) {
case EXCEPTION:
case MISSING:
case SURPLUS:
return; // Cannot overwrite exceptions or missing
}
switch (childResult.getStatus()) {
case EXCEPTION:
result.setException(childResult.getException());
break;
case WRONG:
case SURPLUS:
case MISSING:
result.setStatus(WRONG);
break;
}
}
@Override
public void onEvent(final MatchResult childResult) {
if (childType.equals(childResult.getType())) {
onChildEvent(childResult);
}
}
public MatchResult getResult() {
return result;
}
public MatchStatus getStatus() {
return result.getStatus();
}
}