private void fillReverseRelationship(Object destinationTarget, ArcProperty property) { ArcProperty clientProperty = (ArcProperty) targetDescriptor.getProperty(property.getName()); if (clientProperty != null) { ArcProperty clientReverse = clientProperty.getComplimentaryReverseArc(); if (clientReverse instanceof ToOneProperty) { clientReverse.writeProperty(destinationTarget, null, target); } } }
/** * Remaps keys in to-many map relationships that contain dirty objects with * potentially modified properties. */ private void remapTargets() { Iterator<Object> it = stateLog.dirtyIds().iterator(); EntityResolver resolver = context.getEntityResolver(); while (it.hasNext()) { ObjectId id = (ObjectId) it.next(); ClassDescriptor descriptor = resolver.getClassDescriptor(id.getEntityName()); Collection<ArcProperty> mapArcProperties = descriptor.getMapArcProperties(); if (!mapArcProperties.isEmpty()) { Object object = getNode(id); for (ArcProperty arc : mapArcProperties) { ToManyMapProperty reverseArc = (ToManyMapProperty) arc .getComplimentaryReverseArc(); Object source = arc.readPropertyDirectly(object); if (source != null && !reverseArc.isFault(source)) { remapTarget(reverseArc, source, object); } } } } }
} else if (property.getComplimentaryReverseArc() == null) {
ToManyMapProperty reverseArc = (ToManyMapProperty) arc.getComplimentaryReverseArc();
static void unsetReverse(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.removeTargetDirectly(targetObject, sourceObject); return false; } public boolean visitToOne(ToOneProperty property) { property.setTarget(targetObject, null, false); return false; } public boolean visitAttribute(AttributeProperty property) { return false; } }); sourceObject.getObjectContext().getGraphManager() .arcDeleted(targetObject.getObjectId(), sourceObject.getObjectId(), reverseArc.getName()); markAsDirty(targetObject); } }
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); } }
break; case DeleteRule.NULLIFY: ArcProperty reverseArc = property.getComplimentaryReverseArc();