2013-04-08 3 views
0

다음은 내 emf 인스턴스 문서의 두 가지 버전입니다. 당신이 볼 수 있듯이 변경된 유일한 것은 'productCode'값이 에서 KAF to 으로 변경되었습니다. 그러나 이것을 두 가지 변경으로 처리합니다. ADDDELETE. 이유를 모르십니까?EMF 비교 : DifferenceKind는 CHANGE 대신 ADD 및 DELETE입니다. 왜?

버전 1

<billableSystemEvent eventType="1" description="Application Processed"> 
     <billableProductCode productCode="KAF"/> 
</billableSystemEvent> 

버전 2

<billableSystemEvent eventType="1" description="Application Processed"> 
     <billableProductCode productCode="Changed"/> 
</billableSystemEvent> 

public Comparison compare() 
{ 
    // Load the two input models 
    ResourceSet resourceSet1 = new ResourceSetImpl(); 
    ResourceSet resourceSet2 = new ResourceSetImpl(); 
    String xmi1 = "src/test/java/com/equifax/ic/provisioning/service/v1.xmi"; 
    String xmi2 = "src/test/java/com/equifax/ic/provisioning/service/v2.xmi"; 
    load(xmi1, resourceSet1); 
    load(xmi2, resourceSet2); 

    // Configure EMF Compare 
    EMFCompare comparator = EMFCompare.builder().build(); 

    // Compare the two models 
    IComparisonScope scope = EMFCompare.createDefaultScope(resourceSet1, resourceSet2); 
    return comparator.compare(scope); 
} 

@Test 
public void testCompare() 
{ 
    Comparison comparison = compare(); 
    List<Diff> differences = comparison.getDifferences(); 

    for(Diff d: differences) 
    { 
     System.err.println("d.getKind(): "+d.getKind()); 
     System.err.println("d.getMatch(): " + d.getMatch()); 
     System.err.println("State: " + d.getState()); 
    } 

    assertSame(Integer.valueOf(12), Integer.valueOf(differences.size())); 
} 

출력

d.getKind(): ADD 
d.getMatch(): MatchSpec{[email protected] Application Processed, [email protected] Application Processed, origin=<null>, #differences=2, #submatches=2} 
State: UNRESOLVED 

d.getKind(): DELETE 
d.getMatch(): MatchSpec{[email protected] Application Processed, [email protected] Application Processed, origin=<null>, #differences=2, #submatches=2} 
State: UNRESOLVED 

답변

0

우리의 위키는 전체 거리가 멀다 description of the Diff elements은 "Add (추가)", "Delete (삭제)"또는 "Changed (변경)"의 의미를 EMF Compare에 설명하기에 충분해야합니다.

그 외에도 여기에 인쇄 한 내용만으로는 실제로 어떤 일이 일어나는지 알 수 없습니다. System.out은 "d.toString()"자체 또는 적어도 d.getValue() (instanceof ReferenceChange 또는 ReferenceChange)를 인쇄 할 때 더 유용합니다.

모델에 대한 지식이 없어도 대답 할 것입니다. 특히 "billableProductCode"및 "productCode"가 무엇인지에 대해 잘못된 가정을하지 않기를 바랍니다.

billableSystemEvent.billableProductCode가 다중 값 속성이지만 꽤 확신 할 수 있습니다. 그러한 경우, 서로 "동일"하지 않은 요소는 일치하지 않는 것으로 간주됩니다. "KAF"는 "변경됨"과 같지 않으므로 두 값이 일치하지 않는 것으로 간주되어 "KAF"가 삭제되고 "변경됨"이 추가됩니다.

여기가 단순함에 유의하십시오. 여기서 Object # equals (Object)는 사용하지 않고 IEqualityHelper#matchingValues(Object, Object)입니다.

"billableProductCode"가 단일 값 속성 인 경우 "KAF"가 "Changed"로 변경되었음을 감지했을 것입니다.