1919import de .danielbechler .diff .inclusion .ValueNode ;
2020import de .danielbechler .diff .node .DiffNode ;
2121import de .danielbechler .diff .path .NodePath ;
22+ import de .danielbechler .util .Assert ;
2223
2324class CollectionItemIdentityService implements IdentityStrategyResolver
2425{
2526 private final ValueNode <IdentityStrategy > nodePathIdentityStrategies ;
2627 private final TypePropertyIdentityStrategyResolver typePropertyIdentityStrategyResolver ;
2728 private final IdentityConfigurer identityConfigurer ;
29+ private IdentityStrategy defaultIdentityStrategy = EqualsIdentityStrategy .getInstance ();
2830
29- public CollectionItemIdentityService (final IdentityConfigurer identityConfigurer )
31+ CollectionItemIdentityService (final IdentityConfigurer identityConfigurer )
3032 {
3133 this .identityConfigurer = identityConfigurer ;
3234 this .nodePathIdentityStrategies = new ValueNode <IdentityStrategy >();
@@ -45,24 +47,31 @@ public IdentityStrategy resolveIdentityStrategy(final DiffNode node)
4547 {
4648 return identityStrategy ;
4749 }
48- return EqualsIdentityStrategy . getInstance () ;
50+ return defaultIdentityStrategy ;
4951 }
5052
51- public IdentityConfigurer .OfCollectionItems ofCollectionItems (final NodePath nodePath )
53+ IdentityConfigurer .OfCollectionItems ofCollectionItems (final NodePath nodePath )
5254 {
5355 return new OfCollectionItemsByNodePath (nodePath );
5456 }
5557
56- public IdentityConfigurer .OfCollectionItems ofCollectionItems (final Class <?> type , final String propertyName )
58+ IdentityConfigurer .OfCollectionItems ofCollectionItems (final Class <?> type , final String propertyName )
5759 {
5860 return new OfCollectionItemsByTypeProperty (type , propertyName );
5961 }
6062
63+ IdentityConfigurer setDefaultIdentityStrategy (final IdentityStrategy identityStrategy )
64+ {
65+ Assert .notNull (identityStrategy , "identityStrategy" );
66+ this .defaultIdentityStrategy = identityStrategy ;
67+ return identityConfigurer ;
68+ }
69+
6170 private class OfCollectionItemsByNodePath implements IdentityConfigurer .OfCollectionItems
6271 {
6372 private final NodePath nodePath ;
6473
65- public OfCollectionItemsByNodePath (final NodePath nodePath )
74+ OfCollectionItemsByNodePath (final NodePath nodePath )
6675 {
6776 this .nodePath = nodePath ;
6877 }
@@ -79,7 +88,7 @@ private class OfCollectionItemsByTypeProperty implements IdentityConfigurer.OfCo
7988 private final Class <?> type ;
8089 private final String propertyName ;
8190
82- public OfCollectionItemsByTypeProperty (final Class <?> type , final String propertyName )
91+ OfCollectionItemsByTypeProperty (final Class <?> type , final String propertyName )
8392 {
8493 this .type = type ;
8594 this .propertyName = propertyName ;
0 commit comments