private void setReverse( ArcProperty property, final Persistent sourceObject, final Persistent targetObject) { ArcProperty reverseArc = property.getComplimentaryReverseArc(); if (reverseArc != null) { reverseArc.visit(new PropertyVisitor() { public boolean visitCollectionArc(CollectionProperty property) { property.addTarget(targetObject, sourceObject, false); return false; } public boolean visitSingleObjectArc(SingleObjectArcProperty property) { property.setTarget(targetObject, sourceObject, false); return false; } public boolean visitProperty(Property property) { return false; } }); context.getGraphManager().arcCreated( targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName()); markAsDirty(targetObject); } }
protected void handleArcPropertyChange( Persistent object, ArcProperty property, Object oldValue, Object newValue) { if (oldValue != newValue) { markAsDirty(object); if (oldValue instanceof Persistent) { context.getGraphManager().arcDeleted( object.getObjectId(), ((Persistent) oldValue).getObjectId(), property.getName()); } if (newValue instanceof Persistent) { context.getGraphManager().arcCreated( object.getObjectId(), ((Persistent) newValue).getObjectId(), property.getName()); } } }
static void setReverse(final Persistent sourceObject, String propertyName, final Persistent targetObject) { ArcProperty property = (ArcProperty) Cayenne.getClassDescriptor(sourceObject).getProperty(propertyName); ArcProperty reverseArc = property.getComplimentaryReverseArc(); if (reverseArc != null) { reverseArc.visit(new PropertyVisitor() { public boolean visitToMany(ToManyProperty property) { property.addTargetDirectly(targetObject, sourceObject); return false; } public boolean visitToOne(ToOneProperty property) { property.setTarget(targetObject, sourceObject, false); return false; } public boolean visitAttribute(AttributeProperty property) { return false; } }); sourceObject.getObjectContext().getGraphManager() .arcCreated(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName()); markAsDirty(targetObject); } }
void handleArcPropertyChange( Persistent object, ArcProperty property, Object oldValue, Object newValue) { boolean arcChangeInProcess = isArchChangeInProcess(); // prevent reverse actions down the stack setArcChangeInProcess(true); if (oldValue instanceof Persistent) { context.getGraphManager().arcDeleted( object.getObjectId(), ((Persistent) oldValue).getObjectId(), property.getName()); if (!arcChangeInProcess) { unsetReverse(property, object, (Persistent) oldValue); } markAsDirty(object); } if (newValue instanceof Persistent) { context.getGraphManager().arcCreated( object.getObjectId(), ((Persistent) newValue).getObjectId(), property.getName()); if (!arcChangeInProcess) { setReverse(property, object, (Persistent) newValue); } markAsDirty(object); } }