/**
  * @param string $backendId
  * @param string $privateUri
  * @param string $userId
  * @return null|ICalendar
  */
 protected function getCached($backendId, $privateUri, $userId)
 {
     try {
         return $this->cache->findByPrivateUri($backendId, $privateUri, $userId);
     } catch (DoesNotExistMapperException $ex) {
         return null;
     } catch (MultipleObjectsReturnedMapperException $ex) {
         //$this->logger->warn($msg); TODO
         return null;
     }
 }
 /**
  * was a calendar updated?
  * @param string $backendId
  * @param string $privateUri
  * @param string $userId
  * @return boolean
  */
 public function checkUpdate($backendId, $privateUri, $userId)
 {
     if ($this->watchPolicy === self::CHECK_ALWAYS || $this->watchPolicy === self::CHECK_ONCE && !$this->wasCalendarChecked($backendId, $privateUri, $userId)) {
         $backend = $this->backends->find($backendId);
         if (!$backend instanceof IBackend) {
             return false;
         }
         $cachedCalendar = $this->cache->findByPrivateUri($backendId, $privateUri, $userId);
         $this->setCheckedCalendar($backendId, $privateUri, $userId);
         $calendarAPI = $backend->getCalendarAPI();
         if ($calendarAPI->hasUpdated($cachedCalendar)) {
             $objectScanner = $backend->getObjectScanner($cachedCalendar);
             $objectScanner->scan();
             $this->scanner->scanCalendar($backendId, $privateUri, $userId);
             return true;
         }
         return false;
     } else {
         return false;
     }
 }