2

私は大きな問題を抱えています:

atlプラグインを使用して、通常の方法で行うと問題なく動作するATL変換があります。

しかし、Java を起動しようとすると、モデルのクラスが見つかりません (org.eclipse.emf.ecore.xmi.ClassNotFoundException: Class 'operationalTemplateGroup' is not found or is abstract)

例: モデルに「operationalTemplateGroup」クラスがありますが、メタモデルでは次のように記述されています。 <eClassifiers xsi:type="ecore:EClass" name="OPERATIONALTEMPLATEGROUP"> <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> <details key="name" value="OPERATIONALTEMPLATEGROUP"/> <details key="kind" value="elementOnly"/> </eAnnotations>

OperationalTemplateGroup ではなく OPERATIONALTEMPLATEGROUP を参照してください。プラグインは解析できるのに、Java ランチャーは解析できないのはなぜですか? 私はこの問題を 1 つのモデルだけで抱えており、他のモデルは正常に動作しています。それを operationTemplateGroup に変更すると、同じ問題が発生する次のクラス (約 6000 行のコード) まで動作します。方法:

public static void main(String[] args) {
    try {
        System.out.println("Running...");

        /*
         * Paths
         */
        String inModelPath = "models/architectures/AToMS.acmehealth";
        String inModelPath2 = "models/openehr/TemplatesAToMS.openehr2008v4";
        String outModelPath = "models/richubi/TemplatesAToMS22.rich_interface_model";
        String archMMPath = "metamodels/architectures/ACMEHealthv2.ecore";
        String openEHRMMPath = "metamodels/openehr/openehr2008v4.ecore";
        String richUbiMMPath = "metamodels/richubi/rich_interface_components.ecore";

        System.out.println("inModelPath: "   inModelPath);
        System.out.println("inModelPath2: "   inModelPath2);
        System.out.println("outModelPath: "   outModelPath);
        System.out.println("archMMPath: "   archMMPath);
        System.out.println("openEHRMMPath: "   openEHRMMPath);
        System.out.println("richUbiMMPath: "   richUbiMMPath);

        /*
         * Initializations
         */
        ILauncher transformationLauncher = new EMFVMLauncher();
        ModelFactory modelFactory = new EMFModelFactory();
        IInjector injector = new EMFInjector();
        IExtractor extractor = new EMFExtractor();

        /*
         * Load metamodels
         */
        IReferenceModel archMetamodel = modelFactory.newReferenceModel();
        injector.inject(archMetamodel, archMMPath);

        IReferenceModel openEHRMetamodel = modelFactory.newReferenceModel();
        injector.inject(openEHRMetamodel, openEHRMMPath);

        IReferenceModel richUbiMetamodel = modelFactory.newReferenceModel();
        injector.inject(richUbiMetamodel, richUbiMMPath);
        System.out.println("Metamodels loaded.");

        /*
         * Load models and run transformation
         */
        IModel inModel2 = modelFactory.newModel(openEHRMetamodel);
        injector.inject(inModel2, inModelPath2); // ERROR HERE!!!!


        IModel inModel = modelFactory.newModel(archMetamodel);
        injector.inject(inModel, inModelPath);



        IModel outModel = modelFactory.newModel(richUbiMetamodel);
        System.out.println("IN, OUT models loaded.");

        System.out.print("Running ATL trasformation...");

        transformationLauncher.initialize(new HashMap<String, Object>());
        transformationLauncher.addLibrary("LibHelpers",
                new FileInputStream("transformations/LibHelpers.asm"));
        transformationLauncher.addInModel(inModel, "archMM", "openEHRMM");
        transformationLauncher.addInModel(inModel2, null, "openEHRMM");
        transformationLauncher.addOutModel(outModel, "archM", "openEHRM");

        transformationLauncher
                .launch(ILauncher.RUN_MODE,
                        new NullProgressMonitor(),
                        new HashMap<String, Object>(),
                        new FileInputStream(
                                "/home/operador/workspace/Transformation/transformations/OpenEHRTemplates2RichUbi.asm"));
        System.out.println("Done.");

        System.out.print("Extracting OUT model...");
        extractor.extract(outModel, outModelPath);
        System.out.println("Done.");

        /*
         * Unload all models and metamodels (EMF-specific)
         */
        EMFModelFactory emfModelFactory = (EMFModelFactory) modelFactory;
        emfModelFactory.unload((EMFModel) inModel);
        emfModelFactory.unload((EMFModel) outModel);
        emfModelFactory.unload((EMFReferenceModel) archMetamodel);
        emfModelFactory.unload((EMFReferenceModel) openEHRMetamodel);

    } catch (ATLCoreException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
4

0 に答える 0