/**
  * Helper method to inform the client, that new workspace information is available
  *
  * @return void
  */
 protected function updateWorkspaceInfo()
 {
     $nodeService = new NodeService();
     $updateWorkspaceInfo = new UpdateWorkspaceInfo();
     $updateWorkspaceInfo->setDocument($nodeService->getClosestDocument($this->getSubject()));
     $this->feedbackCollection->add($updateWorkspaceInfo);
 }
 /**
  * Convert array to change interface
  *
  * @param array $changeData
  * @return ChangeInterface
  */
 protected function convertChangeData($changeData)
 {
     $type = $changeData['type'];
     if (!isset($this->typeMap[$type])) {
         return new \TYPO3\Flow\Error\Error(sprintf('Could not convert change type %s, it is unknown to the system', $type));
     }
     $changeClass = $this->typeMap[$type];
     $changeClassInstance = $this->objectManager->get($changeClass);
     $subjectContextPath = $changeData['subject'];
     $subject = $this->nodeService->getNodeFromContextPath($subjectContextPath);
     if ($subject instanceof \TYPO3\Flow\Error\Error) {
         return $subject;
     }
     $changeClassInstance->setSubject($subject);
     if (isset($changeData['reference']) && method_exists($changeClassInstance, 'setReference')) {
         $referenceContextPath = $changeData['reference'];
         $reference = $this->nodeService->getNodeFromContextPath($referenceContextPath);
         if ($reference instanceof \TYPO3\Flow\Error\Error) {
             return $reference;
         }
         $changeClassInstance->setReference($reference);
     }
     if (isset($changeData['payload'])) {
         foreach ($changeData['payload'] as $key => $value) {
             if (!in_array($key, $this->disallowedPayloadProperties)) {
                 ObjectAccess::setProperty($changeClassInstance, $key, $value);
             }
         }
     }
     return $changeClassInstance;
 }
 /**
  * Build and execute a flow query chain
  *
  * @param array $chain
  * @return void
  */
 public function flowQueryAction(array $chain)
 {
     $createContext = array_shift($chain);
     $finisher = array_pop($chain);
     $flowQuery = new FlowQuery(array_map(function ($envelope) {
         return $this->nodeService->getNodeFromContextPath($envelope['$node']);
     }, $createContext['payload']));
     foreach ($chain as $operation) {
         $flowQuery = call_user_func_array([$flowQuery, strtolower($operation['type'])], $operation['payload']);
     }
     if ('GET' === $finisher['type']) {
         $result = $flowQuery->get();
     }
     $nodeInfoHelper = new NodeInfoHelper();
     return json_encode($nodeInfoHelper->renderNodes($result, $this->getControllerContext()));
 }
 /**
  * Set the active node
  *
  * @param string $activeContextPath
  * @return void
  */
 public function setActive($activeContextPath)
 {
     $this->active = $this->nodeService->getNodeFromContextPath($activeContextPath);
 }