public function saveRecord(Record $record, DataDimensions $dataDimensions = null)
 {
     if (!$dataDimensions) {
         $dataDimensions = $this->getCurrentDataDimensions();
     }
     if ($record->getID() == '') {
         $record->setId($this->getNextId($record->getContentTypeName(), $dataDimensions));
         $record->setRevision(1);
         $toBeSavedRecord = $record;
     } else {
         $mergedRecord = $this->mergeExistingRecord($record, $dataDimensions);
         $mergedRecord->setRevision($mergedRecord->getRevision() + 1);
         $record->setRevision($mergedRecord->getRevision());
         $toBeSavedRecord = $mergedRecord;
     }
     $toBeSavedRecord->setLastChangeUserInfo($this->userInfo);
     $record->setLastChangeUserInfo($this->userInfo);
     $filename = $this->getConfiguration()->getFolderNameRecords($toBeSavedRecord->getContentTypeName(), $dataDimensions);
     $filename .= '/' . $toBeSavedRecord->getID() . '.json';
     $data = json_encode($toBeSavedRecord, JSON_PRETTY_PRINT);
     $this->stashRecord($toBeSavedRecord, $dataDimensions);
     if (!$this->writeData($filename, $data)) {
         throw new AnyContentClientException('Error when saving record of content type ' . $record->getContentTypeName());
     }
     return $toBeSavedRecord->getID();
 }
 protected function mergeExistingRecord(Record $record, DataDimensions $dataDimensions)
 {
     if ($record->getID() != '') {
         $existingRecord = $this->getMultiViewRecord($record->getId(), $record->getContentTypeName(), $dataDimensions);
         if ($existingRecord) {
             $record->setRevision($existingRecord->getRevision());
             $existingProperties = $existingRecord->getProperties();
             $mergedProperties = array_merge($existingProperties, $record->getProperties());
             $mergedRecord = clone $record;
             $mergedRecord->setProperties($mergedProperties);
             return $mergedRecord;
         }
     }
     return $record;
 }
 protected function getDeleteLink(Record $record)
 {
     return $this->getUrlGenerator()->generate('deleteRecord', array('contentTypeAccessHash' => $this->getContext()->getCurrentContentTypeAccessHash(), 'recordId' => $record->getID(), 'workspace' => $this->getContext()->getCurrentWorkspace(), 'language' => $this->getContext()->getCurrentLanguage()));
 }
 protected function gotNewerRevision(Repository $repository, Record $record)
 {
     if ($record->getID() != null && $record->getRevision() != null) {
         $records = $this->getRecords($repository);
         if (isset($records[$record->getID()])) {
             /** @var Record $effectiveRecord */
             $effectiveRecord = $records[$record->getID()];
             if ($effectiveRecord->getRevision() > $record->getRevision()) {
                 return true;
             }
         }
     }
     return false;
 }