MassChange — различия между версиями

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск
(Новая страница: «Класс: {{Class|com.beanexplorer.enterprise.metadata.model.MassChange}} '''MassChange''' (массовое изменение) — возможность п…»)
 
(Метка: visualeditor)
Строка 56: Строка 56:
 
  Entity:matches(#users,#persons) Query
 
  Entity:matches(#users,#persons) Query
 
:Выберет все представления из сущностей с именами users и persons.
 
:Выберет все представления из сущностей с именами users и persons.
 +
 +
== Примеры ==

Версия 16:27, 2 сентября 2014

Класс: MassChange

MassChange (массовое изменение) — возможность применить однотипное изменение к различным элементам дерева проекта по условию. В делеве проекта хранятся в коллекции Mass changes в модуле приложения. На файловой системе хранятся по умолчанию в src/massChanges.yaml. Пример:

- select: Entity#messages Query
  roles: []

Данное массовое изменение выбирает все представления сущности messages и устанавливает им пустой список ролей.

Каждый элемент списка содержит селектор (select) и определение элемента. Для всех элементов, которые соответствуют селектору, производится переопределение указанных свойств точно так же, как в приложении кастомизируется элемент из модуля. В принципе селектор может соответствовать элементам разного типа, в некоторых случаях это сработает. Например:

- select: Entity#blahblah Query, Entity#blahblah Operation
  roles: []

Удалит все роли у всех представлений и операций сущности blahblah. Но лучше разносить подобное на отдельные селекторы.

Селектор пока может выбирать Query, Operation или Entity. Если селектор выбрал что-то другое, будет ошибка.

Селекторы

Синтаксис селекторов похож на CSS. Спецсимволы обрабатываются в соответствии со стандартом CSS. Поддерживаются следующие возможности:

  • Выбор по классу (аналог CSS type selector). Указывается просто название типа элементов. Пока поддерживаются Module, Entity, Query, Operation. Например:
Operation
Такой селектор просто выберет все представления.
  • Выбор по атрибуту (аналог CSS attribute value selectors). Поддерживаются формы [attr=val], [attr^=val], [attr$=val], [attr*=val] для точного совпадения значения, префикса, суффикса и подстроки. Список доступных атрибутов зависит от типа данных и обычно похож на список полей при сериализации в yaml. Например:
[name="messages"]
Такой селектор выберет все элементы с именем messages.
  • Выбор имени. Для сокращения предыдущий селектор можно написать так:
#messages
Но при этом значение уже должно удовлетворять свойствам идентификатора, а не строки (например, нужно экранировать пробелы).
  • Выбор типа. У Entity, Query и Operation бывает тип. Его можно выбрать через [type="..."], но короче через точку:
.table
Выберет все элементы с типом table. Доступные типы:
  • Для Entity: table, dictionary, collection, genericCollection, metadata
  • Для Query: 1D, 1D_unknown, 2D, static, custom, container, javascript
  • Для Operation: java, sql, javafunction, js (=javascript), jsserver (=javascriptserver), dotnet, javadotnet
  • Сложный селектор (CSS: compound selector). Несколько правил, написанных слитно. Выбирается элемент, удовлетворяющий всем правилам. Например:
Entity#messages
Тут два правила: выбрать элементы по классу Entity (то есть сущности) и выбрать элементы с именем messages. В результате будет выбрана сущность с именем messages.
  • Комбинатор-потомок (CSS: descendant combinator). Если перечислить несколько селекторов через пробел, будут выбраны элементы, удовлетворяющие последнему селектору, у которых есть родитель (не обязательно непосредственный), удовлетворяющий предпоследнему, и т. д. Например:
Entity#messages Query
Выберет все представления сущности с именем messages. Другие CSS-комбинаторы (>, +, ~) не поддерживаются.
  • Список селекторов (CSS: selector list). Можно перечислить через запятую несколько селекторов, тогда элемент будет выбран, если он подходит под любой из селекторов. Например:
Query, Operation
Выберет все представления и все операции.
  • Псевдокласс :not (CSS: negation). Выберет элементы, которые не удовлетворяют заданному в скобках селектору. Например:
Entity:not(.table)
Выберет все сущности, тип которых не table.
  • Псевдокласс :matches (CSS: matches). Выберет элементы, которые удовлетворяют хотя бы одному из заданных в скобках селекторов. Например:
Entity:matches(#users,#persons) Query
Выберет все представления из сущностей с именами users и persons.

Примеры