2013-04-08 6 views
0

동일한 ecore 모델을 기반으로하는 EMF 인스턴스의 두 가지 버전이 있습니다. 수정 된 속성 : 추가 속성 : 삭제 된 속성 :EMF와 EMF 비교 비교

의 각 I 모델 개체 이름에서 각 개체에 대해 다음과 같은 형식

에서 v2로 V1 변경 것들의 목록을 준비해야 이러한 emf 인스턴스 파일은 실제로는 DB 데이터의 표현입니다. 사용자는 DB를 직접 변경하지는 않지만 emf 인스턴스 파일을 변경합니다. 도구는 이러한 변경 사항을 식별 한 다음 필요한 DML 문을 생성해야합니다. 의사 코드가이를 달성하는 방법에 대해 제시 될 수 있거나 더 나은 대안이 있다면 감사하게 생각하십시오. 아래 코드는 내가 현재 가지고 있습니다

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

당신은이 결과로 기대했던 것을 정확하게 말할 수 있습니까? 여기에 XMI 파일을 비교 한 결과가 있습니까? – Kellindil

+0

@Kellindil 차이점을 기반으로 SQL 삽입, 업데이트 및 삭제를 생성 할 수 있도록 모델 개체 당 모든 변경 사항 목록을 예상합니다. –

답변

0

출력 EMF Compare 형식은 차이점을 위해 사용됩니다. 오히려 diffs에 대해 다른 종류의 표현을 생성하려고합니다.

그냥 an IDiffProcessor을 다시 구현하는 데 관심이 있습니다. Diff 프로세서는 변경 사항을 감지 할 때마다 통지를받습니다. 기본적으로 우리는 "Diff"인스턴스를 생성합니다 ... 대신 DML 구문을 생성 할 수 없습니다. IDiffProcessor API here에 대한 간략한 개요를 볼 수 있습니다.