/** * Gets the ResourceAssociationSet instance for the given source association end, * Note: Wrapper for IDataServiceMetadataProvider::getResourceAssociationSet * method implementation * * @param ResourceSetWrapper $resourceSetWrapper Resource set of the source * association end * @param ResourceType $resourceType Resource type of the source * association end * @param ResourceProperty $resourceProperty Resource property of the source * association end * * @return ResourceAssociationSet/NULL Returns ResourceAssociationSet for the source * association end, NULL if no such * association end or resource set in the * other end of the association is invisible */ public function getResourceAssociationSet(ResourceSetWrapper $resourceSetWrapper, ResourceType $resourceType, ResourceProperty $resourceProperty) { $resourceType = $this->_getResourceTypeWherePropertyIsDeclared($resourceType, $resourceProperty); $cacheKey = $resourceSetWrapper->getName() . '_' . $resourceType->getName() . '_' . $resourceProperty->getName(); if (array_key_exists($cacheKey, $this->_resourceAssociationSetCache)) { return $this->_resourceAssociationSetCache[$cacheKey]; } $associationSet = $this->_metadataProvider->getResourceAssociationSet($resourceSetWrapper->getResourceSet(), $resourceType, $resourceProperty); if (!is_null($associationSet)) { $thisAssociationSetEnd = $associationSet->getResourceAssociationSetEnd($resourceSetWrapper->getResourceSet(), $resourceType, $resourceProperty); $relatedAssociationSetEnd = $associationSet->getRelatedResourceAssociationSetEnd($resourceSetWrapper->getResourceSet(), $resourceType, $resourceProperty); //If $thisAssociationSetEnd or $relatedAssociationSetEnd //is null means the associationset //we got from the IDSMP::getResourceAssociationSet is invalid. //AssociationSet::getResourceAssociationSetEnd //return null, if AssociationSet's End1 or End2's resourceset name //is not matching with the name of //resource set wrapper (param1) and resource type is not assignable //from given resource type (param2) if (is_null($thisAssociationSetEnd) || is_null($relatedAssociationSetEnd)) { throw new ODataException(Messages::metadataQueryProviderWrapperIDSMPGetResourceSetReturnsInvalidResourceSet($resourceSetWrapper->getName(), $resourceType->getFullName(), $resourceProperty->getName()), 500); } $relatedResourceSetWrapper = $this->_validateResourceSetAndGetWrapper($relatedAssociationSetEnd->getResourceSet()); if ($relatedResourceSetWrapper === null) { $associationSet = null; } else { $this->_validateResourceType($thisAssociationSetEnd->getResourceType()); $this->_validateResourceType($relatedAssociationSetEnd->getResourceType()); } } $this->_resourceAssociationSetCache[$cacheKey] = $associationSet; return $associationSet; }