/** @since 3.1 */ @Override public <T extends Persistent> T localObject(T objectFromAnotherContext) { if (objectFromAnotherContext == null) { throw new NullPointerException("Null object argument"); } ObjectId id = objectFromAnotherContext.getObjectId(); // first look for the ID in the local GraphManager synchronized (getGraphManager()) { T localObject = (T) getGraphManager().getNode(id); if (localObject != null) { return localObject; } // create a hollow object, optimistically assuming that the ID we // got from // 'objectFromAnotherContext' is a valid ID either in the parent // context or in // the DB. This essentially defers possible FaultFailureExceptions. ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(id.getEntityName()); Persistent persistent = (Persistent) descriptor.createObject(); persistent.setObjectContext(this); persistent.setObjectId(id); persistent.setPersistenceState(PersistenceState.HOLLOW); getGraphManager().registerNode(id, persistent); return (T) persistent; } }
/** * Returns a map key for a given to-many map relationship and a target object. * * @since 3.0 */ protected Object getMapKey(String relationshipName, Object value) { EntityResolver resolver = objectContext.getEntityResolver(); ClassDescriptor descriptor = resolver.getClassDescriptor(objectId.getEntityName()); if (descriptor == null) { throw new IllegalStateException("DataObject's entity is unmapped, objectId: " + objectId); } PropertyDescriptor property = descriptor.getProperty(relationshipName); if (property instanceof ToManyMapProperty) { return ((ToManyMapProperty) property).getMapKey(value); } throw new IllegalArgumentException( "Relationship '" + relationshipName + "' is not a to-many Map"); }