obj = vo;
}
if (fresh) {
// Every fresh cat needs a parent assoc
Assoc parentAssoc = obj.createAssoc(
obj, mNewParent, Assoc.PARENT);
this.store(parentAssoc);
} else if (null != mNewParent) {
// New parent must be added to parentAssoc
Assoc parentAssoc = obj.getParentAssoc();
if(parentAssoc == null)
log.error("parent assoc is null");
parentAssoc.setAncestor(mNewParent);
this.store(parentAssoc);
}
// Clear out existing grandparent associations
Iterator ancestors = obj.getAncestorAssocs().iterator();
while (ancestors.hasNext()) {
Assoc assoc = (Assoc)ancestors.next();
if (assoc.getRelation().equals(Assoc.GRANDPARENT)) {
this.remove(assoc);
}
}
// Walk parent assocations, creating new grandparent associations
int count = 0;
Assoc currentAssoc = obj.getParentAssoc();
while (null != currentAssoc.getAncestor()) {
if (count > 0) {
Assoc assoc = obj.createAssoc(obj,
currentAssoc.getAncestor(),
Assoc.GRANDPARENT);
this.store(assoc);
}
currentAssoc = currentAssoc.getAncestor().getParentAssoc();
count++;
}
Iterator children = obj.getChildAssocs().iterator();
while (children.hasNext()) {
Assoc assoc = (Assoc) children.next();
// resetting parent will cause reset of ancestors links
assoc.getObject().setParent(obj);
// recursively...
this.store(assoc.getObject());
}
// Clear new parent now that new parent has been saved
mNewParent = null;
}