Open Data Catalog v2.0.0
WebServiceApi.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Drupal\dkan_datastore;
4 
5 use Symfony\Component\DependencyInjection\ContainerInterface;
6 use Symfony\Component\HttpFoundation\RequestStack;
7 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
8 use Drupal\dkan_common\JsonResponseTrait;
9 
17 class WebServiceApi implements ContainerInjectionInterface {
18  use JsonResponseTrait;
19 
25  protected $datastoreService;
26 
32  private $requestStack;
33 
37  public function __construct(Service $datastoreService, RequestStack $requestStack) {
38  $this->datastoreService = $datastoreService;
39  $this->requestStack = $requestStack;
40  }
41 
45  public static function create(ContainerInterface $container) {
46  $datastoreService = $container->get('dkan_datastore.service');
47  $requestStack = $container->get('request_stack');
48  return new WebServiceApi($datastoreService, $requestStack);
49  }
50 
60  public function summary($identifier) {
61  try {
62  $storage = $this->datastoreService->getStorage($identifier);
63  if ($storage) {
64  $data = $storage->getSummary();
65  return $this->getResponse($data);
66  }
67  throw new \Exception("no storage");
68  }
69  catch (\Exception $e) {
70  $exception = new \Exception("A datastore for resource {$identifier} does not exist.");
71  return $this->getResponseFromException($exception, 404);
72  }
73  }
74 
78  public function import() {
79 
80  $payloadJson = $this->requestStack->getCurrentRequest()->getContent();
81  $payload = json_decode($payloadJson);
82 
83  if (isset($payload->resource_ids)) {
84  return $this->importMultiple($payload->resource_ids);
85  }
86 
87  if (!isset($payload->resource_id)) {
88  return $this->getResponseFromException(new \Exception("Invalid payload."));
89  }
90 
91  try {
92  $results = $this->datastoreService->import($payload->resource_id, FALSE);
93  return $this->getResponse($results);
94  }
95  catch (\Exception $e) {
96  return $this->getResponseFromException($e);
97  }
98  }
99 
103  private function importMultiple(array $resourceIds) {
104 
105  $responses = [];
106  foreach ($resourceIds as $identifier) {
107  try {
108  $results = $this->datastoreService->import($identifier, TRUE);
109  $responses[$identifier] = $results;
110  }
111  catch (\Exception $e) {
112  $responses[$identifier] = $e->getMessage();
113  }
114  }
115 
116  return $this->getResponse($responses);
117  }
118 
125  public function delete($identifier) {
126  try {
127  $this->datastoreService->drop($identifier);
128  return $this->getResponse(
129  [
130  "identifier" => $identifier,
131  "message" => "The datastore for resource {$identifier} was succesfully dropped.",
132  ]
133  );
134  }
135  catch (\Exception $e) {
136  return $this->getResponseFromException($e);
137  }
138  }
139 
146  public function deleteMultiple() {
147  $payloadJson = $this->requestStack->getCurrentRequest()->getContent();
148  $payload = json_decode($payloadJson);
149 
150  if (!isset($payload->resource_ids)) {
151  return $this->getResponseFromException(new \Exception("Invalid payload."));
152  }
153 
154  $identifiers = $payload->resource_ids;
155 
156  $responses = [];
157  foreach ($identifiers as $identifier) {
158  $responses[$identifier] = json_decode($this->delete($identifier)->getContent());
159  }
160 
161  return $this->getResponse($responses);
162  }
163 
170  public function list() {
171  try {
172  $data = $this->datastoreService->list();
173  return $this->getResponse($data);
174  }
175  catch (\Exception $e) {
176  return $this->getResponseFromException(
177  new \Exception("No importer data was returned. {$e->getMessage()}"),
178  404
179  );
180  }
181  }
182 
183 }
Drupal\dkan_datastore\WebServiceApi\summary
summary($identifier)
Definition: WebServiceApi.php:60
Drupal\dkan_datastore
Definition: DataNodeLifeCycle.php:3
Drupal\dkan_datastore\WebServiceApi\list
list()
Definition: WebServiceApi.php:170
Drupal\dkan_datastore\WebServiceApi\create
static create(ContainerInterface $container)
Definition: WebServiceApi.php:45
Drupal\dkan_datastore\Service
Definition: Service.php:17
Drupal\dkan_datastore\WebServiceApi
Definition: WebServiceApi.php:17
Drupal\dkan_datastore\WebServiceApi\deleteMultiple
deleteMultiple()
Definition: WebServiceApi.php:146
Drupal\dkan_datastore\WebServiceApi\$datastoreService
$datastoreService
Definition: WebServiceApi.php:25
Drupal\dkan_datastore\WebServiceApi\__construct
__construct(Service $datastoreService, RequestStack $requestStack)
Definition: WebServiceApi.php:37