2012-12-08 1 views
1

에서 Ecore를 XMI에서 모델 클래스를 생성 :EMF 우리가 이런는 Ecore 모델을 생성 할 수 있습니다, 런타임

이 전혀 클래스 경로에 이러한 클래스 없지만, 우리가 다른 작업에 사용할 수 있습니다
// 动态创建一个Book的子类,Magic power comes from here 
     // create the SchoolBook EClass 
     EClass schoolBookEClass = efactory.createEClass(); 
     schoolBookEClass.setName("SchoolBook"); 

     // create a new attribute for this EClass 
     EAttribute level = efactory.createEAttribute(); 
     level.setName("level"); 
     level.setEType(epackage.getEInt()); 
     schoolBookEClass.getEStructuralFeatures().add(level); 

     // 设置父类 
     schoolBookEClass.getESuperTypes().add(ExtlibraryPackage.eINSTANCE.getBook()); 

     // 创建新的课程类 
     EClass courseEClass = efactory.createEClass(); 
     courseEClass.setName("Course"); 

     // 课程名称属性 
     EAttribute courseName = efactory.createEAttribute(); 
     courseName.setName("courseName"); 
     courseName.setEType(epackage.getEString()); 
     courseEClass.getEStructuralFeatures().add(courseName); 

     // 课程对教材的引用关系 
     EReference courseBook = efactory.createEReference(); 
     courseBook.setName("courseBook"); 
     courseBook.setEType(schoolBookEClass); 
     courseBook.setContainment(false); 
     courseEClass.getEStructuralFeatures().add(courseBook); 

     // 创建包 
     EPackage schoolPackage = efactory.createEPackage(); 
     schoolPackage.setName("elv"); 
     schoolPackage.setNsPrefix("elv"); 
     schoolPackage.setNsURI("http:///www.elver.org/School"); 
     schoolPackage.getEClassifiers().add(courseEClass); 
     schoolPackage.getEClassifiers().add(schoolBookEClass); 
     EPackage.Registry.INSTANCE.put(schoolPackage.getNsURI(), schoolPackage); 

, ui를 생성하고 데이터베이스에 저장하십시오.

ECore 모델의 XMI 직렬화를 포함하는 XML 파일 (예 : mymodel.ecore)에 EMF 모델 클래스가 정의되어있는 경우. 그렇다면 클래스 패스에서 생성 된 클래스없이 런타임에 인스턴스의 인스턴스를 어떻게 만들 수 있습니까?

답변

1

당신은 실제로 런타임시는 Ecore 모델을로드하고 인스턴스화 할 수있는 개체 :

ResourceSet resourceSet = new ResourceSetImpl(); 
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl()); 
    Resource resource = resourceSet.getResource(URI.createFileURI("C:\\my.ecore"), true); 
    EPackage model = (EPackage)resource.getContents().get(0); 
    EClass eClass = (EClass) model.getEClassifiers().get(0); 
    EObject object = model.getEFactoryInstance().create(eClass);