2014-12-05 8 views
0

EMF에서 모델을 만들었습니다. 나는 또한 그것 (. genmodel 파일)에서 코드를 생성 할 수 있었다, 나는 파일을 들여다 보았다. 나는 모델의 구현, 편집 및 편집자 플러그인을 이해한다. 그러나 코드로 메타 모델의 내 인스턴스를 만드는 방법을 이해하지 못합니다. 코드를 작성하는 방법을 이해하지만, 이제는 내 물건을 어디에 넣을 지 모릅니다. 그래서 호출됩니다. 여기 누군가가 나를 도울 수있는, 정말 stackoverflow에 EMF 스레드를 논의했다. 감사합니다,EMF에서 코드로 모델을 구현하려면 어떻게해야합니까? (Eclipse Modeling Framework)

+0

자신의 물건을 넣을 위치가 정확히 무엇을 의미합니까? 그리고 이미 모델 플러그인에서 생성 된 각각의 팩토리를 살펴 보았습니까? 그것들은 당신이 찾고있는 것이면 각각의'create' 메쏘드를 호출하여 메타 모델의 인스턴스를 생성 할 수있게 해줍니다. – edi

+0

구현 방법은 무엇입니까? 내 "모델"에 어떻게로드합니까? 코드를 작성하는 방법을 알고 있지만 실제로 사용하는 방법을 모르겠습니다.무엇이 그것을 움직이게합니까? – Makaveli

+0

RCP 응용 프로그램을 생성하려 했습니까? (.genmodel propeties에서 Rich Client Platform을 true로 설정할 수 있음) – Severin

답변

0

짧은 대답 : EMF Book을 살펴보십시오. 이 책은 생성 된 코드를 사용하는 방법과 모델을 구성하는 방법을 이해하는 데 도움이됩니다 (파트 IV).

모델을 만드는 방법은 프로그램 방식으로 또는 생성 된 편집기를 사용하여 두 가지가 있습니다. 편집기를 사용하여 트리 뷰에서 모델을 작성할 수 있습니다. 편집기를 사용하려면 편집기 플러그인을 Eclipse 응용 프로그램으로 실행해야합니다 (오른쪽 클릭 -> 실행). 일단 중첩 된 이클립스에서 에디터를 사용하여 모델을 괴롭힐 수 있어야합니다.

itslef의 모델은 그다지 유용하지 않으며 모델을로드하여 내용을 읽고 수정하고 쿼리하는 등의 작업을 수행한다고 가정합니다. 가장 중요한 사항은 EMF 모델이 XMI 파일로 유지된다는 것입니다 name.xmi). 전역 확장은 "xmi"이지만 genmodel에서는 oreffered 확장자를 사용할 수 있습니다 (가정은 "soq"임). XMI는 XML의 확장이므로 텍스트 편집기로 XMI 파일을 보면 XML과 비슷하게 보입니다. EMF 모델을로드하려면 기본 코드는

ResourceSet resourceSet = new ResourceSetImpl(); 
URI uri = URI.createURI("file:/c:/data/model.soq"); 
Resource resource = resourceSet.createResource(uri); 
try 
{ 
    resource.load(null); 
    System.out.println("loaded"); 
} 
catch (IOException e) 
{ 
    System.out.println("failed to read " + uri); 
} 

입니다. 이제 리소스에 모델의 모든 요소가 포함됩니다. 각각은 genmodel이 생성 한 각각의 Java 클래스의 인스턴스가됩니다. resource.getContents() 또는 resource.getAllContents()을 반복 할 수있는 리소스 (요소)의 내용을 얻으려면 후자가 모든 모델 내용을 반복 할 것이라는 차이가 있습니다. 전자는 첫 번째 수준 이상에서만 반복됩니다. 그런 다음, 예를 들어, 당신은 유형 테스트하고 물건을 할 수 있습니다 : 당신이 할 수있는

for (EObject eo : resource.getAllContents()) { 
    if (eo instanceof MyEmfClass2) { 
     System.out.println("Found an element of MyEmfClass2"); 
    } 
} 

다른 것은 당신의 메타 모델 클래스의 인스턴스를 생성하고 자원에 추가합니다. 예를 들어, 다른 소스로부터의 정보 (DB, 파일)을 읽을 모델을 생성하기 위해이 작업을 수행 할 수 있습니다 특정 공장 이름과 방법이 메타 모델에 의존한다는

MyEmfClass2 c2 = soqFactory.createMyEmfClass2(); 
c2.name = otherDataSource.name; 
ResourceSet resourceSet = new ResourceSetImpl(); 

URI uri = URI.createURI("file:/c:/data/newm.soq"); 
Resource resource = resourceSet.createResource(uri); 
resource.getContents().add(c2); 
try 
{ 
    resource.save(null); 
    System.out.println("saved"); 
} 
catch (IOException e) 
{ 
    System.out.println("failed to write " + uri); 
} 

참고. 또한이 코드는 사용자가 Eclipse 런타임 응용 프로그램에서 실행 중이라고 가정합니다 (즉, metmodel 플러그인이 Eclipse IDE에 설치되어 있음). 당신은 런타임 일식없이 또는 독립형 환경에서 실행하려면 추가 예방 조치를 수행해야합니다 :

EcorePackage.eINSTANCE.eClass(); // Makes sure EMF is up and running 
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap(). 
put("soq", new XMIResourceFactoryImpl()); // make sure EMF knows how to load your models 
YourPackage.eINSTANCE.eClass(); // Makes sure all your factories are registered and classes loaded 

기전력 메타 모델 및 생성 된 코드는 단지 "데이터 모델"입니다. 따라서 상자에서 꺼내면 데이터를 저장하고 조작하는 데 도움이됩니다. 모든 추가 기능을 코드화해야합니다.

마지막으로, Eclipse 사이트의 EMF Forum에는 활성 커뮤니티가 있고 EMF 개발자는 Stackoverflow보다 질문을 모니터링 할 가능성이 큽니다.