Skip to main content

Файлы конфигураций

В N2O Framework разработка WEB страниц и их связей с данными осуществляется при помощи N2O файлов конфигураций.

Расположение#

Файлы конфигураций располагаются в папке проекта или в папке модуля. По умолчанию /src/main/resources/META-INF/conf.

Любой файл из этой папки может быть переопределен одноименным файлом в папке расширений. Путь к папке расширений задаётся настройкой n2o.config.path. По умолчанию: [USER_HOME]/.n2o/conf.

Формат файлов#

Конфигурации N2O имеют определенный формат имени файла:

[id].[type].[ext]

id

Уникальный идентификатор метаданной в рамках типа

type

Тип конфигурации

ext

Способ задания метаданной (.xml или .groovy)

Типы конфигураций#

Конфигурации N2O иерархически структурированы по типу. Все типы конфигураций наследуются от java интерфейса SourceMetadata.

Типы конфигураций

ТипОписаниеXML СхемаJava класс
pageСтраницаhttp://n2oapp.net/framework/config/schema/page-3.0N2oPage
widgetВиджетhttp://n2oapp.net/framework/config/schema/widget-4.0N2oWidget
objectОбъектhttp://n2oapp.net/framework/config/schema/object-4.0N2oObject
queryВыборкаhttp://n2oapp.net/framework/config/schema/query-4.0N2oQuery
fieldsetФилдсетhttp://n2oapp.net/framework/config/schema/fieldset-4.0N2oFieldSet
applicationСтруктура приложенияhttp://n2oapp.net/framework/config/schema/application-1.0N2oApplication
menuМенюhttp://n2oapp.net/framework/config/schema/menu-1.0N2oSimpleMenu
accessСхема доступаhttp://n2oapp.net/framework/config/schema/access-2.0N2oAccessSchema

Структура XML файла#

В теле XML файла первой строчкой должен идти заголовок xml:

<?xml version='1.0' encoding='UTF-8'?>

Далее корневой элемент метаданной и XML схема, определяющая её структуру:

<?xml version='1.0' encoding='UTF-8'?><object xmlns="http://n2oapp.net/framework/config/schema/object-4.0">  ...</object>
note

В наименовании схемы содержится её версия. Это позволяет схемам эволюционировать с полным сохранением обратной совместимости.

Структура Groovy файла#

Файлы конфигураций можно создавать с помощью groovy скриптов.

Для подключения groovy необходимо добавить зависимость:

<dependency>  <groupId>org.codehaus.groovy</groupId>  <artifactId>groovy-all</artifactId>  <version>2.5.7</version></dependency>
Пример файла index.page.groovy
import net.n2oapp.framework.api.metadata.*
page = new N2oSimplePage()page.widget = new N2oForm()page.widget.name = 'Моя страница на groovy'

В groovy скрипте необходимо создать объект конфигурации, соответствующей её типу.

Ссылки на другие файлы#

Конфигурации могут иметь ссылки друг на друга. Для ссылки используются элементы или атрибуты XML с окончанием: -id. В качестве значения ссылки используется идентификатор файла:

<query object-id="myObject">  ...</query>

Библиотеки компонентов#

Внутри некоторых XML элементов разрешается вставлять элементы из другой схемы:

<set xmlns="http://n2oapp.net/framework/config/schema/fieldset-4.0"     xmlns:ctrl="http://n2oapp.net/framework/config/schema/control-2.0">  <ctrl:input-text>...</ctrl:input-text></set>

Такие места называются местами подключения библиотек компонентов.

warning

В схеме элемента, допускающего библиотеки расширения, должен стоять элемент: <xs:any namespace="##other"/>

Вложенные конфигурации#

Внутри некоторых XML элементов используются вложенные элементы другого типа.

Например, страница <simple-page> с таблицей <table> внутри.

<simple-page>  <!-- Вложенный виджет -->  <table>    <!-- Элементы вложенного виджета -->    <columns>...</columns>    ...  </table></simple-page>

Можно сослаться на внешний файл используя атрибут ref-id:

<simple-page>  <table ref-id="myTable"/><!-- Ссылка на внешний виджет --></simple-page>

Переопределение свойств#

Во вложенных конфигурациях можно переопределить некоторые свойства заданные по ссылке:

<simple-page>  <table ref-id="myTable" name="Моя таблица">    <!-- свойство name, заданное здесь, переопределит name, заданный в myTable -->  </table></simple-page>

Расширенные свойства#

В N2O XML файлы можно добавить свойства, специфичные для прикладного проекта. Для этого нужно создать XSD схему расширений, подключить её к XML файлу и вставить атрибуты в те элементы, которые допускают расширения:

Схема расширений
<?xml version="1.0" encoding="UTF-8"?><xs:schema targetNamespace="http://myproject.net/config/schema/ext-props-1.0"           xmlns:xs="http://www.w3.org/2001/XMLSchema">    <xs:attribute name="prop1" type="xs:string"/>    <xs:attribute name="prop2" type="xs:string"/></xs:schema>
Подключение схемы расширений
<?xml version='1.0' encoding='UTF-8'?><page xmlns="http://n2oapp.net/framework/config/schema/page-3.0"  xmlns:ext="http://myproject.net/config/schema/ext-props-1.0"  ext:prop1="value1"  ext:prop2="value2">  ...</page>
warning

В схеме элемента, допускающего расширения, должен стоять атрибут: <xs:anyAttribute/>

Расширенные свойства считываются автоматически в свойство properties. К ним можно получить доступ из трансформации метаданных или процессинга данных.

Плейсхолдеры#

В любых значениях атрибутов и элементов XML можно использовать плейсхолдер ${property}, где property - это ссылка на настройки и локализацию.

В некоторых атрибутах и элементах (как правило в value и default-value) допускается использование:

  1. плейсхолдер #{context}, где context - это название свойства в контексте текущего пользователя default-value="#{username}";

  2. плейсхолдер json объекта, только помещенного в двойные фигурные скобки {{"id":"1", "name":"Ivan"}};

  3. плейсхолдер c js выражением {moment()};

  4. плейсхолдер для задания значений в атрибутах {field} через ссылку на значение другого поля default-value="{field}", завязав таким образом метаданные на данные;

  5. плейсхолдер для экранирования типа значения атрибутов. Тип значения вычисляется по самому значению, например, поле name в <option id="i1" name="true"/> будет автоматически приведено к Boolean. Чтобы иметь возможность привести значение к строке, добавьте в начало и конец ' символ экранирования: "'true'" -> "true"; "'123'" -> "123". Чтобы экранировать произвольное количество одинарных кавычек в начале и конце, добавьте перед ними символ ': "'''123'''" -> "''123''".

Валидация конфигураций#

Все файлы конфигураций проверяются на корректность связей и логики. Проверка инициируется в runtime при первой загрузке файла в приложение.

Если обнаружена ошибка, файл помечается некорректным. При открытии страницы, связанной с некорректным файлом, отобразится сообщение валидации.

За валидацию отвечают java классы реализующие интерфейс SourceValidator<T>.

@Componentclass MyPageValidator implements SourceValidator<N2oPage> {  @Override  public void validate(N2oPage source,                       ValidateProcessor p) {     ...  }}