/**
  * @param ICalendar &$calendar
  * @param callable $doesExist
  * @param boolean $isPublicUri
  */
 public static function generateURI(ICalendar &$calendar, \closure $doesExist, $isPublicUri = true)
 {
     if ($isPublicUri === true) {
         $uri = $calendar->getPublicUri();
     } else {
         $uri = $calendar->getPrivateUri();
     }
     if ($uri === null) {
         $uri = mb_strtolower($calendar->getDisplayname());
     }
     $uri = CalendarUtility::slugify($uri);
     while ($doesExist($uri)) {
         $newUri = self::suggestUri($uri);
         if ($newUri === $uri) {
             break;
         }
         $uri = $newUri;
     }
     if ($isPublicUri) {
         $calendar->setPublicUri($uri);
     } else {
         $calendar->setPrivateUri($uri);
     }
 }
 /**
  * Make sure either a publicUri or a displayname are set
  * @param \OCA\Calendar\ICalendar $calendar
  * @throws \OCA\Calendar\BusinessLayer\Exception
  */
 private function checkUriOrDisplaynameExists(ICalendar $calendar)
 {
     $displayname = $calendar->getDisplayname();
     if (($displayname === null || trim($displayname) === '') && $calendar->getPublicUri() === null) {
         throw new Exception('Please enter a calendar-name', Http::STATUS_UNPROCESSABLE_ENTITY);
     }
 }
 /**
  * @param ICalendar $calendar
  * @return array
  */
 private function getCalendarSqlParams(ICalendar $calendar)
 {
     return [$calendar->getUserId(), $calendar->getDisplayname(), $calendar->getPrivateUri(), $calendar->getEnabled(), $calendar->getCtag(), $calendar->getOrder(), $calendar->getColor(), $this->getTypes($calendar->getComponents(), 'string')];
 }
 /**
  * @param IBackend $backend
  * @param ICalendar $calendar
  * @param ICalendar $cachedCalendar
  * @return ICalendar
  */
 protected function resetUnsupportedProperties(IBackend $backend, ICalendar $calendar, ICalendar $cachedCalendar)
 {
     $backendAPI = $backend->getBackendAPI();
     if (!$backendAPI->canStoreColor()) {
         $calendar->setColor($cachedCalendar->getColor());
     }
     if (!$backendAPI->canStoreComponents()) {
         $calendar->setComponents($cachedCalendar->getComponents());
     }
     if (!$backendAPI->canStoreDescription()) {
         $calendar->setDescription($cachedCalendar->getDescription());
     }
     if (!$backendAPI->canStoreDisplayname()) {
         $calendar->setDisplayname($cachedCalendar->getDisplayname());
     }
     if (!$backendAPI->canStoreEnabled()) {
         $calendar->setEnabled($cachedCalendar->getEnabled());
     }
     if (!$backendAPI->canStoreOrder()) {
         $calendar->setOrder($cachedCalendar->getOrder());
     }
     return $calendar;
 }