![JAR search and dependency download from the Maven repository](/logo.png)
com.github.alexmojaki.caseclasses.DiffBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of case-classes Show documentation
Show all versions of case-classes Show documentation
A framework to refactor computing a result from an aggregate object.
The newest version!
package com.github.alexmojaki.caseclasses;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
class DiffBuilder extends DualResultBuilder {
private boolean namesMatch = true;
private List matchingValues = new ArrayList();
private List differingValues = new ArrayList();
static void assertEquals(CaseClass expected, CaseClass actual) {
if (Objects.equals(expected, actual)) {
return;
}
String message = "Expected != actual. " + getDifferenceReport(expected, actual);
throw new AssertionError(message);
}
static String getDifferenceReport(CaseClass expected, CaseClass actual) {
if (expected == null) {
return "Expected value is null but actual value is: " + actual;
} else if (actual == null) {
return "Actual value is null but expected value is: " + expected;
}
if (!EqualsBuilder.classesMatch(expected, actual)) {
return "The expected class is " + expected.getClass().getName() + " but the actual class is " + actual.getClass().getName();
}
DiffBuilder builder = new DiffBuilder();
builder.buildResult(expected, actual);
if (builder.namesMatch) {
if (builder.differingValues.isEmpty()) {
return "The value components of the objects are equal.\n" +
"Expected: " + expected + "\n" +
"Actual: " + actual;
}
return builder.getTables();
} else {
return "The names of the values do not match.\n" +
"Expected: " + CaseClasses.toString(expected) + "\n" +
"Actual: " + CaseClasses.toString(actual);
}
}
private String getTables() {
String tables = "Differences:\n\n" + CaseClasses.getPrettyTable(differingValues);
if (!matchingValues.isEmpty()) {
tables += "\n" +
"Matching values:\n\n" + CaseClasses.getPrettyTable(matchingValues);
}
return tables;
}
@Override
protected void extraFirstValue(String name, Object value) {
namesMatch = false;
}
@Override
protected void extraSecondValue(String name, Object value) {
namesMatch = false;
}
@Override
protected void add(String name1, Object value1, String name2, Object value2) {
if (!name1.equals(name2)) {
namesMatch = false;
}
if (!namesMatch) {
return;
}
SimpleCaseClass row = new SimpleCaseClass("Name", name1);
if (Objects.equals(value1, value2)) {
matchingValues.add(row.add("Value", value1));
} else {
differingValues.add(row.add("First value", value1, "Second value", value2));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy