如何在文件更改时自动更新EMF ResourceSet?

时间:2011-02-12 00:58:13

标签: eclipse-emf

我需要在程序中始终保持某些文件的最新内容。 我已经创建了一个EMF资源集。

由于resourceSet.getResource(resourceURI, true)需要花费大量时间才能完成,因此我将资源集存储在静态字段中,因此可以缓存文件。

即。一旦为某个URI调用resourceSet.getResource(resourceURI, true),该文件将缓存在resourceSet

问题是resourceSet不会自动更新它的缓存:

即:

resourceSet.getResource(resourceURI, true);
// delete resourceURI from file system

// Here I expect null, but old version of the file is returned
resourceSet.getResource(resourceURI, true);

如果需要,如何强制resourceSet更新缓存?

我正在使用org.eclipse.emf.ecore.resource.impl.ResourceSetImpl,但我可能需要另一个版本的ResourceSet来考虑修改标记?

1 个答案:

答案 0 :(得分:4)

两件事:首先,如果你想重新加载资源,你必须调用

aResource.unload([..]);
aResource.load([..])

由于EMF不以任何方式要求Eclipse,ResourceResourceSet类与Eclipse工作区IResource子类不同,这意味着更改文件系统上的文件将不会导致重新加载EMF资源。

这很容易做到,看一下为你生成的XxxxEditor EMF,该类实例化一个IResourceChangeListener,它将在修改文件时从Eclipse工作区接收增量。生成的侦听器通过重新加载资源来处理这些增量。

protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
    public void resourceChanged(IResourceChangeEvent event) {
        IResourceDelta delta = event.getDelta();
        //find out which EMF Resource matches with the IResource and reload it
    }
}