Структура компонента
Рівень 1
Додаток
SchemaCrawler - бібліотека яка дозволяє зручно читати мета-данні про об’єкти БД
FreeMarker - template-engine для генерації Java коду.
Таблиця метаданих
Єдини джерелом конфігурації бажаного стану регламенту є файл liquibase та settings.yaml.
Оскільки в рамках одного і того ж liquibase файлу об’єкти можуть змінюватись декілька разів - генерація код відбувається на підставі фінального стану БД. Фінальна схема БД може не містити окремі атрибути які містились в файлі liquibase. Для забеспечення передачі таких атрибутів використовується службова таблиця ddm_liquibase_metadata.
Рівень 2
for (String templateName : templates) {
Scope scope = ScopeFactory.create(templateName);
if (scope != null) {
for (Object scopeItem : scope.create(context)) {
Object model = processScope(scopeItem);
renderTemplate(templateName, model);
}
} else {
renderTemplate(templateName, null);
}
}
Контекст - всі метадані які можливо зібрати про схему даних та її об’єкти.
Scope - інтерфейс який дозволяє виділити окремі елементи загального контексту пов’язані з конкретним шаблоном та створити список окремих бінів. (scope items)
Scope Item - проміжний об’єкт який містить вичерпну інформацію для створення template model.
Template model - POJO об’єкт який використовується для заповнення FreeMarker шаблону
Таблиця метаданих - службова таблиця яка створюється liquibase-ext та містить додаткові метадані з xml файлу які не можна отримати безпосередньо із схеми БД. Може використовуватись у при формуванні scope items.
Статичний шаблон - шаблон класу в якому контент є сталим і не залежить від вхідної моделі даних
Динамічний шаблон - шаблон класу логіка методів якого залежить від вхідної моделі даних