public function parse(array $data, ParsingDispatcher $parsingDispatcher)
{
$viewData = [];
// identifier
if (!array_key_exists('identifier', $data)) {
throw new Exceptions\Parser('Missing identifier attribute for ViewInput.');
}
$viewData['identifier'] = $data['identifier'];
// query
if (array_key_exists('ContentQuery', $data) && is_array($data['ContentQuery'])) {
$viewData['query'] = $parsingDispatcher->parse($data['Query'], 'application/vnd.ez.api.internal.ContentQuery');
} elseif (array_key_exists('LocationQuery', $data) && is_array($data['LocationQuery'])) {
$viewData['query'] = $parsingDispatcher->parse($data['LocationQuery'], 'application/vnd.ez.api.internal.LocationQuery');
} elseif (array_key_exists('Query', $data) && is_array($data['Query'])) {
$viewData['query'] = $parsingDispatcher->parse($data['Query'], 'application/vnd.ez.api.internal.ContentQuery');
} else {
throw new Exceptions\Parser('Missing or invalid LocationQuery or ContentQuery attribute for View.');
}
// results
$viewData['result'] = $parsingDispatcher->parse($data['Result'], $data['Result']['_media-type']);
return new ViewValue($viewData);
}