/**
  * Query for a related resource set or resource set reference pointed by the 
  * given segment descriptor and update the descriptor with the result.
  * 
  * @param SegmentDescriptor &$segmentDescriptor Describes the related resource
  *                                              to query.
  * 
  * @return void
  */
 private function _handleSegmentTargetsToRelatedResource(SegmentDescriptor &$segmentDescriptor)
 {
     $projectedProperty = $segmentDescriptor->getProjectedProperty();
     $projectedPropertyKind = $projectedProperty->getKind();
     if ($projectedPropertyKind == ResourcePropertyKind::RESOURCESET_REFERENCE) {
         if ($segmentDescriptor->isSingleResult()) {
             $entityInstance = $this->_provider->getResourceFromRelatedResourceSet($segmentDescriptor->getPrevious()->getTargetResourceSetWrapper()->getResourceSet(), $segmentDescriptor->getPrevious()->getResult(), $segmentDescriptor->getTargetResourceSetWrapper()->getResourceSet(), $projectedProperty, $segmentDescriptor->getKeyDescriptor());
             $segmentDescriptor->setResult($entityInstance);
         } else {
             $entityInstances = $this->_provider->getRelatedResourceSet($segmentDescriptor->getPrevious()->getTargetResourceSetWrapper()->getResourceSet(), $segmentDescriptor->getPrevious()->getResult(), $segmentDescriptor->getTargetResourceSetWrapper()->getResourceSet(), $segmentDescriptor->getProjectedProperty(), $this->_requestDescription->getInternalFilterInfo(), null, null, null, null);
             $segmentDescriptor->setResult($entityInstances);
         }
     } else {
         if ($projectedPropertyKind == ResourcePropertyKind::RESOURCE_REFERENCE) {
             $entityInstance = $this->_provider->getRelatedResourceReference($segmentDescriptor->getPrevious()->getTargetResourceSetWrapper()->getResourceSet(), $segmentDescriptor->getPrevious()->getResult(), $segmentDescriptor->getTargetResourceSetWrapper()->getResourceSet(), $segmentDescriptor->getProjectedProperty());
             $segmentDescriptor->setResult($entityInstance);
         } else {
             //Unexpected state
         }
     }
 }
 /**
  * Gets reference to the ResourceProperty instance targetted by 
  * the resource path, ResourceProperty will present in the 
  * following cases:
  * if the last segement descriptor describes
  *      (a) resource set (after 1 level)
  *          http://server/NW.svc/Customers('ALFKI')/Orders
  *          http://server/NW.svc/Customers('ALFKI')/Orders(123)
  *          http://server/NW.svc/Customers('ALFKI')/$links/Orders
  *      (b) resource set reference
  *          http://server/NW.svc/Orders(123)/Customer
  *          http://server/NW.svc/Orders(123)/$links/Customer
  *      (c) $count
  *          http://server/NW.svc/Customers/$count
  *      (d) Primitive
  *          http://server/NW.svc/Customers('ALFKI')/Country
  *      (e) $value on primitive type
  *          http://server/NW.svc/Customers('ALFKI')/Country/$value
  *      (f) Complex
  *          http://server/NW.svc/Customers('ALFKI')/Address
  *      (g) Bag
  *          http://server/NW.svc/Employees(123)/Emails
  *      (h) MLE
  *          http://server/NW.svc/Employees(123)/$value
  *       
  * ResourceType will be absent (NULL) in the following cases:
  * if the last segment descriptor describes
  *      (a) If last segment is the only segment pointing to
  *          ResourceSet (single or multiple)
  *          http://server/NW.svc/Customers
  *          http://server/NW.svc/Customers('ALFKI')
  *      (b) Named Stream
  *          http://server/NW.svc/Employees(123)/Thumnail48_48
  *      (c) metadata
  *          http://server/NW.svc/$metadata
  *      (d) service directory
  *          http://server/NW.svc
  *      (e) $bath
  *          http://server/NW.svc/$batch
  *      
  * @return ResourceProperty/NULL
  */
 public function getProjectedProperty()
 {
     return $this->_lastSegmentDescriptor->getProjectedProperty();
 }