private static function putArgumentToPlace(IDataGroup $group, $names, $value)
 {
     $name = array_shift($names);
     if (count($names)) {
         // group
         $index = (int) $name;
         /** @var IDataGroup */
         $item = null;
         if ((string) $index == $name && $group instanceof IDataLevels) {
             /** @var IDataLevelsManager */
             $levelsManager = $group->levelsManager();
             if ($levelsManager->has($index)) {
                 //echo " - level get($index) \r\n";
                 $item = $levelsManager->get($index);
             } else {
                 //echo " - level new($index) \r\n";
                 $item = new DataGroup();
                 $levelsManager->set($index, $item);
             }
         } else {
             /** @var IDataGroupManager */
             $groupManager = $group->groupManager();
             if ($groupManager->has($name)) {
                 //echo " - group get($name) \r\n";
                 $item = $groupManager->get($name);
             } else {
                 //echo " - group new($name) \r\n";
                 $item = new DataGroup();
                 $groupManager->set($name, $item);
                 $item = $groupManager->get($name);
             }
         }
         self::putArgumentToPlace($item, $names, $value);
     } else {
         // value
         /** @var IDataContainerManager */
         $dataManager = $group->dataManager();
         //echo " - value new($name) \r\n";
         $dataManager->set($name, $value);
     }
 }