Created
April 24, 2017 06:11
-
-
Save Stepa86/210386940e7f45a25a69fe28028bd56a to your computer and use it in GitHub Desktop.
Пример package-loader.os для отладки подключений библиотек
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Перем ВыводитьЛог; | |
Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ) | |
ВыводитьЛог = Ложь; | |
ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config")); | |
Если ФайлМанифеста.Существует() Тогда | |
СтандартнаяОбработка = Ложь; | |
ОбработатьМанифест(ФайлМанифеста.ПолноеИмя, Путь, Отказ); | |
Иначе | |
ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ); | |
КонецЕсли; | |
КонецПроцедуры | |
Процедура ОбработатьМанифест(Знач Файл, Знач Путь, Отказ) | |
_Сообщить( "Подключаю манифест " + Путь, СтатусСообщения.Attention); | |
Чтение = Новый ЧтениеXML; | |
Чтение.ОткрытьФайл(Файл); | |
Чтение.ПерейтиКСодержимому(); | |
Если Чтение.ЛокальноеИмя <> "package-def" Тогда | |
Отказ = Истина; | |
Чтение.Закрыть(); | |
Возврат; | |
КонецЕсли; | |
Пока Чтение.Прочитать() и Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл | |
Если Чтение.ЛокальноеИмя = "class" Тогда | |
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file")); | |
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда | |
Идентификатор = Чтение.ЗначениеАтрибута("name"); | |
Если Не ПустаяСтрока(Идентификатор) Тогда | |
_Сообщить( " Подключаю Класс " + Идентификатор + " - " + ФайлКласса.ПолноеИмя, СтатусСообщения.Ordinary); | |
ДобавитьКласс(ФайлКласса.ПолноеИмя, Идентификатор); | |
КонецЕсли; | |
Иначе | |
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; | |
КонецЕсли; | |
Чтение.Прочитать(); // в конец элемента | |
КонецЕсли; | |
Если Чтение.ЛокальноеИмя = "module" Тогда | |
ФайлКласса = Новый Файл(Путь + "/" + Чтение.ЗначениеАтрибута("file")); | |
Если ФайлКласса.Существует() и ФайлКласса.ЭтоФайл() Тогда | |
Идентификатор = Чтение.ЗначениеАтрибута("name"); | |
Если Не ПустаяСтрока(Идентификатор) Тогда | |
_Сообщить( " Подключаю Модуль " + Идентификатор + " - " + ФайлКласса.ПолноеИмя, СтатусСообщения.Ordinary); | |
ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор); | |
КонецЕсли; | |
Иначе | |
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте"; | |
КонецЕсли; | |
Чтение.Прочитать(); // в конец элемента | |
КонецЕсли; | |
КонецЦикла; | |
Чтение.Закрыть(); | |
КонецПроцедуры | |
Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ) | |
_Сообщить( "Подключаю по соглашению " + Путь, СтатусСообщения.Attention); | |
КаталогКлассов = Новый Файл(ОбъединитьПути(Путь, "Классы")); | |
КаталогМодулей = Новый Файл(ОбъединитьПути(Путь, "Модули")); | |
Если КаталогКлассов.Существует() Тогда | |
Файлы = НайтиФайлы(КаталогКлассов.ПолноеИмя, "*.os"); | |
Для Каждого Файл Из Файлы Цикл | |
_Сообщить( " Подключаю Класс " + Файл.ИмяБезРасширения + " - " + Файл.ПолноеИмя, СтатусСообщения.Ordinary); | |
СтандартнаяОбработка = Ложь; | |
ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения); | |
КонецЦикла; | |
КонецЕсли; | |
Если КаталогМодулей.Существует() Тогда | |
Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os"); | |
Для Каждого Файл Из Файлы Цикл | |
СтандартнаяОбработка = Ложь; | |
_Сообщить( " Подключаю Модуль " + Файл.ИмяБезРасширения + " - " + Файл.ПолноеИмя, СтатусСообщения.Ordinary); | |
ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения); | |
КонецЦикла; | |
КонецЕсли; | |
КонецПроцедуры | |
Процедура _Сообщить( Знач пТекст, Знач пСтатус = Неопределено) | |
Если ВыводитьЛог Тогда | |
Сообщить( пТекст, пСтатус ); | |
КонецЕсли; | |
КонецПроцедуры |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment