cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Zeigler <robe...@puregumption.com>
Subject Re: Determining changes in a dataobject / modification diff
Date Fri, 22 Feb 2008 16:09:22 GMT
Hi,

I had a requirement very similar to this in a recent project.
Every change made to a set of objects had to be recorded to be able to  
provide a history of changes to an object.
What I did was to have those objects descend from a common super  
class, which, in turn, descends from CayenneDataObject.
In my superclass, I overrode writeProperty and setToOneTarget.  You  
get the new values passed into you, and you have a chance to examine  
the old values, as well, by calling readProperty.  It has worked out  
quite nicely.

Here's a sample snippet from writeProperty:

     @Override
     public void writeProperty(String name, Object value){
         Object old = readProperty(name);
         if (value == null) {
             if (old != null) {
                 recordChange(name,name + " changed from " +  
labelFor(readProperty(name)) + " to " + labelFor(value));
             }
         } else if (!value.equals(old)) {
                 recordChange(name,name + " changed from " +  
labelFor(readProperty(name)) + " to " + labelFor(value));
         }
         super.writeProperty(name, value);
     }

recordChange handles recording the changes for me; labelFor takes an  
object and converts it into a string suitable for user consumption.

HTH,

Robert

On Feb 22, 2008, at 2/228:59 AM , Ilya Lazarev wrote:

> Apologies if this has been asked before, I couldn't find anything in  
> the
> archives. The problem boils down to this: there is a cayenne object  
> which is
> updated via a form. I want to capture changes made to every single  
> modified
> field in a DB, the value before modification and the value after.  
> The object
> has a number of to-many relationships, which would also have to be  
> checked
> one by one. The simplest way I can envision this is by manually  
> creating an
> object clone before any modifications are made, and then comparing  
> the two
> objects and noting the differences. Is there an easier way to see a  
> diff of
> the fields, perhaps by accessing properties of the cayenne object  
> itself? I
> am using cayenne 2.
>
> Many thanks,
> Ilya


Mime
View raw message