public function testDeepCloneTriplesFile() { /** @var \core_kernel_versioning_Repository $repository */ $repository = \tao_models_classes_FileSourceService::singleton()->addLocalSource("repository test", \tao_helpers_File::createTempDir()); //see if clone item content works /** @var \core_kernel_versioning_File $file */ $file = $repository->spawnFile(__DIR__ . '/sample/test.xml', "test", function ($originalName) { return md5($originalName); }); //see if clone file works $rdfsTriple = new \core_kernel_classes_Triple(); $rdfsTriple->predicate = "http://www.w3.org/1999/02/22-rdf-syntax-ns#value"; $rdfsTriple->object = $file->getUri(); $return = CloneHelper::deepCloneTriples(array($rdfsTriple)); $this->assertCount(1, $return); $this->assertEquals($rdfsTriple->predicate, $return[0]->predicate); $this->assertNotEquals($rdfsTriple->object, $return[0]->object); $fileCopy = new \core_kernel_file_File($return[0]->object); $this->assertFileExists($fileCopy->getAbsolutePath()); $this->assertEquals($file->getLabel(), $fileCopy->getLabel()); $this->assertNotEquals($file->getAbsolutePath(), $fileCopy->getAbsolutePath()); $file->delete(true); $fileCopy->delete(true); $repository->delete(true); }
public function testDeepCloneTriplesFile() { $this->assertFileExists(__DIR__ . '/sample/test.xml'); $dir = $this->getTempDirectory(); $file = $dir->getFile('/sample/test.xml'); $file->put(file_get_contents(__DIR__ . '/sample/test.xml')); /** @var FileReferenceSerializer $serializer */ $serializer = ServiceManager::getServiceManager()->get(FileReferenceSerializer::SERVICE_ID); $fileUri = $serializer->serialize($file); //see if clone file works $rdfsTriple = new \core_kernel_classes_Triple(); $rdfsTriple->predicate = "http://www.w3.org/1999/02/22-rdf-syntax-ns#value"; $rdfsTriple->object = $fileUri; $return = CloneHelper::deepCloneTriples([$rdfsTriple]); $this->assertCount(1, $return); $this->assertEquals($rdfsTriple->predicate, $return[0]->predicate); $this->assertNotEquals($rdfsTriple->object, $return[0]->object); /** @var File $fileCopy */ $fileCopy = $serializer->unserialize($return[0]->object); $this->assertTrue($fileCopy->exists()); $this->assertEquals($file->getSize(), $fileCopy->getSize()); $this->assertNotEquals($file->getPrefix(), $fileCopy->getPrefix()); $file->delete(true); $fileCopy->delete(true); }
/** * (non-PHPdoc) * @see \oat\taoRevision\model\Repository::restore() */ public function restore(Revision $revision) { $resourceId = $revision->getResourceId(); $data = $this->getStorage()->getData($revision); $resource = new \core_kernel_classes_Resource($resourceId); $originFilesystemMap = CloneHelper::getPropertyStorageMap($resource->getRdfTriples()); DeleteHelper::deepDelete($resource); foreach (CloneHelper::deepCloneTriples($data, $originFilesystemMap) as $triple) { ModelManager::getModel()->getRdfInterface()->add($triple); } return true; }
protected function deepClone(core_kernel_classes_Resource $source) { $clonedTriples = CloneHelper::deepCloneTriples($source->getRdfTriples()); $newUri = common_Utils::getNewUri(); $wsModel = $this->getWorkspaceModel(); $rdfInterface = $wsModel->getRdfInterface(); foreach ($clonedTriples as $triple) { $triple->subject = $newUri; $triple->modelid = $wsModel->getNewTripleModelId(); $rdfInterface->add($triple); } return new core_kernel_classes_Resource($newUri); }