public function provider() { $v1 = Version::v1(); $v2 = Version::v2(); $v3 = Version::v3(); return array(array(101, TargetKind::METADATA(), $v1, null, null, MimeTypes::MIME_APPLICATION_XML), array(102, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(103, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(104, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(105, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(106, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(108, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(109, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(110, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(111, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(112, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(113, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(114, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(115, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(116, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(124, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(125, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(126, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(201, TargetKind::SERVICE_DIRECTORY(), $v1, null, null, MimeTypes::MIME_APPLICATION_XML), array(202, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOMSERVICE, null, MimeTypes::MIME_APPLICATION_ATOMSERVICE), array(203, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(204, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(205, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON), array(206, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON), array(207, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(208, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(209, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(210, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(211, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(212, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(213, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(214, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(215, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(216, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(224, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(225, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(226, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(400, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(401, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(402, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(403, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(404, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(405, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(406, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(407, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(408, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(409, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(418, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(419, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(420, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(421, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(422, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(423, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(424, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(425, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(426, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(434, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(435, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(436, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(500, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(501, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(502, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(503, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(504, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(505, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(506, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(507, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(508, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(509, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(518, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(519, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(520, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(521, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(522, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(523, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(524, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(525, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(526, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(534, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(535, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(536, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(600, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(601, TargetKind::BAG(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(602, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(603, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(604, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(605, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(606, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(607, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(608, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(609, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(618, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(619, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(620, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(621, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(622, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(623, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(624, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(625, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(626, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(634, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(635, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(636, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(700, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(701, TargetKind::LINK(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(702, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(703, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(704, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(705, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(706, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(707, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(708, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(709, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(718, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(719, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(720, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(721, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(722, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(723, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(724, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(725, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(726, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(734, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(735, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(736, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(800, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, MimeTypes::MIME_APPLICATION_ATOM), array(802, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(803, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, null, null), array(804, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(805, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(806, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(807, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(808, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(809, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(818, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(819, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(820, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(821, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(822, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(823, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(824, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(825, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(826, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(834, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(835, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(836, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); }
/** * Gets the response format for the requested resource. * * @param RequestDescription $request The request submitted by client and it's execution result. * @param UriProcessor $uriProcessor The reference to the UriProcessor. * @param IService $service Reference to the service implementation instance * * @return string the response content-type, a null value means the requested resource * is named stream and IDSSP2::getStreamContentType returned null * * @throws ODataException, HttpHeaderFailure */ public static function getResponseContentType(RequestDescription $request, UriProcessor $uriProcessor, IService $service) { // The Accept request-header field specifies media types which are acceptable for the response $host = $service->getHost(); $requestAcceptText = $host->getRequestAccept(); $requestVersion = $request->getResponseVersion(); //if the $format header is present it overrides the accepts header $format = $host->getQueryStringItem(ODataConstants::HTTPQUERY_STRING_FORMAT); if (!is_null($format)) { //There's a strange edge case..if application/json is supplied and it's V3 if ($format == MimeTypes::MIME_APPLICATION_JSON && $requestVersion == Version::v3()) { //then it's actual minimalmetadata //TODO: should this be done with the header text too? $format = MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META; } $requestAcceptText = ServiceHost::translateFormatToMime($requestVersion, $format); } //The response format can be dictated by the target resource kind. IE a $value will be different then expected //getTargetKind doesn't deal with link resources directly and this can change things $targetKind = $request->isLinkUri() ? TargetKind::LINK() : $request->getTargetKind(); switch ($targetKind) { case TargetKind::METADATA(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML)); case TargetKind::SERVICE_DIRECTORY(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML, MimeTypes::MIME_APPLICATION_ATOMSERVICE, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::PRIMITIVE_VALUE(): $supportedResponseMimeTypes = array(MimeTypes::MIME_TEXTPLAIN); if ($request->getIdentifier() != '$count') { $projectedProperty = $request->getProjectedProperty(); self::assert(!is_null($projectedProperty), '!is_null($projectedProperty)'); $type = $projectedProperty->getInstanceType(); self::assert(!is_null($type) && $type instanceof IType, '!is_null($type) && $type instanceof IType'); if ($type instanceof Binary) { $supportedResponseMimeTypes = array(MimeTypes::MIME_APPLICATION_OCTETSTREAM); } } return HttpProcessUtility::selectMimeType($requestAcceptText, $supportedResponseMimeTypes); case TargetKind::PRIMITIVE(): case TargetKind::COMPLEX_OBJECT(): case TargetKind::BAG(): case TargetKind::LINK(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML, MimeTypes::MIME_TEXTXML, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::RESOURCE(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::MEDIA_RESOURCE(): if (!$request->isNamedStream() && !$request->getTargetResourceType()->isMediaLinkEntry()) { throw ODataException::createBadRequestError(Messages::badRequestInvalidUriForMediaResource($host->getAbsoluteRequestUri()->getUrlAsString())); } $uriProcessor->execute(); $request->setExecuted(); // DSSW::getStreamContentType can throw error in 2 cases // 1. If the required stream implementation not found // 2. If IDSSP::getStreamContentType returns NULL for MLE $responseContentType = $service->getStreamProviderWrapper()->getStreamContentType($request->getTargetResult(), $request->getResourceStreamInfo()); // Note StreamWrapper::getStreamContentType can return NULL if the requested named stream has not // yet been uploaded. But for an MLE if IDSSP::getStreamContentType returns NULL then StreamWrapper will throw error if (!is_null($responseContentType)) { $responseContentType = HttpProcessUtility::selectMimeType($requestAcceptText, array($responseContentType)); } return $responseContentType; } //If we got here, we just don't know what it is... throw new ODataException(Messages::unsupportedMediaType(), 415); }
/** * To check if the resource path is a request for link uri. * * @return boolean True if request is for link uri else false. */ public function isLinkUri() { return $this->_segmentCount > 2 && $this->segments[$this->_segmentCount - 2]->getTargetKind() == TargetKind::LINK(); }
public function testCreateSegments_LinksSegment() { //test $links as last segment $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links'); try { SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->fail('An expected ODataException missing segment after $links segment has not been thrown'); } catch (ODataException $exception) { $this->assertStringEndsWith('must a segment specified after the \'$links\' segment and the segment must refer to a entity resource.', $exception->getMessage()); } //test for post-post link $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links', 'Orders', 'OrderID'); try { SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->fail('An expected ODataException post post segment has not been thrown'); } catch (ODataException $exception) { $this->assertStringEndsWith('The segment \'OrderID\' is not valid. Since the uri contains the $links segment, there must be only one segment specified after that.', $exception->getMessage()); } //test for $links with predicate $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links(123)', 'Orders'); try { SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->fail('An expected ODataException bad request for $links(123) has not been thrown'); } catch (ODataException $exception) { $this->assertEquals('Bad Request - Error in query syntax', $exception->getMessage()); } //test for $links with non-navigation property $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links', 'CustomerName'); try { SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->fail('An expected ODataException for non-navigation followed by $links has not been thrown'); } catch (ODataException $exception) { $this->assertStringEndsWith('The segment \'CustomerName\' must refer to a navigation property since the previous segment identifier is \'$links\'.', $exception->getMessage()); } //test for $links with non-navigation property $segments = array("Customers", '$links', 'Orders'); try { SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->fail('An expected ODataException intermediate collection in uri not thrown'); } catch (ODataException $exception) { $this->assertStringEndsWith('Since the segment \'Customers\' refers to a collection, this must be the last segment in the request URI. All intermediate segments must refer to a single resource.', $exception->getMessage()); } //test a valid links segment followed by multiple result $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links', 'Orders'); $segmentDescriptors = SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); /** check first segment */ $this->assertEquals($segmentDescriptors[0]->getIdentifier(), 'Customers'); $this->assertEquals($segmentDescriptors[0]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[0]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[0]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[0]->isSingleResult()); $this->assertNotNull($segmentDescriptors[0]->getTargetResourceSetWrapper()); /** check second segment */ $this->assertEquals($segmentDescriptors[1]->getIdentifier(), '$links'); $this->assertEquals($segmentDescriptors[1]->getTargetKind(), TargetKind::LINK()); $this->assertEquals($segmentDescriptors[1]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[1]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[1]->isSingleResult()); $this->assertNotNull($segmentDescriptors[1]->getTargetResourceSetWrapper()); /** check third segment */ $this->assertEquals($segmentDescriptors[2]->getIdentifier(), 'Orders'); $this->assertEquals($segmentDescriptors[2]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[2]->getTargetSource(), TargetSource::PROPERTY); $this->assertNotNull($segmentDescriptors[2]->getProjectedProperty()); $this->assertFalse($segmentDescriptors[2]->isSingleResult()); $this->assertNotNull($segmentDescriptors[2]->getTargetResourceSetWrapper()); //test a valid links segment followed by single result $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links', 'Orders(123)'); $segmentDescriptors = SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->assertEquals(count($segmentDescriptors), 3); /** check first segment */ $this->assertEquals($segmentDescriptors[0]->getIdentifier(), 'Customers'); $this->assertEquals($segmentDescriptors[0]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[0]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[0]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[0]->isSingleResult()); $this->assertNotNull($segmentDescriptors[0]->getTargetResourceSetWrapper()); /** check second segment */ $this->assertEquals($segmentDescriptors[1]->getIdentifier(), '$links'); $this->assertEquals($segmentDescriptors[1]->getTargetKind(), TargetKind::LINK()); $this->assertEquals($segmentDescriptors[1]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[1]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[1]->isSingleResult()); $this->assertNotNull($segmentDescriptors[1]->getTargetResourceSetWrapper()); /** check third segment */ $this->assertEquals($segmentDescriptors[2]->getIdentifier(), 'Orders'); $this->assertEquals($segmentDescriptors[2]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[2]->getTargetSource(), TargetSource::PROPERTY); $this->assertNotNull($segmentDescriptors[2]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[2]->isSingleResult()); $this->assertNotNull($segmentDescriptors[2]->getTargetResourceSetWrapper()); $this->assertNotNull($segmentDescriptors[2]->getKeyDescriptor()); $ordersKeyDescriptor = $segmentDescriptors[2]->getKeyDescriptor(); $namedKeyValues = $ordersKeyDescriptor->getValidatedNamedValues(); $this->assertTrue(array_key_exists('OrderID', $namedKeyValues)); $this->assertEquals($namedKeyValues['OrderID'][0], 123); //$count followed by post segment is valid $segments = array("Customers(CustomerID='ALFKI', CustomerGuid=guid'15b242e7-52eb-46bd-8f0e-6568b72cd9a6')", '$links', 'Orders', '$count'); $segmentDescriptors = SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); $this->assertEquals(count($segmentDescriptors), 4); /** check first segment */ $this->assertEquals($segmentDescriptors[0]->getIdentifier(), 'Customers'); $this->assertEquals($segmentDescriptors[0]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[0]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[0]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[0]->isSingleResult()); $this->assertNotNull($segmentDescriptors[0]->getTargetResourceSetWrapper()); /** check second segment */ $this->assertEquals($segmentDescriptors[1]->getIdentifier(), '$links'); $this->assertEquals($segmentDescriptors[1]->getTargetKind(), TargetKind::LINK()); $this->assertEquals($segmentDescriptors[1]->getTargetSource(), TargetSource::ENTITY_SET); $this->assertNull($segmentDescriptors[1]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[1]->isSingleResult()); $this->assertNotNull($segmentDescriptors[1]->getTargetResourceSetWrapper()); /** check third segment */ $this->assertEquals($segmentDescriptors[2]->getIdentifier(), 'Orders'); $this->assertEquals($segmentDescriptors[2]->getTargetKind(), TargetKind::RESOURCE()); $this->assertEquals($segmentDescriptors[2]->getTargetSource(), TargetSource::PROPERTY); $this->assertNotNull($segmentDescriptors[2]->getProjectedProperty()); $this->assertFalse($segmentDescriptors[2]->isSingleResult()); $this->assertNotNull($segmentDescriptors[2]->getTargetResourceSetWrapper()); $this->assertNull($segmentDescriptors[2]->getKeyDescriptor()); /** check fourth segment */ $this->assertEquals($segmentDescriptors[3]->getIdentifier(), '$count'); $this->assertEquals($segmentDescriptors[3]->getTargetKind(), TargetKind::PRIMITIVE_VALUE()); $this->assertEquals($segmentDescriptors[3]->getTargetSource(), TargetSource::PROPERTY); $this->assertNull($segmentDescriptors[3]->getProjectedProperty()); $this->assertTrue($segmentDescriptors[3]->isSingleResult()); $this->assertNotNull($segmentDescriptors[3]->getTargetResourceSetWrapper()); $this->assertNull($segmentDescriptors[3]->getKeyDescriptor()); }
/** * Execute the client submitted request against the data source. */ public function execute() { $segments = $this->request->getSegments(); foreach ($segments as $segment) { $requestTargetKind = $segment->getTargetKind(); if ($segment->getTargetSource() == TargetSource::ENTITY_SET) { $this->handleSegmentTargetsToResourceSet($segment); } else { if ($requestTargetKind == TargetKind::RESOURCE()) { if (is_null($segment->getPrevious()->getResult())) { throw ODataException::createResourceNotFoundError($segment->getPrevious()->getIdentifier()); } $this->_handleSegmentTargetsToRelatedResource($segment); } else { if ($requestTargetKind == TargetKind::LINK()) { $segment->setResult($segment->getPrevious()->getResult()); } else { if ($segment->getIdentifier() == ODataConstants::URI_COUNT_SEGMENT) { // we are done, $count will the last segment and // taken care by _applyQueryOptions method $segment->setResult($this->request->getCountValue()); break; } else { if ($requestTargetKind == TargetKind::MEDIA_RESOURCE()) { if (is_null($segment->getPrevious()->getResult())) { throw ODataException::createResourceNotFoundError($segment->getPrevious()->getIdentifier()); } // For MLE and Named Stream the result of last segment // should be that of previous segment, this is required // while retrieving content type or stream from IDSSP $segment->setResult($segment->getPrevious()->getResult()); // we are done, as named stream property or $value on // media resource will be the last segment break; } $value = $segment->getPrevious()->getResult(); while (!is_null($segment)) { //TODO: what exactly is this doing here? Once a null's found it seems everything will be null if (!is_null($value)) { $value = null; } else { try { //see #88 $property = new \ReflectionProperty($value, $segment->getIdentifier()); $value = $property->getValue($value); } catch (\ReflectionException $reflectionException) { //throw ODataException::createInternalServerError(Messages::orderByParserFailedToAccessOrInitializeProperty($resourceProperty->getName(), $resourceType->getName())); } } $segment->setResult($value); $segment = $segment->getNext(); if (!is_null($segment) && $segment->getIdentifier() == ODataConstants::URI_VALUE_SEGMENT) { $segment->setResult($value); $segment = $segment->getNext(); } } break; } } } } if (is_null($segment->getNext()) || $segment->getNext()->getIdentifier() == ODataConstants::URI_COUNT_SEGMENT) { $this->applyQueryOptions($segment); } } // Apply $select and $expand options to result set, this function will be always applied // irrespective of return value of IDSQP2::canApplyQueryOptions which means library will // not delegate $expand/$select operation to IDSQP2 implementation $this->handleExpansion(); }
private function createNextSegment(SegmentDescriptor $previous, $segment, $checkRights) { $previousKind = $previous->getTargetKind(); if ($previousKind == TargetKind::METADATA() || $previousKind == TargetKind::BATCH() || $previousKind == TargetKind::PRIMITIVE_VALUE() || $previousKind == TargetKind::BAG() || $previousKind == TargetKind::MEDIA_RESOURCE()) { //All these targets are terminal segments, there cannot be anything after them. throw ODataException::resourceNotFoundError(Messages::segmentParserMustBeLeafSegment($previous->getIdentifier())); } $identifier = $keyPredicate = null; $this->extractSegmentIdentifierAndKeyPredicate($segment, $identifier, $keyPredicate); $hasPredicate = !is_null($keyPredicate); $current = null; if ($previousKind == TargetKind::PRIMITIVE()) { if ($identifier !== ODataConstants::URI_VALUE_SEGMENT) { throw ODataException::resourceNotFoundError(Messages::segmentParserOnlyValueSegmentAllowedAfterPrimitivePropertySegment($identifier, $previous->getIdentifier())); } $this->_assertion(!$hasPredicate); $current = SegmentDescriptor::createFrom($previous); $current->setIdentifier(ODataConstants::URI_VALUE_SEGMENT); $current->setTargetKind(TargetKind::PRIMITIVE_VALUE()); $current->setSingleResult(true); } else { if (!is_null($previous->getPrevious()) && $previous->getPrevious()->getIdentifier() === ODataConstants::URI_LINK_SEGMENT && $identifier !== ODataConstants::URI_COUNT_SEGMENT) { throw ODataException::createBadRequestError(Messages::segmentParserNoSegmentAllowedAfterPostLinkSegment($identifier)); } else { if ($previousKind == TargetKind::RESOURCE() && $previous->isSingleResult() && $identifier === ODataConstants::URI_LINK_SEGMENT) { $this->_assertion(!$hasPredicate); $current = SegmentDescriptor::createFrom($previous); $current->setIdentifier(ODataConstants::URI_LINK_SEGMENT); $current->setTargetKind(TargetKind::LINK()); } else { //Do a sanity check here if ($previousKind != TargetKind::COMPLEX_OBJECT() && $previousKind != TargetKind::RESOURCE() && $previousKind != TargetKind::LINK()) { throw ODataException::createInternalServerError(Messages::segmentParserInconsistentTargetKindState()); } if (!$previous->isSingleResult() && $identifier !== ODataConstants::URI_COUNT_SEGMENT) { throw ODataException::createBadRequestError(Messages::segmentParserCannotQueryCollection($previous->getIdentifier())); } $current = new SegmentDescriptor(); $current->setIdentifier($identifier); $current->setTargetSource(TargetSource::PROPERTY); $projectedProperty = $previous->getTargetResourceType()->resolveProperty($identifier); $current->setProjectedProperty($projectedProperty); if ($identifier === ODataConstants::URI_COUNT_SEGMENT) { if ($previousKind != TargetKind::RESOURCE()) { throw ODataException::createBadRequestError(Messages::segmentParserCountCannotBeApplied($previous->getIdentifier())); } if ($previous->isSingleResult()) { throw ODataException::createBadRequestError(Messages::segmentParserCountCannotFollowSingleton($previous->getIdentifier())); } $current->setTargetKind(TargetKind::PRIMITIVE_VALUE()); $current->setSingleResult(true); $current->setTargetResourceSetWrapper($previous->getTargetResourceSetWrapper()); $current->setTargetResourceType($previous->getTargetResourceType()); } else { if ($identifier === ODataConstants::URI_VALUE_SEGMENT && $previousKind == TargetKind::RESOURCE()) { $current->setSingleResult(true); $current->setTargetResourceType($previous->getTargetResourceType()); $current->setTargetKind(TargetKind::MEDIA_RESOURCE()); } else { if (is_null($projectedProperty)) { if (!is_null($previous->getTargetResourceType()) && !is_null($previous->getTargetResourceType()->tryResolveNamedStreamByName($identifier))) { $current->setTargetKind(TargetKind::MEDIA_RESOURCE()); $current->setSingleResult(true); $current->setTargetResourceType($previous->getTargetResourceType()); } else { throw ODataException::createResourceNotFoundError($identifier); } } else { $current->setTargetResourceType($projectedProperty->getResourceType()); $current->setSingleResult($projectedProperty->getKind() != ResourcePropertyKind::RESOURCESET_REFERENCE); if ($previousKind == TargetKind::LINK() && $projectedProperty->getTypeKind() != ResourceTypeKind::ENTITY) { throw ODataException::createBadRequestError(Messages::segmentParserLinkSegmentMustBeFollowedByEntitySegment($identifier)); } switch ($projectedProperty->getKind()) { case ResourcePropertyKind::COMPLEX_TYPE: $current->setTargetKind(TargetKind::COMPLEX_OBJECT()); break; case ResourcePropertyKind::BAG | ResourcePropertyKind::PRIMITIVE: case ResourcePropertyKind::BAG | ResourcePropertyKind::COMPLEX_TYPE: $current->setTargetKind(TargetKind::BAG()); break; case ResourcePropertyKind::RESOURCE_REFERENCE: case ResourcePropertyKind::RESOURCESET_REFERENCE: $current->setTargetKind(TargetKind::RESOURCE()); $resourceSetWrapper = $this->providerWrapper->getResourceSetWrapperForNavigationProperty($previous->getTargetResourceSetWrapper(), $previous->getTargetResourceType(), $projectedProperty); if (is_null($resourceSetWrapper)) { throw ODataException::createResourceNotFoundError($projectedProperty->getName()); } $current->setTargetResourceSetWrapper($resourceSetWrapper); break; default: if (!$projectedProperty->isKindOf(ResourcePropertyKind::PRIMITIVE)) { throw ODataException::createInternalServerError(Messages::segmentParserUnExpectedPropertyKind('Primitive')); } $current->setTargetKind(TargetKind::PRIMITIVE()); break; } if ($hasPredicate) { $this->_assertion(!$current->isSingleResult()); $keyDescriptor = $this->_createKeyDescriptor($identifier . '(' . $keyPredicate . ')', $projectedProperty->getResourceType(), $keyPredicate); $current->setKeyDescriptor($keyDescriptor); if (!$keyDescriptor->isEmpty()) { $current->setSingleResult(true); } } if ($checkRights && !is_null($current->getTargetResourceSetWrapper())) { $current->getTargetResourceSetWrapper()->checkResourceSetRightsForRead($current->isSingleResult()); } } } } } } } return $current; }