@Override @SuppressWarnings("unchecked") public void onValueChange(ValueChange valueChange) { GlobalId id = valueChange.getAffectedGlobalId(); Map<String, Object> prevO = getPrevious(); Map<String, Object> nextO = getNew(); if (id instanceof ValueObjectId) { ValueObjectId idV = (ValueObjectId) id; String[] path = idV.getFragment().split("/"); for (String p : path) { prevO.putIfAbsent(p, new HashMap<String, Object>()); prevO = (Map<String, Object>) prevO.get(p); nextO.putIfAbsent(p, new HashMap<String, Object>()); nextO = (Map<String, Object>) nextO.get(p); } } prevO.put(valueChange.getPropertyName(), valueChange.getLeft()); nextO.put(valueChange.getPropertyName(), valueChange.getRight()); }
@Test public void shouldSupportInterfaceProperty() { // given TestClassWithInterfaceProperty foo = new TestClassWithInterfaceProperty("1", new TestInterfaceImpl("Foo")); TestClassWithInterfaceProperty bar = new TestClassWithInterfaceProperty("1", new TestInterfaceImpl("Bar")); Javers javers = JaversBuilder.javers().build(); // when Diff diff = javers.compare(foo, bar); System.out.println(diff); // then assertTrue(diff.getChanges().size() == 1); ValueChange change = diff.getChangesByType(ValueChange.class).get(0); ValueObjectIdDTO voId = ValueObjectIdDTO.valueObjectId("1", TestClassWithInterfaceProperty.class, "interfaceProperty"); Assertions.assertThat(change.getAffectedGlobalId().value()).isEqualTo(voId.value()); Assertions.assertThat(change.getPropertyName()).isEqualTo("value"); Assertions.assertThat(change.getLeft()).isEqualTo("Foo"); Assertions.assertThat(change.getRight()).isEqualTo("Bar"); }
@Test public void shouldCompareTwoObjects() { //given Javers javers = JaversBuilder.javers().build(); Address address1 = new Address("New York","5th Avenue"); Address address2 = new Address("New York","6th Avenue"); //when Diff diff = javers.compare(address1, address2); //then //there should be one change of type {@link ValueChange} ValueChange change = diff.getChangesByType(ValueChange.class).get(0); assertThat(diff.getChanges()).hasSize(1); assertThat(change.getAffectedGlobalId().value()) .isEqualTo("org.javers.core.examples.model.Address/"); assertThat(change.getPropertyName()).isEqualTo("street"); assertThat(change.getLeft()).isEqualTo("5th Avenue"); assertThat(change.getRight()).isEqualTo("6th Avenue"); System.out.println(diff); } }