/** * Retrieves the Location value from the response headers * * @return Location * @throws \Basho\Riak\Command\Exception */ public function getLocation() { return Location::fromString($this->getHeader('Location')); }
protected function parseResponse() { // trim leading / trailing whitespace $body = $this->responseBody; $location = null; if ($this->getResponseHeader('Location')) { $location = Location::fromString($this->getResponseHeader('Location')); } if ($this->statusCode == 500) { $this->success = false; $this->error = $body; } switch (get_class($this->command)) { case 'Basho\\Riak\\Command\\Bucket\\Store': case 'Basho\\Riak\\Command\\Bucket\\Fetch': $bucket = null; $modified = $this->getResponseHeader(static::LAST_MODIFIED_KEY, ''); $properties = json_decode($body, true); if (isset($properties['props']) && $this->command->getBucket()) { $bucket = new Bucket($this->command->getBucket()->getName(), $this->command->getBucket()->getType(), $properties['props']); } $response = new Command\Bucket\Response($this->success, $this->statusCode, $this->error, $bucket, $modified); break; case 'Basho\\Riak\\Command\\Object\\Fetch': case 'Basho\\Riak\\Command\\Object\\Store': /** @var Command\Object $command */ $command = $this->command; $objects = (new Api\Http\Translator\ObjectResponse($command, $this->statusCode))->parseResponse($body, $this->responseHeaders); $response = new Command\Object\Response($this->success, $this->statusCode, $this->error, $location, $objects); break; case 'Basho\\Riak\\Command\\Object\\FetchPreflist': $response = new Command\Object\Response($this->success, $this->statusCode, $this->error, $location, [new Object(json_decode($body))]); break; case 'Basho\\Riak\\Command\\DataType\\Counter\\Store': case 'Basho\\Riak\\Command\\DataType\\Counter\\Fetch': $counter = null; $json_object = json_decode($body); if ($json_object && isset($json_object->value)) { $counter = new Counter($json_object->value); } $response = new Command\DataType\Counter\Response($this->success, $this->statusCode, $this->error, $location, $counter, $this->getResponseHeader('Date')); break; case 'Basho\\Riak\\Command\\DataType\\Set\\Store': case 'Basho\\Riak\\Command\\DataType\\Set\\Fetch': $set = null; $json_object = json_decode($body); if ($json_object && isset($json_object->value)) { $set = new Set($json_object->value, $json_object->context); } $response = new Command\DataType\Set\Response($this->success, $this->statusCode, $this->error, $location, $set, $this->getResponseHeader('Date')); break; case 'Basho\\Riak\\Command\\DataType\\Map\\Store': case 'Basho\\Riak\\Command\\DataType\\Map\\Fetch': $map = null; $json_object = json_decode($body, true); if ($json_object && isset($json_object['value'])) { $map = new Map($json_object['value'], $json_object['context']); } $response = new Command\DataType\Map\Response($this->success, $this->statusCode, $this->error, $location, $map, $this->getResponseHeader('Date')); break; case 'Basho\\Riak\\Command\\DataType\\Hll\\Store': case 'Basho\\Riak\\Command\\DataType\\Hll\\Fetch': $hll = null; $json_object = json_decode($body); if ($json_object && isset($json_object->value)) { $hll = new Hll($json_object->value); } $response = new Command\DataType\Hll\Response($this->success, $this->statusCode, $this->error, $location, $hll, $this->getResponseHeader('Date')); break; case 'Basho\\Riak\\Command\\Search\\Fetch': $results = in_array($this->statusCode, [200, 204]) ? json_decode($body) : null; $docs = []; if (!empty($results->response->docs)) { foreach ($results->response->docs as $doc) { $docs[] = new Doc($doc); } } $numFound = !empty($results->response->numFound) ? $results->response->numFound : 0; $response = new Command\Search\Response($this->success, $this->statusCode, $this->error, $numFound, $docs); break; case 'Basho\\Riak\\Command\\Search\\Index\\Store': case 'Basho\\Riak\\Command\\Search\\Index\\Fetch': $index = json_decode($body); $response = new Command\Search\Index\Response($this->success, $this->statusCode, $this->error, $index); break; case 'Basho\\Riak\\Command\\Search\\Schema\\Store': case 'Basho\\Riak\\Command\\Search\\Schema\\Fetch': $response = new Command\Search\Schema\Response($this->success, $this->statusCode, $this->error, $body, $this->getResponseHeader(static::CONTENT_TYPE_KEY)); break; case 'Basho\\Riak\\Command\\MapReduce\\Fetch': $results = in_array($this->statusCode, [200, 204]) ? json_decode($body) : null; $response = new Command\MapReduce\Response($this->success, $this->statusCode, $this->error, $results); break; case 'Basho\\Riak\\Command\\Indexes\\Query': $json_object = in_array($this->statusCode, [200, 204]) ? json_decode($body, true) : null; $results = []; $termsReturned = false; $continuation = null; $done = true; if (isset($json_object['keys'])) { $results = $json_object['keys']; } if (isset($json_object['results'])) { $results = $json_object['results']; $termsReturned = true; } if (isset($json_object['continuation'])) { $continuation = $json_object['continuation']; $done = false; } $response = new Command\Indexes\Response($this->success, $this->statusCode, $this->error, $results, $termsReturned, $continuation, $done, $this->getResponseHeader('Date')); break; case 'Basho\\Riak\\Command\\Stats': $response = new Command\Stats\Response($this->success, $this->statusCode, $this->error, json_decode($body, true)); break; case 'Basho\\Riak\\Command\\TimeSeries\\Fetch': $row = in_array($this->statusCode, ['200', '201', '204']) ? json_decode($body, true) : []; $response = new Command\TimeSeries\Response($this->success, $this->statusCode, $this->error, [$row]); break; case 'Basho\\Riak\\Command\\TimeSeries\\Query\\Fetch': $results = in_array($this->statusCode, ['200', '204']) ? json_decode($body) : []; $rows = []; if (isset($results->rows)) { foreach ($results->rows as $row) { $cells = []; foreach ($results->columns as $index => $column) { $cells[$column] = $row[$index]; } $rows[] = $cells; } } $response = new Command\TimeSeries\Query\Response($this->success, $this->statusCode, $this->error, $rows); break; case 'Basho\\Riak\\Command\\TimeSeries\\Store': case 'Basho\\Riak\\Command\\TimeSeries\\Delete': case 'Basho\\Riak\\Command\\Object\\Delete': case 'Basho\\Riak\\Command\\Bucket\\Delete': case 'Basho\\Riak\\Command\\Search\\Index\\Delete': case 'Basho\\Riak\\Command\\Ping': default: $response = new Command\Response($this->success, $this->statusCode, $this->error); break; } $this->response = $response; }