1

私が知っているように、次のような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の作成、データベースへの保存などに使用できます。

xmlファイル(mymodel.ecoreなど)で定義されたEMFモデルクラスがある場合、それらのECoreモデルのXMIシリアル化のみが含まれます。次に、クラスパスにクラスを生成せずに、実行時にそれらのインスタンスを作成するにはどうすればよいですか。

4

1 に答える 1

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);
于 2012-12-08T23:57:36.507 に答える