/**
  * @param string $nodeId
  * @param ModelRelationsAndAttributesToReportAdapter $modelToReportAdapter
  * @param RedBeanModel $precedingModel
  * @param string $precedingRelation
  */
 protected function resolvePrecedingModelRelationAndAdapterByNodeId($nodeId, &$modelToReportAdapter, &$precedingModel, &$precedingRelation)
 {
     assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter');
     if ($nodeId == 'source') {
         return;
     }
     $relations = explode(FormModelUtil::RELATION_DELIMITER, $nodeId);
     $lastRelation = end($relations);
     foreach ($relations as $relation) {
         $relationModelClassName = $modelToReportAdapter->getRelationModelClassName($relation);
         $precedingRelation = $relation;
         if ($relation != $lastRelation) {
             $precedingModel = new $relationModelClassName(false);
         } elseif (count($relations) == 1) {
             $precedingModel = $modelToReportAdapter->getModel();
         }
         $modelToReportAdapter = $this->makeModelRelationsAndAttributesToReportAdapter($relationModelClassName::getModuleClassName(), $relationModelClassName);
     }
 }