/**
* Maps a single record into the object it represents and registers it as
* reconstituted with the session.
*
* @param array $objectData
* @return object
* @throws Exception\InvalidObjectDataException
* @throws PersistenceException
*/
public function mapToObject(array $objectData)
{
if ($objectData === []) {
throw new Exception\InvalidObjectDataException('The array with object data was empty, probably object not found or access denied.', 1277974338);
}
if ($this->persistenceSession->hasIdentifier($objectData['identifier'])) {
return $this->persistenceSession->getObjectByIdentifier($objectData['identifier']);
} else {
$className = $objectData['classname'];
$classSchema = $this->reflectionService->getClassSchema($className);
$object = unserialize('O:' . strlen($className) . ':"' . $className . '":0:{};');
$this->persistenceSession->registerObject($object, $objectData['identifier']);
if ($classSchema->getModelType() === ClassSchema::MODELTYPE_ENTITY) {
$this->persistenceSession->registerReconstitutedEntity($object, $objectData);
}
if ($objectData['properties'] === []) {
if (!$classSchema->isLazyLoadableObject()) {
throw new PersistenceException('The object of type "' . $className . '" is not marked as lazy loadable.', 1268309017);
}
$persistenceManager = $this->persistenceManager;
$persistenceSession = $this->persistenceSession;
$dataMapper = $this;
$identifier = $objectData['identifier'];
$modelType = $classSchema->getModelType();
$object->Flow_Persistence_LazyLoadingObject_thawProperties = function ($object) use($persistenceManager, $persistenceSession, $dataMapper, $identifier, $modelType) {
$objectData = $persistenceManager->getObjectDataByIdentifier($identifier);
$dataMapper->thawProperties($object, $identifier, $objectData);
if ($modelType === ClassSchema::MODELTYPE_ENTITY) {
$persistenceSession->registerReconstitutedEntity($object, $objectData);
}
};
} else {
$this->thawProperties($object, $objectData['identifier'], $objectData);
}
return $object;
}
}