问题描述
在Epsilon Model Migration Language (https://www.eclipse.org/epsilon/doc/flock/) 的网页中,有“Full copy”原语的描述。我想用它以最简单的方式复制模型,生成一个具有另一个名称的新模型(但本质上是第一个的完整副本)。你能告诉我一些代码吗?这是我第一次使用 Epsilon。谢谢。
解决方法
下面是一个最小示例,演示了从 Java 运行 Flock 以迁移基于 EMF 的树模型。完整的 Maven 项目位于 Epsilon's Git repo。
package org.eclipse.epsilon.examples.standalone.flock;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.flock.FlockModule;
public class FlockStandaloneExample {
public static void main(String[] args) throws Exception {
Path root = Paths.get(FlockStandaloneExample.class.getResource("").toURI()),modelsRoot = root.getParent().resolve("models");
// Set up the original model
EmfModel original = new EmfModel();
original.setName("Source");
original.setReadOnLoad(true);
original.setStoredOnDisposal(false);
original.setMetamodelFile(modelsRoot.resolve("Tree.ecore").toAbsolutePath().toString());
original.setModelFile(modelsRoot.resolve("Tree.xmi").toAbsolutePath().toString());
original.load();
// Set up the migrated model
EmfModel migrated = new EmfModel();
migrated.setName("Migrated");
migrated.setReadOnLoad(false);
migrated.setStoredOnDisposal(true);
migrated.setMetamodelFile(modelsRoot.resolve("Tree.ecore").toAbsolutePath().toString());
migrated.setModelFile(modelsRoot.resolve("Tree.migrated.xmi").toAbsolutePath().toString().replace("/target/classes/","/src/"));
migrated.load();
// Run the migration transformation
FlockModule module = new FlockModule();
module.parse(root.resolve("tree2tree.mig"));
module.getContext().getModelRepository().addModel(original);
module.getContext().getModelRepository().addModel(migrated);
module.getContext().setOriginalModel(original);
module.getContext().setMigratedModel(migrated);
module.execute();
// Save the migrated model
module.getContext().getModelRepository().dispose();
}
}