cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bryan Lewis <br...@maine.rr.com>
Subject Re: accessing ObjectStore graph changes [WAS reverting changes and displaying commited changes]
Date Tue, 07 Nov 2006 18:24:29 GMT
I've been able to do a similar thing for the purposes of a change
history.  We wanted to look at each change and write a history record
only for the ones we cared about, ignoring phantom changes, to-many
relationships and a few other properties that we specify as don't-care. 
I didn't need to deal with the GraphDiff methods.  The ObjectStore will
give me the object's previous snapshot and that's sufficient.  Here's
the attribute part:

Map snapshot = dc.getObjectStore().getSnapshot(object.getObjectId());

ObjEntity entity = object.getObjEntity();
String entityName = object.getEntityName();

Collection properties = entity.getAttributes();
for (Iterator pit = properties.iterator(); pit.hasNext(); ) {
    ObjAttribute attribute = (ObjAttribute) pit.next();
    String name = attribute.getName();
    Object newValue = object.readProperty(name);

    // The snapshot uses database attribute names.
    String dbName = attribute.getDbAttributePath();
    Object oldValue = snapshot.get(dbName);

    if (!nullSafeEquals(oldValue, newValue)) {
        log.debug("# Real change in " + entityName + "." + name);
    }



edward pedersson wrote:
> Hi
>
> I am trying to display the changes in the object graph as granular as
> possible and I have come stuck in the objectStore. These methods and
> fields
>
>    protected Map changes = new HashMap();
>
>    ObjectStoreGraphDiff getChanges() {
>        return new ObjectStoreGraphDiff(this);
>    }
>
>
>    Map getChangesByObjectId() {
>        return changes;
>    }
>
> are all encapsulated quite heavily and I have no access to them other
> than
> creating a class in the org.apache.cayenne.access either as a subclass of
> ObjectStore or a stand alone class with an objectStore reference.
>
> I can't see any other way to display any more useful information to
> the user
> other than the default DataObject.toString() which really only tells the
> user the object has changed but nothing more.
>
> Has any body tried to do this before? Many thanks for your help.
>
>
>
> e--
>
> ---------- Forwarded message ----------
> From: edward pedersson <cpsmadness@googlemail.com>
> Date: 09-Oct-2006 11:11
> Subject: reverting changes and displaying commited changes
> To: Cayenne Users <cayenne-user@incubator.apache.org>
>
> Hi
>
> I have built an application using Cayenne and Tapestry running under
> Tomcat on a Linux server. I am using the latest released versions of
> all of the above.
>
> I would like to be able to display to the user the current changes in
> the DataContext and allow the user to revert individual changes. I
> would also like them to be able to see what values the object had
> before the change.
>
> I have read the documentation and thought about having nested contexts
> but at times I would have to deal with 50+ context so it seems a bit
> unmanageable.
>
> Any thought would be most helpful.
>
> Thanks in advance.
>
> -- 
>
>
> -- e
>
>


Mime
View raw message