<commit_before><?php

/**
 * Класс TreeBuilder.
 *
 * @package energine
 * @subpackage kernel
 * @author dr.Pavka
 * @copyright Energine 2006
 */

/**
 * Построитель древовидных данных.
 * Кроме Data и DataDescription имеет еще и Tree c помощью которого определяется структура
 *
 * @package energine
 * @subpackage kernel
 * @author dr.Pavka
 */
class TreeBuilder extends AbstractBuilder  {
    /**
     * Имя поля содержащего ключевой идентификатор
     *
     * @var string
     * @access private
     */
    private $idFieldName = false;
    /**
     * Дерево
     *
     * @var TreeNodeList
     * @access private
     */
    private $tree;

    /**
     * Конструктор класса.
     *
     * @access public
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }

    /**
     * Устанавливает дерево
     *
     * @param TreeNodeList
     * @return void
     * @access public
     */

    public function setTree(TreeNodeList $tree) {
        $this->tree = $tree;
    }

    public function getTree() {
        return $this->tree;
    }

    /**
	 * Построение результата.
	 *
	 * @access protected
	 * @return void
	 */
    protected function run() {
        foreach ($this->dataDescription as $fieldName => $fieldDescription) {
            if (!is_null($fieldDescription->getPropertyValue('key'))) {
            	$this->idFieldName = $fieldName;
            }
        }
        if (!$this->idFieldName) {
        	throw new SystemException('ERR_DEV_NO_TREE_IDENT', SystemException::ERR_DEVELOPER, array($this->idFieldName));
        }
        $this->result->appendChild($this->treeBuild($this->tree));
    }

    /**
     * Внутренний метод постройки древовидного XML
     *
     * @return DOMNode
     * @access private
     */

    private function treeBuild(TreeNodeList $tree) {
        $dom_recordset = $this->result->createElement('recordset');
        $data = array_flip($this->data->getFieldByName($this->idFieldName)->getData());
        foreach ($tree as $id => $node) {
        	if(isset($data[$id])){
            //Идентификатор строки<commit_msg>Для пустого набора данных  возникала ошибка при построении<commit_after><?php

/**
 * Класс TreeBuilder.
 *
 * @package energine
 * @subpackage kernel
 * @author dr.Pavka
 * @copyright Energine 2006
 */

/**
 * Построитель древовидных данных.
 * Кроме Data и DataDescription имеет еще и Tree c помощью которого определяется структура
 *
 * @package energine
 * @subpackage kernel
 * @author dr.Pavka
 */
class TreeBuilder extends AbstractBuilder  {
    /**
     * Имя поля содержащего ключевой идентификатор
     *
     * @var string
     * @access private
     */
    private $idFieldName = false;
    /**
     * Дерево
     *
     * @var TreeNodeList
     * @access private
     */
    private $tree;

    /**
     * Конструктор класса.
     *
     * @access public
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }

    /**
     * Устанавливает дерево
     *
     * @param TreeNodeList
     * @return void
     * @access public
     */

    public function setTree(TreeNodeList $tree) {
        $this->tree = $tree;
    }

    public function getTree() {
        return $this->tree;
    }

    /**
	 * Построение результата.
	 *
	 * @access protected
	 * @return void
	 */
    protected function run() {
        foreach ($this->dataDescription as $fieldName => $fieldDescription) {
            if (!is_null($fieldDescription->getPropertyValue('key'))) {
            	$this->idFieldName = $fieldName;
            }
        }
        if (!$this->idFieldName) {
        	throw new SystemException('ERR_DEV_NO_TREE_IDENT', SystemException::ERR_DEVELOPER, array($this->idFieldName));
        }
        if(!$this->data->isEmpty())
            $this->result->appendChild($this->treeBuild($this->tree));
    }

    /**
     * Внутренний метод постройки древовидного XML
     *
     * @return DOMNode
     * @access private
     */

    private function treeBuild(TreeNodeList $tree) {
        $dom_recordset = $this->result->createElement('recordset');
        $data = array_flip($this->data->getFieldByName($this->idFieldName)->getData());
        foreach ($tree as $id => $node) {
        	if(isset($data[$id])){
            //Идентификатор строки
{'fraction_non_alphanumeric': 0.1272938443670151, 'fraction_numerical': 0.0018583042973286876, 'mean_word_length': 2.2970903522205206, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5810584', 'n_tokens_mistral': 1364, 'n_tokens_neox': 1424, 'n_words': 281}