2016-10-17 10 views
0

P.P.S. OK、私はhier Javers Comparing Listsの次のコメントを設立しましたLEVENSHTEIN_DISTANCEはリストを比較して順序を無視しません。

JaVersリスト比較アルゴリズムでは、移動の概念はありません。移動後、あなたが言及したように、ValueAddedとValueRemovedという2つの変更が報告されます。

しかし、どのように私は認識することができます、リストは実際に変更されていない?

P.S. @Entitiesと@IdをZasFishに取得しても、ZasCatchZoneとZasCatchAreaはまだ取得します Diff: 1. NewObject {globalId: 'my.javers.comparator.ZasFish/2'} 2. ObjectRemoved {globalId: 'my。 javers.comparator.ZasFish/1 '}

私はカスタムオブジェクトのリストを比較しようとしています。 LEVENSHTEIN_DISTANCEを設定してカスタムコンパレータを作成しました。オブジェクト間の唯一の違いは、リスト内の値の順序です。私は "変化はない"と期待していますが、私はListChangeを得ました。結果とその例は以下の通りです。私は間違って何をしていますか?

多くのおかげに関して、 アンドレイ

Diff: 
1. ListChange{globalId:'my.javers.comparator.ZasFish/', property:'zones', containerChanges:[(2).'[email protected]'>>'[email protected]', (1).'[email protected]'>>'[email protected]', (0).'[email protected]'>>'[email protected]']} 
2. ListChange{globalId:'my.javers.comparator.ZasFish/', property:'areas', containerChanges:[(2).'[email protected]'>>'[email protected]', (1).'[email protected]'>>'[email protected]', (0).'[email protected]'>>'[email protected]']} 



package my.javers.comparator; 

public class ZasCatchArea { 
    String catchArea; 

    public String getCatchArea() { 
     return catchArea; 
    } 

    public void setCatchArea(String catchArea) { 
     this.catchArea = catchArea; 
    } 
} 

public class ZasCatchZone { 
    String catchZone; 

    public String getCatchZone() { 
     return catchZone; 
    } 

    public void setCatchZone(String catchZone) { 
     this.catchZone = catchZone; 
    } 
} 

public class ZasFish { 
    String fischName; 
    List<ZasCatchZone> zones = new ArrayList<ZasCatchZone>(); 
    List<ZasCatchArea> areas = new ArrayList<ZasCatchArea>(); 

    public String getFischName() { 
     return fischName; 
    } 

    public void setFischName(String fischName) { 
     this.fischName = fischName; 
    } 

    public List<ZasCatchZone> getZones() { 
     return zones; 
    } 

    public void setZones(List<ZasCatchZone> zones) { 
     this.zones = zones; 
    } 

    public List<ZasCatchArea> getAreas() { 
     return areas; 
    } 
    public void setAreas(List<ZasCatchArea> areas) { 
     this.areas = areas; 
    } 
} 

public class ZasCatchAreaComparator implements 
CustomPropertyComparator<ZasCatchArea, ValueChange> { 

    public ValueChange compare(ZasCatchArea left, ZasCatchArea right, 
       GlobalId affectedCdoId, Property propertyName) { 
     if (left.getCatchArea().equals(right.getCatchArea())) 
      return null; 

     return new ValueChange(affectedCdoId, propertyName.getName(), left, right); 
    } 

} 

public class ZasCatchZoneComparator implements 
CustomPropertyComparator<ZasCatchZone, ValueChange> { 

    public ValueChange compare(ZasCatchZone left, ZasCatchZone right, 
        GlobalId affectedCdoId, Property propertyName) { 
     if (left.getCatchZone().equals(right.getCatchZone())) 
      return null; 

     return new ValueChange(affectedCdoId, propertyName.getName(), left, right); 
    } 

} 

public class MyComparator { 

    public static void main(String[] args) { 
     Javers javers = JaversBuilder.javers() 
      .registerCustomComparator(new ZasCatchAreaComparator(), ZasCatchArea.class) 
      .registerCustomComparator(new ZasCatchZoneComparator(), ZasCatchZone.class) 
      .withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE).build(); 

     ZasFish fisch1 = new ZasFish(); 
     ZasFish fisch2 = new ZasFish(); 

     ZasCatchZone z1 = new ZasCatchZone(); 
     z1.setCatchZone("zone1"); 
     ZasCatchZone z2 = new ZasCatchZone(); 
     z2.setCatchZone("zone2"); 
     ZasCatchZone z3 = new ZasCatchZone(); 
     z3.setCatchZone("zone3"); 

     fisch1.getZones().add(z1); 
     fisch1.getZones().add(z2); 
     fisch1.getZones().add(z3); 

     ZasCatchArea a1 = new ZasCatchArea(); 
     a1.setCatchArea("area1"); 
     ZasCatchArea a2 = new ZasCatchArea(); 
     a2.setCatchArea("area2"); 
     ZasCatchArea a3 = new ZasCatchArea(); 
     a3.setCatchArea("area3"); 

     fisch1.getAreas().add(a1); 
     fisch1.getAreas().add(a2); 
     fisch1.getAreas().add(a3); 

     ZasCatchZone z4 = new ZasCatchZone(); 
     z4.setCatchZone("zone3"); 
     ZasCatchZone z5 = new ZasCatchZone(); 
     z5.setCatchZone("zone2"); 
     ZasCatchZone z6 = new ZasCatchZone(); 
     z6.setCatchZone("zone1"); 

     fisch2.getZones().add(z4); 
     fisch2.getZones().add(z5); 
     fisch2.getZones().add(z6); 

     ZasCatchArea a4 = new ZasCatchArea(); 
     a4.setCatchArea("area3"); 
     ZasCatchArea a5 = new ZasCatchArea(); 
     a5.setCatchArea("area1"); 
     ZasCatchArea a6 = new ZasCatchArea(); 
     a6.setCatchArea("area2"); 

     fisch2.getAreas().add(a4); 
     fisch2.getAreas().add(a5); 
     fisch2.getAreas().add(a6); 

     Diff diff = javers.compare(fisch1, fisch2); 


     System.out.println(diff); 

    } 

} 

答えて

0

私は私の問題の解決策を設立思います。私はその後、この

final Javers javers = JaversBuilder.javers() 
      .registerCustomComparator(new ZasCatchAreaComparator(), ZasCatchArea.class) 
      .registerCustomComparator(new ZasCatchZoneComparator(), ZasCatchZone.class) 
      .registerValue(ZasCatchArea.class).registerValue(ZasCatchZone.class).registerValueObject(ZasFish.class) 
      .withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE).build(); 

のような値と値オブジェクトを登録した場合、私は

1. ListChange{globalId:'my.javers.comparator.ZasFish/', property:'zones', containerChanges:[(2).'[email protected]'>>'[email protected]', (1).'[email protected]'>>'[email protected]', (0).'[email protected]'>>'[email protected]']} 
2. ListChange{globalId:'my.javers.comparator.ZasFish/', property:'areas', containerChanges:[(2).'[email protected]'>>'[email protected]', (1).'[email protected]'>>'[email protected]', (0).'[email protected]'>>'[email protected]']} 

としてdiffを取得し、私はこのケースでどのとvalueChangeを持っていないように私はListChangeを無視することができます - >私のリストが同一であります。

関連する問題