简答:看看EMF Book。本书将帮助您了解如何使用生成的代码以及如何构建模型(第四部分)。
有两种方法可以创建模型:以编程方式或使用生成的编辑器。编辑器允许您在树视图中创建模型。要使用编辑器,您需要将编辑器插件作为 Eclipse 应用程序运行(右键单击 -> 运行方式)。一旦进入嵌套的 Eclipse,您应该能够使用您的编辑器来创建模型。
单独的模型不是很有用,我假设您想加载模型以读取其内容、修改它们、查询它们等。首先要知道的是 EMF 模型作为 XMI 文件(名称.xmi)。全局扩展名是“xmi”,但在 genmodel 中,您可以使用您的或引用的扩展名(假设是“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 运行时应用程序运行(也就是说,您的 metamodel 插件安装在 Eclipse IDE 中)。如果您想在没有运行时 eclipse 的情况下运行或在独立环境中运行,则需要采取额外的预防措施:
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
EMF 元模型和生成的代码只是一个“数据模型”。所以开箱即用它只会帮助您存储和操作数据。任何额外的功能都必须围绕它进行编码。
最后一点,Eclipse 站点上的 EMF Forum 拥有一个活跃的社区,与 Stackoverflow 相比,EMF 开发人员更有可能在那里监控问题。