Search code examples
javers

JaVers Diff Tool. Does PrettyPrint working?


Build jb

JaversBuilder jb = JaversBuilder.javers().withMappingStyle(MappingStyle.BEAN).withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE).withPrettyPrint(true)

and then

log.info(diff.prettyPrint())

gives

1. ListChange{globalId:'fn.dsl.diff.javers.Instance/Folder:{0F1E2D3C-4B5A-6978-8796-A5B4C3D2E1F0}', property:'permissions', containerChanges:[(3).removed:'fn.dsl.diff.javers.Permission {type: 'ALLOW', mask: '135159', GN: '[email protected]', GT: 'GROUP', source: 'DIRECT', depth: 'THIS_OBJECT_ONLY' }', (2).'fn.dsl.diff.javers.Permission {type: 'ALLOW', mask: '999415', GN: '[email protected]', GT: 'GROUP', source: 'DIRECT', depth: 'THIS_OBJECT_ONLY' }' to 'fn.dsl.diff.javers.Permission {type: 'ALLOW', mask: '135159', GN: '[email protected]', GT: 'GROUP', source: 'DIRECT', depth: 'THIS_OBJECT_ONLY' }']}

, but expected pretty formatting. Like in docs - http://javers.org/documentation/diff-examples/#compare-valueobjects

System.out.println(diff);

//.. shouldDetectBossChange()

Diff:
1. ReferenceChange{
   globalId:'org.javers.core.examples.model.Employee/Great Developer',
   property:'boss',
   oldRef:'org.javers.core.examples.model.Employee/Manager One',
   newRef:'org.javers.core.examples.model.Employee/Manager Second'}
2. ListChange{
   globalId:'org.javers.core.examples.model.Employee/Manager Second',
   property:'subordinates',
   containerChanges: [(0).added:'org.javers.core.examples.model.Employee/Great Developer']}
3. ListChange{
   globalId:'org.javers.core.examples.model.Employee/Manager One',
   property:'subordinates',
   containerChanges:[(0).removed:'org.javers.core.examples.model.Employee/Great Developer']}

What am I do wrong? Should I expect pretty formatting as showed in docs or it was formatted manually?


Solution

  • In the doc you are referring to, line breaks was added manually.

    diff.toString() and diff.prettyPrint() (as it's only the alias) adds br after each change. So even ListChange with a series of ElementChanges is printed in a single line.

    Use ChangeProcessor to customize your diff formatting. See SimpleTextChangeLog example