2017-09-06 3 views
1

Eclipse 플러그인 모델의 클래스 중 하나는 완전히 다른 모델 및 플러그인에서 다른 클래스를 참조해야합니다.Eclipse EMF - tostring()을 저장하지 않고도 다른 Eclipse 플러그인에서 모델의 일부인 클래스를 참조 할 수 있습니까?

그렇게하려면 thread으로 edatatype을 사용하고 인스턴스 유형을 연결해야하는 유형으로 초기화하는 것이 좋습니다. 내가 다른 모델에 내 클래스에 연결하려고 할 때 그러나, 그것은 다음과 같은 예를 들어 나는 두 개의 서로 다른 외부 클래스 CapabilityDescriptorImpl 및 ResourceDescriptorImpl에 연결하고이 예에서는

<tasks description="" id="p1.tsk4" label="1" type="place" time="10"> 
    <requiredCapabilityDescriptor>[email protected] (description: , id: cap2, label:) (parent: null)</requiredCapabilityDescriptor> 
    <involvedResource>[email protected] (description: null, id: null, label: null) (cad: null, material: null, pointySurface: &lt;unset>, sharpEdges: &lt;unset>, thumbnail: null, weight: &lt;unset>) (changeCost: null, generic: &lt;unset>, investCost: null, manufacturer: null)</involvedResource> 
</tasks> 

처럼 클래스 있으며, toString을 절약 할 수 있습니다. 저장소와 가독성면에서 불편한 tostring이 저장되어 있음을 알 수 있듯이 이러한 경우 일관성 처리에 대해서는 확신 할 수 없습니다 (참조 된 인스턴스의 삭제, 편집을 의미). 스레드에 따르면 직렬화 할 데이터 형식을 선택했기 때문에 tostring이 작성되었으므로 직렬화 할 수 없도록 시도했지만 작동하지 않습니다.

그래서 나는 가독성 및 스토리지의 측면에서 훨씬 더

<tasks description="" id="p1.tsk4" label="1" type="place" time="10"> 
<requiredCapabilityDescriptor xsi:type="CoD:CapabilityDescriptor" description="" id="cap2" label=""/> 
    <involvedResource xsi:type="CoD:ResourceDescriptor"/> 
</tasks> 

가되기 위해 저장하는 문자열을 최소화 eReference를 사용하여 다른 접근 방식을 시도,하지만 난 정말 실제 기준이 의심 원래 인스턴스를 참조 할 수있는 것을 포함하지 않습니다. 사실 그것은 어떤 컨테이너를 보여주지 않기 때문에 그것이 원래의 물건을 언급하지 않고 있다고 확신합니다. 그리고 일관성 문제로 다시.

내가 생각할 수있는 마지막 옵션은 참조 된 개체의 URI를 저장하는 것이지만이 경우 모든 일관성 문제를 직접 관리해야합니다.

그래서 내 질문은 "이 외부 클래스를 참조하는 데 더 좋은 방법이 있습니까?"

답변

0

Generating an Extended EMF Model에서 영감을 얻었습니다. 나는 다음을 수행했다 :

  1. 먼저 모든 별도의 모델 파일을 모델 파일 중 하나의 패키지에 넣었다.
  2. 각 패키지의 xsds를 구분하기 위해 genmodel을 내 보냈습니다.
  3. 모든 xsd 파일의 가져 오기 태그가 가져온 모델에 대한 xsd의 유효한 URL을 가리키는 지 확인하십시오.
  4. 내 플러그인간에 xsd 파일을 분산 시켰습니다.
  5. 각 플러그인에서 genmodel을 만들 때 가져온 모델의 genmodel을 참조했습니다 (동일한 가져 오기 순서의 genmodels을 생성해야합니다. 첫 번째 가져 오기를 수행하지 않은 모델과 그 다음에 만 가져 오는 모델). 등등)
  6. 이제 다른 모델의 클래스를 가리키는 참조를 사용하십시오.

이은 My.des

라는 이름의 또 다른 XMI 파일을 가리키는

<c xmlns:c="platform:/resource/my_project/Resource/c.xsd"> 
    <c:res C:id="r" C:label="r"> 
    <C:des>My.des#//@rDes.0</C:des> 
    </C:resources> 
</C:c> 

처럼 보이는 XMI 파일을 생성

관련 문제