Skip to content

Instantly share code, notes, and snippets.

@ctmay4
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ctmay4/1a328c800b459101d1c4 to your computer and use it in GitHub Desktop.
Save ctmay4/1a328c800b459101d1c4 to your computer and use it in GitHub Desktop.
Java object diff testing with List<String> changes
import java.util.ArrayList;
import java.util.List;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.MappingStyle;
import org.javers.core.changelog.SimpleTextChangeLog;
import org.javers.core.diff.Change;
import org.javers.core.metamodel.clazz.EntityDefinition;
import org.javers.core.metamodel.object.InstanceIdDTO;
import org.junit.Test;
import de.danielbechler.diff.ObjectDifferBuilder;
import de.danielbechler.diff.node.DiffNode;
import de.danielbechler.diff.node.DiffNode.Visitor;
import de.danielbechler.diff.node.Visit;
public class DiffTesting {
private class TestObject {
private Integer _id;
private String _name;
private List<String> _table;
TestObject(Integer id) {
_id = id;
}
public Integer getId() {
return _id;
}
public void setId(Integer id) {
_id = id;
}
public String getName() {
return _name;
}
public void setName(String name) {
_name = name;
}
public List<String> getTable() {
return _table;
}
public void setTable(List<String> table) {
_table = table;
}
}
/**
* Return a test object filled with table rows
* @return
*/
private TestObject getTestData() {
TestObject obj = new TestObject(1);
obj.setName("List example");
// fill table with 100 rows of test data
List<String> rows = new ArrayList<>();
for (int i = 0; i < 100; i++)
rows.add("A" + i);
obj.setTable(rows);
return obj;
}
@Test
public void testJavers() {
Javers javers = JaversBuilder.javers()
.withMappingStyle(MappingStyle.FIELD)
.registerEntity(new EntityDefinition(TestObject.class, "_id"))
.build();
TestObject base = getTestData();
javers.commit("me@here.com", base);
// delete the 5th row
base.getTable().remove(5);
// insert 2 rows at position 90
base.getTable().add(90, "INSERT_A1");
base.getTable().add(91, "INSERT_A2");
javers.commit("me@here.com", base);
// list out changes
List<Change> changes = javers.getChangeHistory(InstanceIdDTO.instanceId(1, TestObject.class), 5);
SimpleTextChangeLog log = new SimpleTextChangeLog();
javers.processChangeList(changes, log);
System.out.println(log.result());
}
@Test
public void testJavaObjectDiff() {
final TestObject base = getTestData();
// delete delete the 5th row and insert 2 rows at position 90
final TestObject working = getTestData();
working.getTable().remove(5);
working.getTable().add(90, "INSERT_A1");
working.getTable().add(91, "INSERT_A2");
DiffNode diff = ObjectDifferBuilder.buildDefault().compare(working, base);
diff.visit(new Visitor() {
@Override
public void node(DiffNode node, Visit visit) {
Object baseValue = node.canonicalGet(base);
Object workingValue = node.canonicalGet(working);
String message = node.getPath() + " changed from " + baseValue + " to " + workingValue;
System.out.println(message);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment