/**
  * @param Log $childLog
  */
 public function setChildLog(Log $childLog = null)
 {
     $this->childLog = $childLog;
     if ($childLog == null) {
         $this->setChildClass(null);
         $this->setChildId(null);
         $this->setLoggedAt();
     } else {
         $this->setChildClass($childLog->getObjectClass());
         $this->setChildId($childLog->getObjectId());
         $this->loggedAt = $childLog->getLoggedAt();
     }
 }
 /**
  * Revert a Entity identified by specific $log
  * @param Log  $log
  * @param bool $deleteHistory if true, the revert will also delete all log entries since the reverted one
  * @param bool $logRevert if logRevert is true, the revert will be logged
  * @return object
  * @throws \Doctrine\ORM\ORMException
  * @throws \Doctrine\ORM\OptimisticLockException
  * @throws \Doctrine\ORM\TransactionRequiredException
  * @throws \Exception
  */
 public function revertTo(Log $log, $deleteHistory = true, $logRevert = false)
 {
     $softconfig = $this->getSoftDeletableListener()->getConfiguration($this->_em, $log->getObjectClass());
     if (sizeof($softconfig) == 0) {
         throw new \Exception('use softdeleteable Filter');
     }
     $this->_em->getFilters()->disable('softdeleteable');
     $entity = $this->_em->find($log->getObjectClass(), $log->getObjectId());
     $this->_em->getFilters()->enable('softdeleteable');
     $wrapped = new EntityWrapper($entity, $this->_em);
     $this->revertBy($log->getObjectId(), $log->getObjectClass(), $log->getVersion(), $wrapped, $softconfig['fieldName'], $deleteHistory, $logRevert);
     return $wrapped->getObject();
 }
 /**
  * @param LoggableAdapter $ea
  * @param Log             $logEntry
  * @param                 $object
  * @param                 $message
  * @return LogParent
  */
 protected function addLogParent(LoggableAdapter $ea, Log $logEntry, $object, $message, $childObject, $fieldName)
 {
     $om = $ea->getObjectManager();
     $parentLogEntry = new LogParent();
     $parentLogEntry->setAction($message);
     $parentLogEntry->setUsername($this->username);
     $parentLogEntry->setSourceUsername($this->sourceUsername);
     $wrappedParent = AbstractWrapper::wrap($object, $om);
     $parentLogEntry->setObjectClass($wrappedParent->getMetadata()->name);
     $parentLogEntry->setObjectId($wrappedParent->getIdentifier());
     $parentLogEntry->setFieldName($fieldName);
     $logEntry->addParent($parentLogEntry);
     $this->pendingParents[spl_object_hash($object)][] = array('log' => $parentLogEntry, 'field' => 'objectId');
     $this->pendingParents[spl_object_hash($childObject)][] = array('log' => $parentLogEntry, 'field' => 'childId');
     return $parentLogEntry;
 }