在前面的博客中,我介绍了一些如何获得activie editor里面图元属性的方法。
但如果我们要进行一些比较高级的定制,比如需要分析每个图与每个图之间、或者每个图中的图元与另一个图中的图元有什么关系,则这时我们便会遇到一个麻烦:如何不打开editor而通过此editor对应的文件得到此editor的模型对象(可以通过此模型对象获得diagram的属性,比如图的name,author,drawDate),或者得到此editor里面图元的模型对象?
在我的项目里便遇到这样的问题。解决办法如下:
URI fileUri = URI.createFileURI(modelFilePath); // 这里的modelFilePath指model文件路径,而不是diagram文件路径,因为diagram文件存储的是图形的类型、位置等信息,而model文件存储的是图形的属性信息。
ResourceSet resourceSet = new ResourceSetImpl();
Resource resource = resourceSet.getResource(fileUri, true); // 通过文件路径获得对应的资源(内存模型)
EList<EObject> eList = resource.getContents();
EObject eObject = eList.get(0); // 得到此图(或者说此editor)对应的EObject对象
String s = ((XXXDiagramImpl) eObject).getAuthor(); // 得到此图的作者信息
String s = ((XXXDiagramImpl) eObject).getXXX().get(0).getName(); // 得到此图中某个图元的名称