带有最后修改时间戳的 EMF EObject

EMF EObject with last modified time-stamp

如何为每次 setter 更改任何(EMF 建模的)属性 的值时分配的 EObject 声明类似时间戳的 属性对象。

public interface ReviewObject extends EObject {
    /**
     * @generated
     */
    void setLastModified(Date value); // This should be invoked each time a child class's
                                      // setter changes any property
}

我更愿意在 'ReviewObject'-s 实现者的方法中处理它,而不是编写基于序列化或事务的解决方案。

您可以实施 org.eclipse.emf.common.notify.Adapter(有关详细信息,请参阅 http://www.vogella.com/tutorials/EclipseEMFNotification/article.html)并将您的适配器添加到所有相关的 ReviewObjects。收到通知后,分析它是否是模型更改并调用您的 setLastModified 方法。请注意,您必须确保在加载模型时随时放置适配器,因此您可能需要找到一种实例化它的方法 "automagically".

可能还有另一种解决方案,让您生成的模型代码继承一些自定义方法 eSet(...) 的 ReviewObject,以便调用 setLastModified。您必须确保每个 setter 调用此 eSet 方法(我不确定默认情况下是否如此)。您可能需要为此设置 dynamic/reflective 方法调用设置。