Re: Determining changes in a dataobject / modification diff

From: Robert Zeigler (robert..uregumption.com)
Date: Fri Feb 22 2008 - 11:09:22 EST

  • Next message: Andrus Adamchik: "Re: Determining changes in a dataobject / modification diff"

    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:

        ..verride
         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



    This archive was generated by hypermail 2.0.0 : Fri Feb 22 2008 - 11:09:57 EST