mirror of
https://github.com/bia-technologies/bsl-parser.git
synced 2024-11-24 08:12:17 +02:00
#ONECICD-148
Рефакторинг чтения из файлов описаний
This commit is contained in:
parent
78e9620464
commit
3dbb7412fd
@ -24,9 +24,9 @@
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные описания
|
||||
//
|
||||
Функция ПолучитьСвойства(ТекстОписания, ПараметрыЧтения = Неопределено) Экспорт
|
||||
Функция ПолучитьСвойства(ТекстОписания, ПараметрыЧтения) Экспорт
|
||||
|
||||
СвойстваОписания = Новый Структура();
|
||||
Значения = Новый СписокЗначений();
|
||||
|
||||
НайденныеСовпадения = РегулярныеВыражения.СвойстваОписания.НайтиСовпадения(ТекстОписания);
|
||||
|
||||
@ -35,35 +35,11 @@
|
||||
Имя = Совпадение.Группы[1].Значение;
|
||||
Значение = Совпадение.Группы[2].Значение;
|
||||
|
||||
Если СвойстваОписания.Свойство(Имя) Тогда
|
||||
|
||||
Если ТипЗнч(СвойстваОписания[Имя]) = Тип("Массив") Тогда
|
||||
|
||||
СвойстваОписания[Имя].Добавить(Значение);
|
||||
|
||||
Иначе
|
||||
|
||||
КоллекцияЗначений = Новый Массив();
|
||||
КоллекцияЗначений.Добавить(СвойстваОписания[Имя]);
|
||||
КоллекцияЗначений.Добавить(Значение);
|
||||
|
||||
СвойстваОписания.Вставить(Имя, КоллекцияЗначений);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
СвойстваОписания.Вставить(Имя, Значение);
|
||||
|
||||
КонецЕсли;
|
||||
Значения.Добавить(Имя, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ПараметрыЧтения <> Неопределено Тогда
|
||||
|
||||
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения, ЭтотОбъект);
|
||||
|
||||
КонецЕсли;
|
||||
СвойстваОписания = ОбработатьСырыеДанные(Значения, ПараметрыЧтения);
|
||||
|
||||
Возврат СвойстваОписания;
|
||||
|
||||
@ -78,7 +54,7 @@
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные описания
|
||||
//
|
||||
Функция ПрочитатьСвойстваИзФайла(ИмяФайла, ПараметрыЧтения = Неопределено) Экспорт
|
||||
Функция ПрочитатьСвойстваИзФайла(ИмяФайла, ПараметрыЧтения) Экспорт
|
||||
|
||||
ТекстОписания = Утилиты.ПрочитатьФайл(ИмяФайла);
|
||||
|
||||
@ -171,74 +147,50 @@
|
||||
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция ВыполнитьОбработкуПрочитанныхСвойств(СырыеДанные, ПараметрыЧтения, ОбъектПреобразователь)
|
||||
Функция ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения)
|
||||
|
||||
СвойстваОписания = Новый Структура();
|
||||
СтруктураСырыхДанных = Новый Структура();
|
||||
|
||||
Для Каждого Параметр Из ПараметрыЧтения Цикл
|
||||
Для Каждого Элемент Из СырыеДанные Цикл
|
||||
|
||||
Значение = Неопределено;
|
||||
СтруктураСырыхДанных.Вставить(Элемент.Значение, Элемент.Представление);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ДанныеОбъекта = ЧтениеОписанийБазовый.ОбработатьСырыеДанные(СтруктураСырыхДанных, ПараметрыЧтения);
|
||||
|
||||
ЗначениеВМассиве = Новый Массив(1);
|
||||
ОписаниеСвойства = Неопределено;
|
||||
|
||||
Для Каждого Элемент Из ДанныеОбъекта Цикл
|
||||
|
||||
Если НЕ СырыеДанные.Свойство(Параметр.Значение.Поле, Значение) Тогда
|
||||
|
||||
Значение = "";
|
||||
|
||||
Если НЕ ПараметрыЧтения.Свойства.Свойство(Элемент.Ключ, ОписаниеСвойства) ИЛИ НЕ ЗначениеЗаполнено(ОписаниеСвойства.МетодПреобразования) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = ОбработатьСвойство(Значение, Параметр.Значение, ОбъектПреобразователь);
|
||||
|
||||
СвойстваОписания.Вставить(Параметр.Ключ, Значение);
|
||||
|
||||
ЗначениеВМассиве[0] = Элемент.Значение;
|
||||
|
||||
Значение = Рефлектор.ВызватьМетод(ЭтотОбъект, ОписаниеСвойства.МетодПреобразования, ЗначениеВМассиве);
|
||||
|
||||
ДанныеОбъекта.Вставить(Элемент.Ключ, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СвойстваОписания;
|
||||
|
||||
КонецФункции
|
||||
Если ПараметрыЧтения.ЕстьПодчиненные Тогда
|
||||
|
||||
Для Каждого Элемент Из СырыеДанные Цикл
|
||||
|
||||
Если Элемент.Значение <> "languages" И ТипыОбъектовКонфигурации.ОписаниеТипаПоИмени(Элемент.Значение) <> Неопределено Тогда
|
||||
|
||||
ДанныеОбъекта.Подчиненные.Добавить(Элемент.Представление);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Функция ОбработатьСвойство(Значение, Параметр, ОбъектПреобразователь)
|
||||
|
||||
Если ПустаяСтрока(Значение) И Параметр.Коллекция Тогда
|
||||
|
||||
Возврат Новый Массив();
|
||||
|
||||
ИначеЕсли ПустаяСтрока(Значение) Тогда
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Массив") И ПустаяСтрока(Параметр.МетодПреобразования) И НЕ Параметр.Многоязычный Тогда
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
МетодПреобразования = Параметр.МетодПреобразования;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(МетодПреобразования) И Параметр.Многоязычный Тогда
|
||||
|
||||
МетодПреобразования = "МногоязычнаяСтрока";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(МетодПреобразования) Тогда
|
||||
|
||||
ЗначениеВМассиве = Новый Массив();
|
||||
ЗначениеВМассиве.Добавить(Значение);
|
||||
|
||||
Значение = Рефлектор.ВызватьМетод(ОбъектПреобразователь, МетодПреобразования, ЗначениеВМассиве);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметр.Коллекция И ТипЗнч(Значение) <> Тип("Массив") Тогда
|
||||
|
||||
Результат = Новый Массив();
|
||||
Результат.Добавить(Значение);
|
||||
Значение = Результат;
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
Возврат ДанныеОбъекта;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -81,6 +81,28 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения) Экспорт
|
||||
|
||||
ДанныеОбъекта = СтруктурыОписаний.СоздатьСтруктураОбъекта(ПараметрыЧтения.Тип);
|
||||
|
||||
Для Каждого Параметр Из ПараметрыЧтения.Свойства Цикл
|
||||
|
||||
Значение = Неопределено;
|
||||
|
||||
Если НЕ СырыеДанные.Свойство(Параметр.Значение.Поле, Значение) Тогда
|
||||
|
||||
Значение = "";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеОбъекта.Вставить(Параметр.Ключ, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ДанныеОбъекта;
|
||||
|
||||
КонецФункции
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -25,16 +25,14 @@
|
||||
//
|
||||
Функция ПолучитьСвойства(ТекстОписания, ПараметрыЧтения) Экспорт
|
||||
|
||||
СвойстваОписания = Новый Структура();
|
||||
|
||||
ЧтениеXML = Новый ЧтениеXML;
|
||||
ЧтениеXML.УстановитьСтроку(ТекстОписания);
|
||||
|
||||
ПрочитатьСвойстваXML(ЧтениеXML, СвойстваОписания, ПараметрыЧтения);
|
||||
СырыеДанные = ПрочитатьСвойстваXML(ЧтениеXML, ПараметрыЧтения);
|
||||
|
||||
ЧтениеXML.Закрыть();
|
||||
|
||||
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения);
|
||||
СвойстваОписания = ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения);
|
||||
|
||||
Возврат СвойстваОписания;
|
||||
|
||||
@ -51,16 +49,14 @@
|
||||
//
|
||||
Функция ПрочитатьСвойстваИзФайла(ИмяФайла, ПараметрыЧтения) Экспорт
|
||||
|
||||
СвойстваОписания = Новый Структура();
|
||||
|
||||
ЧтениеXML = Новый ЧтениеXML;
|
||||
ЧтениеXML.ОткрытьФайл(ИмяФайла);
|
||||
|
||||
ПрочитатьСвойстваXML(ЧтениеXML, СвойстваОписания, ПараметрыЧтения);
|
||||
СырыеДанные = ПрочитатьСвойстваXML(ЧтениеXML, ПараметрыЧтения);
|
||||
|
||||
ЧтениеXML.Закрыть();
|
||||
|
||||
СвойстваОписания = ВыполнитьОбработкуПрочитанныхСвойств(СвойстваОписания, ПараметрыЧтения);
|
||||
СвойстваОписания = ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения);
|
||||
|
||||
Возврат СвойстваОписания;
|
||||
|
||||
@ -214,35 +210,23 @@
|
||||
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция ВыполнитьОбработкуПрочитанныхСвойств(СырыеДанные, ПараметрыЧтения)
|
||||
Функция ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения)
|
||||
|
||||
СвойстваОписания = СтруктурыОписаний.СоздатьСтруктураОбъекта(ПараметрыЧтения.Тип);
|
||||
|
||||
Для Каждого Параметр Из ПараметрыЧтения.Свойства Цикл
|
||||
|
||||
Значение = Неопределено;
|
||||
|
||||
Если НЕ СырыеДанные.Свойство(Параметр.Значение.Поле, Значение) Тогда
|
||||
|
||||
Значение = "";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СвойстваОписания.Вставить(Параметр.Ключ, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
ДанныеОбъекта = ЧтениеОписанийБазовый.ОбработатьСырыеДанные(СырыеДанные, ПараметрыЧтения);
|
||||
|
||||
Если ПараметрыЧтения.ЕстьПодчиненные И СырыеДанные.Свойство("ChildObjects") И ЗначениеЗаполнено(СырыеДанные.ChildObjects) Тогда
|
||||
|
||||
СвойстваОписания.Вставить("Подчиненные", СырыеДанные.ChildObjects);
|
||||
ДанныеОбъекта.Вставить("Подчиненные", СырыеДанные.ChildObjects);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СвойстваОписания;
|
||||
Возврат ДанныеОбъекта;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрочитатьСвойстваXML(ЧтениеXML, Данные, ПараметрыЧтения)
|
||||
Функция ПрочитатьСвойстваXML(ЧтениеXML, ПараметрыЧтения)
|
||||
|
||||
Данные = Новый Структура();
|
||||
|
||||
ОбработчикиПолей = Новый Структура();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user