/**
  * Constructs the Property Mapper.
  */
 public function __construct()
 {
     // TODO Clean up this dependencies; inject the instance
     $objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_Manager');
     $this->validatorResolver = t3lib_div::makeInstance('Tx_Extbase_Validation_ValidatorResolver');
     $this->validatorResolver->injectObjectManager($objectManager);
     $this->persistenceManager = Tx_Extbase_Dispatcher::getPersistenceManager();
     $this->queryFactory = t3lib_div::makeInstance('Tx_Extbase_Persistence_QueryFactory');
 }
 /**
  * Constructs a new Repository
  *
  */
 public function __construct()
 {
     $this->identityMap = t3lib_div::makeInstance('Tx_Extbase_Persistence_IdentityMap');
     $this->addedObjects = new Tx_Extbase_Persistence_ObjectStorage();
     $this->removedObjects = new Tx_Extbase_Persistence_ObjectStorage();
     $this->queryFactory = t3lib_div::makeInstance('Tx_Extbase_Persistence_QueryFactory');
     // singleton
     $this->persistenceManager = Tx_Extbase_Dispatcher::getPersistenceManager();
     $this->persistenceManager->registerRepositoryClassName($this->getRepositoryClassName());
     $this->objectType = str_replace(array('_Repository_', 'Repository'), array('_Model_', ''), $this->getRepositoryClassName());
 }
 /**
  * Populate this proxy by asking the $population closure.
  *
  * @return object The instance (hopefully) returned
  */
 public function _loadRealInstance()
 {
     // this check safeguards against a proxy being activated multiple times
     // usually that does not happen, but if the proxy is held from outside
     // it's parent... the result would be weird.
     if ($this->parentObject->_getProperty($this->propertyName) instanceof Tx_Extbase_Persistence_LazyLoadingProxy) {
         $dataMapper = Tx_Extbase_Dispatcher::getPersistenceManager()->getBackend()->getDataMapper();
         $objects = $dataMapper->fetchRelated($this->parentObject, $this->propertyName, $this->fieldValue, FALSE, FALSE);
         $propertyValue = $dataMapper->mapResultToPropertyValue($this->parentObject, $this->propertyName, $objects);
         $this->parentObject->_setProperty($this->propertyName, $propertyValue);
         $this->parentObject->_memorizeCleanState($this->propertyName);
         return $propertyValue;
     } else {
         return $this->parentObject->_getProperty($this->propertyName);
     }
 }
 /**
  * Creates a query object working on the given class name
  *
  * @param string $className The class name
  * @return Tx_Extbase_Persistence_QueryInterface
  */
 public function create($className)
 {
     $persistenceManager = Tx_Extbase_Dispatcher::getPersistenceManager();
     $reflectionService = $persistenceManager->getBackend()->getReflectionService();
     $dataMapFactory = t3lib_div::makeInstance('Tx_Extbase_Persistence_Mapper_DataMapFactory');
     $dataMapFactory->injectReflectionService($reflectionService);
     $dataMapper = t3lib_div::makeInstance('Tx_Extbase_Persistence_Mapper_DataMapper');
     $dataMapper->injectIdentityMap($persistenceManager->getBackend()->getIdentityMap());
     $dataMapper->injectSession($persistenceManager->getSession());
     $dataMapper->injectReflectionService($reflectionService);
     $dataMapper->injectDataMapFactory($dataMapFactory);
     $querySettings = t3lib_div::makeInstance('Tx_Extbase_Persistence_Typo3QuerySettings');
     $query = t3lib_div::makeInstance('Tx_Extbase_Persistence_Query', $className);
     $query->injectPersistenceManager($persistenceManager);
     $query->injectDataMapper($dataMapper);
     $query->setQuerySettings($querySettings);
     return $query;
 }
 /**
  * Initializes objects this class depends on
  *
  * @return void
  */
 protected function initializeObjects()
 {
     $this->objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_Manager');
     $this->arguments = t3lib_div::makeInstance('Tx_Extbase_MVC_Controller_Arguments');
     $this->arguments->injectPersistenceManager(Tx_Extbase_Dispatcher::getPersistenceManager());
     $this->arguments->injectQueryFactory(t3lib_div::makeInstance('Tx_Extbase_Persistence_QueryFactory'));
 }
 /**
  * Counts the elements in the storage array
  *
  * @return int The number of elements in the ObjectStorage
  */
 public function count()
 {
     $dataMapper = Tx_Extbase_Dispatcher::getPersistenceManager()->getBackend()->getDataMapper();
     $columnMap = $dataMapper->getDataMap(get_class($this->parentObject))->getColumnMap($this->propertyName);
     $numberOfElements = NULL;
     if ($columnMap->getTypeOfRelation() === Tx_Extbase_Persistence_Mapper_ColumnMap::RELATION_HAS_MANY) {
         $numberOfElements = $dataMapper->countRelated($this->parentObject, $this->propertyName, $this->fieldValue);
     } else {
         $this->initialize();
         $numberOfElements = count($this->storage);
     }
     if (is_null($numberOfElements)) {
         throw new Tx_Extbase_Persistence_Exception('The number of elements could not be determined.', 1252514486);
     }
     return $numberOfElements;
 }