2012-08-14 5 views
0

동일한 메타 모델을 기반으로하는 두 개의 모델이 있습니다. Diff Model을 받으려면 EMF Compare을 사용할 수 있습니다. 필자의 경우, 하나의 모델은 새로운 모델의 이전 버전이다.EMF : 변경 모델/명령으로 모델 변경

a) 이전 모델에서 새 모델로 변경된 사항을 설명하는 변경 모델은 어떻게 받습니까?

b) 이것이 기본 EMF 변경 모델의 인스턴스가 아닌 경우 이전 모델에서 이러한 변경 사항을 실행하는 명령을 만들 수 있습니까?

나는 다양한 이유로 EObject 요소를 대체하고 싶지 않습니다. EMF Compare 사용은 필수는 아닙니다.

답변

1

는 또한 이클립스 포럼에 당신을 대답하지만, 스택 오버 플로우 사용자를 위해이 질문에 우연히 생각하고, 여기 내 대답했다 :

  • 사용 EMF 비교 1.3

    당신은 전화를해야합니다

    diff 프로세스를 프로그래밍 방식으로 (MatchService.match, DiffService.diff) DiffModel을 검색합니다. 그런 다음 자신의 명령 내에서 이러한 모든 diff를 적용 할 수 있습니다 (RecordingCommand 내에서 MergeService.merge에 대한 호출을 캡슐화 함). 거기에서 명령의 모든 diff를 병합하고 필요할 경우 해당 ChangeModel을 검색 할 수 있습니다 (DiffModel에서 ChangeModel 로의 변환이 없음). 이것은 성 가시지만, 병합 할 수있는 컨텍스트에 있다면 수행 할 수 없습니다 (ChangeModel 만 필요하면 나중에 명령을 실행 취소 할 수 없습니다). 아마 우리가 EMF Compare 2.0을 완성 할 때까지 가장 안전한 방법 일 것입니다.

  • EMF는 2

    EMF 2는 개발 단계에서 현재, 그리고 병합이 아직 명령 내에서 수행되지 않고 있지만, 그것은이 버전의 우리의 목표입니다 비교 사용. 그러나이 새로운 버전으로 ChangeModel을보다 쉽게 ​​얻을 수 있습니다. 당신이 필요로하는 것은 당신 자신의 IDiffProcessor를 생성하고 그것을 사용하여 DefaultDiffEngine을 인스턴스화하는 것입니다. Diff Processor는 참조 또는 속성의 차이를 감지 할 때마다 통지됩니다. 그런 다음 해당 ChangeModel을 작성할 수 있습니다.