diff --git a/docs/README.md b/docs/README.md
index cac5f06..af5f262 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -6,10 +6,12 @@
- [Класс МенеджерПараметров:](#класс-менеджерпараметров)
- [Параметр](#параметр)
- [ЧтениеВыполнено](#чтениевыполнено)
+ - [ПрочитанныеПараметры](#прочитанныепараметры)
- [Прочитать](#прочитать)
- [УстановитьФайлПараметров](#установитьфайлпараметров)
- [ДобавитьПровайдерПараметров](#добавитьпровайдерпараметров)
- [ОтключитьПровайдер](#отключитьпровайдер)
+ - [ПровайдерПоИдентификатору](#провайдерпоидентификатору)
- [НастройкаПоискаФайла](#настройкапоискафайла)
- [ИспользоватьПровайдерJSON](#использоватьпровайдерjson)
- [ИспользоватьПровайдерYAML](#использоватьпровайдерyaml)
@@ -79,6 +81,16 @@
//
```
+
+#### ПрочитанныеПараметры
+```bsl
+// Возвращает соответствие прочитанных параметров (сырой результат без обработки конструктором)
+//
+// Возвращаемое значение:
+// Соответствие - прочитанные параметры
+//
+```
+
#### Прочитать
```bsl
@@ -102,9 +114,21 @@
// Добавляет в таблицу провайдеров произвольный класс-провайдер
//
// Параметры:
-// КлассОбъект - Объект - класс провайдера или имя класса
-// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99)
+// КлассОбъект - Объект - класс провайдера
+// Приоритет - Число - числовой приоритет выполнения провайдера;
+// меньшее значение читается первым (по умолчанию берётся из провайдера)
+// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера;
+// при коллизии автоматически добавляется суффикс #2, #3 и т.д.
//
+// Возвращаемое значение:
+// Объект - переданный КлассОбъект (для цепочки настроек через .Настройки())
+//
+```
+
+Пример использования с цепочкой настроек:
+```bsl
+МП.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV, 2).Настройки()
+ .УстановитьПрефикс("APP_");
```
@@ -117,6 +141,24 @@
//
```
+
+#### ПровайдерПоИдентификатору
+```bsl
+// Возвращает класс провайдера по идентификатору для прямой настройки
+//
+// Параметры:
+// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2")
+//
+// Возвращаемое значение:
+// Произвольный - класс провайдера или Неопределено если не найден
+//
+```
+
+Пример:
+```bsl
+МП.ПровайдерПоИдентификатору("env").Настройки().УстановитьПрефикс("APP_");
+```
+
#### НастройкаПоискаФайла
```bsl
diff --git a/packagedef b/packagedef
index ac53ca7..8613d52 100644
--- a/packagedef
+++ b/packagedef
@@ -4,7 +4,7 @@
//
Описание.Имя("configor")
- .Версия("0.11.1")
+ .Версия("0.12.0")
.Автор("Khorev Aleksey")
.АдресАвтора("Khorevaa@gmail.com")
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os"
new file mode 100644
index 0000000..c6d540c
--- /dev/null
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os"
@@ -0,0 +1,32 @@
+
+Перем Префикс; // Строка - префикс фильтрации переменных среды
+
+#Область Публичное_API
+
+// Устанавливает префикс фильтрации переменных среды
+//
+// Параметры:
+// ПрефиксФильтра - Строка - префикс
+//
+// Возвращаемое значение:
+// НастройкиПровайдераENV - ссылка на текущий объект
+//
+Функция УстановитьПрефикс(Знач ПрефиксФильтра) Экспорт
+ Префикс = ПрефиксФильтра;
+ Возврат ЭтотОбъект;
+КонецФункции
+
+// Возвращает установленный префикс
+//
+// Возвращаемое значение:
+// Строка - текущий префикс
+//
+Функция ПолучитьПрефикс() Экспорт
+ Возврат Префикс;
+КонецФункции
+
+#КонецОбласти
+
+Процедура ПриСозданииОбъекта(НачальныйПрефикс = "")
+ Префикс = НачальныйПрефикс;
+КонецПроцедуры
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
index 35b8b40..169c7e0 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
@@ -12,12 +12,12 @@
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) передаётся провайдеру как fallback
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт
Если Не Включен Тогда
Возврат Новый Соответствие;
@@ -52,6 +52,24 @@
Приоритет = НовыйПриоритет;
КонецПроцедуры
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - новый идентификатор провайдера
+//
+Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ Идентификатор = НовыйИдентификатор;
+КонецПроцедуры
+
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// Произвольный - объект настроек или Неопределено если провайдер не поддерживает метод Настройки()
+//
+Функция Настройки() Экспорт
+ Возврат КлассПровайдера.Настройки();
+КонецФункции
+
// Выполняет запись данных провайдера
//
// Параметры:
@@ -111,17 +129,11 @@
ИЛИ РеализованИнтерфейсЗаписи);
Если НЕ ПроверкаПровайдера Тогда
- // TODO: Добавить описание того что реализовано а что нет
ВызватьИсключение "Не реализован необходимый интерфейс провайдера";
КонецЕсли;
ТипПровайдера = ВходящийКлассПровайдера.ТипПровайдера();
-
- Если ЭтоФайловыйПровайдер() Тогда
- КлассПровайдера = Новый ФайловыйПровайдерПараметров(ВходящийКлассПровайдера);
- Иначе
- КлассПровайдера = ВходящийКлассПровайдера;
- КонецЕсли;
+ КлассПровайдера = ВходящийКлассПровайдера;
Приоритет = КлассПровайдера.Приоритет();
Идентификатор = КлассПровайдера.Идентификатор();
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os"
index 89be6e5..561f7aa 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os"
@@ -3,8 +3,15 @@
Перем Лог;
Перем Префикс;
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+Перем _Настройки; // НастройкиПровайдераENV
+
Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "")
Префикс = ПрефиксПеременныхСреды;
+ _Приоритет = 2;
+ _Идентификатор = "env";
+ _Настройки = Новый НастройкиПровайдераENV(ПрефиксПеременныхСреды);
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env");
КонецПроцедуры
@@ -16,7 +23,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 2;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровENV - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -25,7 +45,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "env";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровENV - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -37,17 +70,29 @@
Возврат "env";
КонецФункции
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// НастройкиПровайдераENV - настройки
+//
+Функция Настройки() Экспорт
+ Возврат _Настройки;
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) игнорируется; для указания префикса
+// использовать метод Настройки().УстановитьПрефикс(...)
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт
+
+ ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс();
- Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс);
+ Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", ЭффективныйПрефикс);
ПеременныеСреды = ПеременныеСреды();
ПрочитанныеПараметры = Новый Соответствие;
@@ -63,16 +108,16 @@
Результат = Новый Соответствие;
- Если ПустаяСтрока(Префикс) Тогда
+ Если ПустаяСтрока(ЭффективныйПрефикс) Тогда
Результат = ПрочитанныеПараметры;
Иначе
Для каждого ПеременнаяСреды Из ПрочитанныеПараметры Цикл
- Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(Префикс)) Тогда
+ Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(ЭффективныйПрефикс)) Тогда
Результат.Вставить(
- Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(Префикс) + 1)),
+ Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(ЭффективныйПрефикс) + 1)),
ПеременнаяСреды.Значение
);
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os"
index 3e14e84..7a03311 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os"
@@ -2,6 +2,10 @@
Перем Лог;
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+Перем _Настройки; // НастройкиФайловогоПровайдера
+
#Область ПрограммныйИнтерфейс
// Возвращает приоритет провайдера
@@ -10,7 +14,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 1;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровINI - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -19,7 +36,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "ini";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровINI - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -40,29 +70,52 @@
Возврат "ini";
КонецФункции
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// НастройкиФайловогоПровайдера - настройки
+//
+Функция Настройки() Экспорт
+ Возврат _Настройки;
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) внешние настройки
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт
+
+ // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл
+ Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда
+
+ ПрочитанныеПараметры = Новый Соответствие;
- ПрочитанныеПараметры = Новый Соответствие;
+ ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
- ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
+ Если Не ФайлПараметров.Существует() Тогда
+ Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
+ Возврат ПрочитанныеПараметры;
+ КонецЕсли;
- Если Не ФайлПараметров.Существует() Тогда
- Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
+ Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
+ ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
Возврат ПрочитанныеПараметры;
КонецЕсли;
- Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
- ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
+ // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров
+ ЭффективныеНастройки = _Настройки.ПолучитьНастройки();
+ Если НастройкиПровайдера <> Неопределено
+ И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров)
+ И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда
+ ЭффективныеНастройки = НастройкиПровайдера;
+ КонецЕсли;
- Возврат ПрочитанныеПараметры;
+ ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект);
+ Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки);
КонецФункции
@@ -109,3 +162,7 @@
КонецФункции // Прочитать
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini");
+
+_Приоритет = 1;
+_Идентификатор = "ini";
+_Настройки = Новый НастройкиФайловогоПровайдера;
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os"
index 60287a3..6656d15 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os"
@@ -4,6 +4,10 @@
Перем Лог;
Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек;
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+Перем _Настройки; // НастройкиФайловогоПровайдера
+
#Область ПрограммныйИнтерфейс
// Возвращает приоритет провайдера
@@ -12,7 +16,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 1;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровJSON - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -21,7 +38,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "json";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровJSON - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -36,35 +66,61 @@
// Возвращает расширения файлов по умолчанию
//
// Возвращаемое значение:
-// Строка - расширения файлов по умолчанию (yaml yml)
+// Строка - расширения файлов по умолчанию
//
Функция РасширенияФайлов() Экспорт
Возврат "json";
КонецФункции
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// НастройкиФайловогоПровайдера - настройки
+//
+Функция Настройки() Экспорт
+ Возврат _Настройки;
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы
+// собственные настройки провайдера, используются они
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт
+
+ // Если провайдер имеет собственные настройки и задан файл — используем свои настройки
+ // через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую
+ ЭффективныеНастройки = _Настройки.ПолучитьНастройки();
+ Если НастройкиПровайдера <> Неопределено
+ И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров)
+ И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда
+ // Fallback: настройки переданы снаружи (обратная совместимость)
+ ЭффективныеНастройки = НастройкиПровайдера;
+ КонецЕсли;
ПрочитанныеПараметры = Новый Соответствие;
- ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
+ Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда
+ // Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл
+ ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
- Если Не ФайлПараметров.Существует() Тогда
- Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
+ Если Не ФайлПараметров.Существует() Тогда
+ Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
+ Возврат ПрочитанныеПараметры;
+ КонецЕсли;
+
+ Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
+ ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
Возврат ПрочитанныеПараметры;
КонецЕсли;
- Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
- ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
-
- Возврат ПрочитанныеПараметры;
+ // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров
+ ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект);
+ Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки);
КонецФункции
@@ -152,3 +208,7 @@
КонецПроцедуры
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.json");
+
+_Приоритет = 1;
+_Идентификатор = "json";
+_Настройки = Новый НастройкиФайловогоПровайдера;
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os"
index e30fb8f..98862be 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262VAULT.os"
@@ -4,6 +4,10 @@
Перем Лог;
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+Перем _Настройки; // НастройкиПровайдераVault
+
#Область ПрограммныйИнтерфейс
// Возвращает приоритет провайдера
@@ -12,7 +16,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 1;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -21,7 +38,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "vault";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -33,21 +63,38 @@
Возврат "vault";
КонецФункции
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// НастройкиПровайдераVault - настройки
+//
+Функция Настройки() Экспорт
+ Возврат _Настройки;
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы
+// собственные настройки провайдера, используются они
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт
ПрочитанныеПараметры = Новый Соответствие;
- Адрес = НастройкиПровайдера.Адрес;
- Токен = НастройкиПровайдера.Токен;
- Запрос = НастройкиПровайдера.Запрос;
+ // Приоритет у собственных настроек
+ Н = _Настройки.ПолучитьНастройки();
+ Если НастройкиПровайдера <> Неопределено
+ И НЕ ЗначениеЗаполнено(Н.Адрес) Тогда
+ Н = НастройкиПровайдера;
+ КонецЕсли;
+
+ Адрес = Н.Адрес;
+ Токен = Н.Токен;
+ Запрос = Н.Запрос;
Если Не ЗначениеЗаполнено(Адрес) Тогда
Лог.Отладка("Не указан адрес сервера. Чтение невозможно");
@@ -139,3 +186,7 @@
КонецФункции
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.vault");
+
+_Приоритет = 1;
+_Идентификатор = "vault";
+_Настройки = Новый НастройкиПровайдераVault;
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os"
index 79ba9aa..40e97f7 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os"
@@ -3,6 +3,10 @@
Перем Лог;
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+Перем _Настройки; // НастройкиФайловогоПровайдера
+
#Область ПрограммныйИнтерфейс
// Возвращает приоритет провайдера
@@ -11,7 +15,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 1;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровYAML - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -20,7 +37,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "yaml";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровYAML - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -41,46 +71,63 @@
Возврат "yaml yml";
КонецФункции
+// Возвращает объект настроек провайдера
+//
+// Возвращаемое значение:
+// НастройкиФайловогоПровайдера - настройки
+//
+Функция Настройки() Экспорт
+ Возврат _Настройки;
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы
+// собственные настройки провайдера, используются они
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт
- ПрочитанныеПараметры = Новый Соответствие;
+ // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл
+ Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда
- ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
+ ПрочитанныеПараметры = Новый Соответствие;
- ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя;
+ ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
+ ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя;
- Если Не ФайлПараметров.Существует() Тогда
- Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров);
- Возврат ПрочитанныеПараметры;
- КонецЕсли;
-
- Попытка
+ Если Не ФайлПараметров.Существует() Тогда
+ Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров);
+ Возврат ПрочитанныеПараметры;
+ КонецЕсли;
- Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров);
+ Попытка
+ Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров);
+ ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров);
+ Лог.Отладка("Итоговые параметры:");
+ ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры);
+ Исключение
+ Лог.Ошибка("Ошибка чтения настроек
+ |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+ ВызватьИсключение;
+ КонецПопытки;
- ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров);
-
- Лог.Отладка("Итоговые параметры:");
- ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры);
+ Возврат ПрочитанныеПараметры;
+ КонецЕсли;
- Исключение
-
- Лог.Ошибка("Ошибка чтения настроек
- |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
-
- ВызватьИсключение;
-
- КонецПопытки;
+ // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров
+ ЭффективныеНастройки = _Настройки.ПолучитьНастройки();
+ Если НастройкиПровайдера <> Неопределено
+ И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров)
+ И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда
+ ЭффективныеНастройки = НастройкиПровайдера;
+ КонецЕсли;
- Возврат ПрочитанныеПараметры;
+ ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект);
+ Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки);
КонецФункции
@@ -136,4 +183,8 @@
#КонецОбласти
-Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml");
\ No newline at end of file
+Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml");
+
+_Приоритет = 1;
+_Идентификатор = "yaml";
+_Настройки = Новый НастройкиФайловогоПровайдера;
\ No newline at end of file
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os"
index 6952324..824332b 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os"
@@ -3,7 +3,19 @@
Перем Лог;
Перем мПараметры;
-Процедура ПриСозданииОбъекта(Параметры)
+Перем _Приоритет; // Число
+Перем _Идентификатор; // Строка
+
+Процедура ПриСозданииОбъекта(Параметры = Неопределено)
+
+ _Приоритет = 3;
+ _Идентификатор = "map";
+ Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map");
+
+ Если Параметры = Неопределено Тогда
+ мПараметры = Новый Соответствие;
+ Возврат;
+ КонецЕсли;
Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда
ВызватьИсключение
@@ -11,7 +23,6 @@
КонецЕсли;
мПараметры = Параметры;
- Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map");
КонецПроцедуры
@@ -23,7 +34,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
- Возврат 3;
+ Возврат _Приоритет;
+КонецФункции
+
+// Устанавливает приоритет провайдера
+//
+// Параметры:
+// НовыйПриоритет - Число - приоритет
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект
+//
+Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
+ _Приоритет = НовыйПриоритет;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает идентификатор провайдера
@@ -32,7 +56,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
- Возврат "map";
+ Возврат _Идентификатор;
+КонецФункции
+
+// Устанавливает идентификатор провайдера
+//
+// Параметры:
+// НовыйИдентификатор - Строка - идентификатор
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект
+//
+Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
+ _Идентификатор = НовыйИдентификатор;
+ Возврат ЭтотОбъект;
КонецФункции
// Возвращает тип провайдера
@@ -44,15 +81,35 @@
Возврат "memory";
КонецФункции
+// Устанавливает источник параметров
+//
+// Параметры:
+// ИсточникПараметров - Соответствие - источник параметров
+//
+// Возвращаемое значение:
+// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект
+//
+Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт
+
+ Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда
+ ВызватьИсключение
+ "Для провайдера параметров Соответствие, источником параметров может быть только соответствие";
+ КонецЕсли;
+
+ мПараметры = ИсточникПараметров;
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
// Выполняет чтение параметров для провайдера
//
// Параметры:
-// НастройкиПровайдера - Структура - структура настроек провайдера
+// НастройкиПровайдера - Структура - игнорируется
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
-Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
+Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт
Лог.Отладка("Считываю параметры из соответствия");
@@ -60,4 +117,8 @@
КонецФункции
+Функция Настройки() Экспорт
+ Возврат Неопределено;
+КонецФункции
+
#КонецОбласти
diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
index 7ee8028..ae78f1a 100644
--- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
+++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os"
@@ -14,8 +14,8 @@
Перем ПровайдерыПараметров; // Соответствие
-Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера
-Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault
+Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера - для обратной совместимости
+Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault - для обратной совместимости
Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта
@@ -130,11 +130,17 @@
// Добавляет в таблицу провайдеров произвольный класс-провайдер
//
// Параметры:
-// КлассОбъект - Объект - класс провайдера или имя класса
-// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99)
+// КлассОбъект - Объект - класс провайдера
+// Приоритет - Число - числовой приоритет выполнения провайдера
+// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера
+// при коллизии добавляется суффикс #2, #3 и т.д.
//
-Процедура ДобавитьПровайдерПараметров(Знач КлассОбъект,
- Знач Приоритет = Неопределено) Экспорт
+// Возвращаемое значение:
+// Объект - переданный КлассОбъект (для chaining настроек через Настройки())
+//
+Функция ДобавитьПровайдерПараметров(Знач КлассОбъект,
+ Знач Приоритет = Неопределено,
+ Знач ИдентификаторПровайдера = Неопределено) Экспорт
ДобавляемыйПровайдерПараметров = Новый ПровайдерПараметров(КлассОбъект);
@@ -142,9 +148,18 @@
ДобавляемыйПровайдерПараметров.УстановитьПриоритет(Приоритет);
КонецЕсли;
- ПровайдерыПараметров.Вставить(ДобавляемыйПровайдерПараметров.Идентификатор, ДобавляемыйПровайдерПараметров);
+ Если ЗначениеЗаполнено(ИдентификаторПровайдера) Тогда
+ ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ИдентификаторПровайдера);
+ КонецЕсли;
-КонецПроцедуры
+ ФинальныйИдентификатор = ПолучитьСвободныйИдентификатор(ДобавляемыйПровайдерПараметров.Идентификатор);
+ ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ФинальныйИдентификатор);
+
+ ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров);
+
+ Возврат КлассОбъект;
+
+КонецФункции
// Отключает провайдера из таблицы провайдеров
//
@@ -164,6 +179,27 @@
КонецПроцедуры
+// Возвращает класс-провайдер по идентификатору для прямой настройки
+//
+// Параметры:
+// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2")
+//
+// Возвращаемое значение:
+// Произвольный - класс провайдера или Неопределено если не найден
+//
+Функция ПровайдерПоИдентификатору(Знач ИдентификаторПровайдера) Экспорт
+
+ Провайдер = ПровайдерыПараметров[ИдентификаторПровайдера];
+
+ Если Провайдер = Неопределено Тогда
+ Лог.Отладка("Провайдер с идентификатором <%1> не найден", ИдентификаторПровайдера);
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Возврат Провайдер;
+
+КонецФункции
+
// Возвращает объект настройки поиска файлов
//
// Возвращаемое значение:
@@ -350,12 +386,14 @@
ИдентификаторПровайдера = КлассПровайдера.Идентификатор;
+ // Передаём глобальные настройки как fallback (обратная совместимость)
+ // Провайдер использует их только если у него нет собственных настроек
Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда
ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки();
ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда
ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки();
Иначе
- ПараметрыПровайдера = Новый Структура;
+ ПараметрыПровайдера = Неопределено;
КонецЕсли;
Попытка
@@ -438,6 +476,24 @@
КонецПроцедуры
+// Возвращает свободный идентификатор, добавляя суффикс #2, #3 при коллизии
+Функция ПолучитьСвободныйИдентификатор(БазовыйИдентификатор)
+
+ Если ПровайдерыПараметров[БазовыйИдентификатор] = Неопределено Тогда
+ Возврат БазовыйИдентификатор;
+ КонецЕсли;
+
+ Счетчик = 2;
+ Пока Истина Цикл
+ Кандидат = БазовыйИдентификатор + "#" + Счетчик;
+ Если ПровайдерыПараметров[Кандидат] = Неопределено Тогда
+ Возврат Кандидат;
+ КонецЕсли;
+ Счетчик = Счетчик + 1;
+ КонецЦикла;
+
+КонецФункции
+
Функция ПолучитьНастройкуФайловогоПровайдера()
Если НастройкаФайловогоПровайдера = Неопределено Тогда