"Can't find ObjEntity for Persistent class: "
+ object.getClass().getName()
+ ", class is likely not mapped.");
}
final Persistent persistent = (Persistent) object;
// sanity check - maybe already registered
if (persistent.getObjectId() != null) {
if (persistent.getObjectContext() == this) {
// already registered, just ignore
return;
}
else if (persistent.getObjectContext() != null) {
throw new IllegalStateException(
"Persistent is already registered with another DataContext. "
+ "Try using 'localObjects()' instead.");
}
}
else {
persistent.setObjectId(new ObjectId(entity.getName()));
}
persistent.setObjectContext(this);
persistent.setPersistenceState(PersistenceState.NEW);
getObjectStore().registerNode(persistent.getObjectId(), object);
getObjectStore().nodeCreated(persistent.getObjectId());
// now we need to find all arc changes, inject missing value holders and pull in
// all transient connected objects
ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
entity.getName());
if (descriptor == null) {
throw new IllegalArgumentException("Invalid entity name: " + entity.getName());
}
descriptor.visitProperties(new PropertyVisitor() {
public boolean visitToMany(ToManyProperty property) {
property.injectValueHolder(persistent);
if (!property.isFault(persistent)) {
Object value = property.readProperty(persistent);
Collection<Map.Entry> collection = (value instanceof Map)
? ((Map) value).entrySet()
: (Collection) value;
Iterator<Map.Entry> it = collection.iterator();
while (it.hasNext()) {
Object target = it.next();
if (target instanceof Persistent) {
Persistent targetDO = (Persistent) target;
// make sure it is registered
registerNewObject(targetDO);
getObjectStore().arcCreated(
persistent.getObjectId(),
targetDO.getObjectId(),
property.getName());
}
}
}
return true;
}
public boolean visitToOne(ToOneProperty property) {
Object target = property.readPropertyDirectly(persistent);
if (target instanceof Persistent) {
Persistent targetDO = (Persistent) target;
// make sure it is registered
registerNewObject(targetDO);
getObjectStore().arcCreated(
persistent.getObjectId(),
targetDO.getObjectId(),
property.getName());
}
return true;
}