/** * Constructs a new instance of 'RootProjectionNode' representing root * of 'Projection Tree' * * @param ResourceSetWrapper $resourceSetWrapper ResourceSetWrapper of * the resource pointed * by the resource path. * @param InternalOrderByInfo $internalOrderByInfo Details of ordering * to be applied to the * resource set pointed * by the resource path. * @param int $skipCount Number of resources to * be skipped from the * resource set pointed * by the resource path. * @param int $takeCount Number of resources to * be taken from the * resource set pointed * by the resource path. * @param int $maxResultCount The maximum limit * configured for the * resource set. * @param ResourceType $baseResourceType Resource type of the * resource pointed * by the resource path. */ public function __construct(ResourceSetWrapper $resourceSetWrapper, $internalOrderByInfo, $skipCount, $takeCount, $maxResultCount, ResourceType $baseResourceType) { $this->_baseResourceType = $baseResourceType; parent::__construct(null, null, $resourceSetWrapper, $internalOrderByInfo, $skipCount, $takeCount, $maxResultCount); }
/** * Recursive metod to build $expand and $select paths for a specified node. * * @param string[] &$parentPathSegments Array of path * segments which leads * up to (including) * the segment * represented by * $expandedProjectionNode. * @param string[] &$selectionPaths The string which * holds projection * path segment * seperated by comma, * On return this argument * will be updated with * the selection path * segments under * this node. * @param string[] &$expansionPaths The string which holds * expansion path segment * seperated by comma. * On return this argument * will be updated with * the expand path * segments under * this node. * @param ExpandedProjectionNode &$expandedProjectionNode The expanded node for * which expansion * and selection path * to be build. * @param boolean &$foundSelections On return, this * argument will hold * true if any selection * defined under this node * false otherwise. * @param boolean &$foundExpansions On return, this * argument will hold * true if any expansion * defined under this node * false otherwise. * * @return void */ private function _buildSelectionAndExpansionPathsForNode(&$parentPathSegments, &$selectionPaths, &$expansionPaths, ExpandedProjectionNode &$expandedProjectionNode, &$foundSelections, &$foundExpansions) { $foundSelections = false; $foundExpansions = false; $foundSelectionOnChild = false; $foundExpansionOnChild = false; $expandedChildrenNeededToBeSelected = array(); foreach ($expandedProjectionNode->getChildNodes() as $childNode) { if (!$childNode instanceof ExpandedProjectionNode) { $foundSelections = true; $this->_appendSelectionOrExpandPath($selectionPaths, $parentPathSegments, $childNode->getPropertyName()); } else { $foundExpansions = true; array_push($parentPathSegments, $childNode->getPropertyName()); $this->_buildSelectionAndExpansionPathsForNode($parentPathSegments, $selectionPaths, $expansionPaths, $childNode, $foundSelectionOnChild, $foundExpansionOnChild); array_pop($parentPathSegments); if ($childNode->canSelectAllProperties()) { if ($foundSelectionOnChild) { $this->_appendSelectionOrExpandPath($selectionPaths, $parentPathSegments, $childNode->getPropertyName() . '/*'); } else { $expandedChildrenNeededToBeSelected[] = $childNode; } } } $foundSelections |= $foundSelectionOnChild; if (!$foundExpansionOnChild) { $this->_appendSelectionOrExpandPath($expansionPaths, $parentPathSegments, $childNode->getPropertyName()); } } if (!$expandedProjectionNode->canSelectAllProperties() || $foundSelections) { foreach ($expandedChildrenNeededToBeSelected as $childToProject) { $this->_appendSelectionOrExpandPath($selectionPaths, $parentPathSegments, $childNode->getPropertyName()); $foundSelections = true; } } }