/** * Gets the ResourceAssociationSet instance for the given source association end, * Note: Wrapper for IMetadataProvider::getResourceAssociationSet * method implementation * * @param ResourceSet $set Resource set of the source association end * @param ResourceType $type Resource type of the source association end * @param ResourceProperty $property 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(ResourceSet $set, ResourceType $type, ResourceProperty $property) { $type = $this->_getResourceTypeWherePropertyIsDeclared($type, $property); $cacheKey = $set->getName() . '_' . $type->getName() . '_' . $property->getName(); if (array_key_exists($cacheKey, $this->associationSetCache)) { return $this->associationSetCache[$cacheKey]; } $associationSet = $this->metaProvider->getResourceAssociationSet($set, $type, $property); if (!is_null($associationSet)) { $thisAssociationSetEnd = $associationSet->getResourceAssociationSetEnd($set, $type, $property); $relatedAssociationSetEnd = $associationSet->getRelatedResourceAssociationSetEnd($set, $type, $property); //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::providersWrapperIDSMPGetResourceSetReturnsInvalidResourceSet($set->getName(), $type->getFullName(), $property->getName()), 500); } $relatedResourceSetWrapper = $this->_validateResourceSetAndGetWrapper($relatedAssociationSetEnd->getResourceSet()); if ($relatedResourceSetWrapper === null) { $associationSet = null; } else { $this->_validateResourceType($thisAssociationSetEnd->getResourceType()); $this->_validateResourceType($relatedAssociationSetEnd->getResourceType()); } } $this->associationSetCache[$cacheKey] = $associationSet; return $associationSet; }