6 use Symfony\Component\DependencyInjection\ContainerInterface;
7 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
8 use Drupal\Core\Queue\QueueFactory;
12 use Dkan\Datastore\Importer;
17 class Service implements ContainerInjectionInterface {
19 private $resourceServiceFactory;
20 private $importServiceFactory;
22 private $jobStoreFactory;
29 public static function create(ContainerInterface $container) {
31 $container->get(
'dkan_datastore.service.factory.resource'),
32 $container->get(
'dkan_datastore.service.factory.import'),
33 $container->get(
'queue'),
34 $container->get(
'dkan_datastore.job_store_factory')
42 $this->queue = $queue->get(
'dkan_datastore_import');
43 $this->resourceServiceFactory = $resourceServiceFactory;
44 $this->importServiceFactory = $importServiceFactory;
45 $this->jobStoreFactory = $jobStoreFactory;
56 public function import(
string $uuid,
bool $deferred = FALSE): array {
58 $resourceService = $this->resourceServiceFactory->
getInstance($uuid);
61 if (!empty($deferred)) {
63 $resourceService->get(TRUE, FALSE);
64 $queueId = $this->queueImport($uuid);
66 'message' =>
"Resource {$uuid} has been queued to be imported.",
67 'queue_id' => $queueId,
72 $resource = $resourceService->get(TRUE);
74 $name = substr(strrchr(get_class($resourceService),
"\\"), 1);
75 return [$name => $resourceService->getResult()];
78 $importService = $this->importServiceFactory->getInstance($resource->getId(), [
'resource' => $resource]);
79 $importService->import();
81 $rname = substr(strrchr(get_class($resourceService),
"\\"), 1);
82 $iname = substr(strrchr(get_class($importService),
"\\"), 1);
85 $rname => $resourceService->getResult(),
86 $iname => $importService->getResult(),
97 public function drop($uuid) {
104 $resourceService = $this->resourceServiceFactory->getInstance($uuid);
105 $resourceService->remove();
108 $resource = $resourceService->get();
109 $this->jobStoreFactory->getInstance(Importer::class)->remove($resource->getId());
122 private function queueImport($uuid) {
124 $queueId = $this->queue->createItem([
'uuid' => $uuid]);
126 if ($queueId === FALSE) {
127 throw new \RuntimeException(
"Failed to create file fetcher queue for {$uuid}");
140 return ImporterList::getList($this->jobStoreFactory, $this->resourceServiceFactory, $this->importServiceFactory);
150 $resourceService = $this->resourceServiceFactory->getInstance($uuid);
153 $resource = $resourceService->get();
155 $importService = $this->importServiceFactory->getInstance($resource->getId(),
156 [
'resource' => $resource]);
157 return $importService->getStorage();