Источники объектов

Источник объектов - позволяет работать с набором объектов. А именно:

  • Добавлять новый объект к набору
  • Удалять выделенные в наборе объекты
  • Изменять выделенные в наборе объекты (если в наборе выделенно несколько объектов, то при изменении значения свойства значения изменятся в каждом из выделенных объектов)
  • Задавать строку запроса которая будет использована для получения набора объектов
  • Настройка свойств объекта которые могут использоваться для фильтрации набора объектов
  • Так же к источникам объектов можно добалять слушатели и применять агрегатные функции к свойствам доменного объекта.
  • Между источниками объектов можно формировать связи типа master-detail

Описание точки конфигурации org.weda.store.ObjectSources

Задача конфигураци - регистрация источников объектов

Структура:

            
            <objectSource ...>
                <query ...>
                    строка_запроса
                </query>
                <filter ...>
                    <alias .../>
                    <element .../>
                    <static-element .../>
                </filter>
                <detailObjectSource .../>
                <summary>
                    <element .../>
                </summary>
                <listeners>
                    <listener .../>
                </listeners>
            </objectSource>
            
        

Элементы конфигурации:

Название элементаОписание
objectSource Создает источник объектов

Атрибуты элемента

Атрибут Описание Может быть пустым?
nameУникальное имя источника объектовНет
baseClassКласс являющийся базовым для источника данныхНет
baseClassPosition Позиция базового класса в строке (можно сказать позиция объекта в операторе select запроса). Нумерация начинается с нуля. Нет
baseClassAlias Псевдоним данного объекта в строке запроса. Например в запросе

from budget.domain.MoneyOperation moneyOperation

псевдонимом будет moneyOperation
Нет
readOnly Если установить в true тогда источник не разрешит изменять данные в нем. (по умолчанию false) Да



Название элементаОписание
query Создает запрос, используя который источник объектов получает список объектов. Строка запроса задается в теле элемента.

Атрибуты элемента

Атрибут Описание Может быть пустым?
maxRowsМаксимальное количество строк которое можно получить выполняя запрос. По умолчанию 500Да
fetchSizeПорциями по столько будут доставаться строки из БД. По умолчанию 40Да
timeoutМаксимальное время выполнения запроса (сек.). По умолчанию 60Нет



Название элементаОписание
filter Конфигурирует фильтр источника объектов. Подробнее о фильтрах можно узнать в разделе Фильтры

Атрибуты элемента

Атрибут Описание Может быть пустым?
namesListНазвание списка имен который будет использован для формирования элементов фильтраДа



Название элементаОписание
alias Описывает псевдоним для объекта, используемый в запросе

Атрибуты элемента

Атрибут Описание Может быть пустым?
aliasПсевдоним объектаНет
objectClassТип объекта для которого описывается псевдонимНет



Название элементаОписание
static-element Описывает элемент фильтра значение которого можно задать прямо в конфигурации (атрибут expression). Значение фильтра можно изменять программно, но нельзя изменять из пользовательского интерфейса.

Атрибуты элемента

Атрибут Описание Может быть пустым?
propertyНазвание свойства объектаНет
objectAliasНазвание псевдонима. Если значение атрибута не установлено, тогда baseClassAliasДа
staticExpressionЗначение фильтраНет
parameter Название параметра в запросе в который будет установлено выражение фильтра. Параметр задается в запросе в виде :название_параметра

Например:

where company.employeCount > :param
Да



Название элементаОписание
element Описывает элемент фильтра значение которого может изменяться из пользовательского интерфейса

Атрибуты элемента

Атрибут Описание Может быть пустым?
propertyНазвание свойства объектаНет
objectAliasНазвание псевдонима. Если значение атрибута не установлено, тогда baseClassAliasДа
parameter Название параметра в запросе в который будет установлено выражение фильтра. Параметр задается в запросе в виде :название_параметра

Например:

where company.employeCount > :param
Да



Название элементаОписание
detailObjectSource Задает связь типа master-detail между источниками объектов. Взаимосвязь активируется автоматически при редактировании объекта (но только одного) выделенного в источнике и деактивируется после завершения редактирования.

Атрибуты элемента

Атрибут Описание Может быть пустым?
nameИмя подчиненного источника объектовНет
property Свойство основного класса в подчиненном источнике объектов по которому будет создан элемент фильтра. В качестве значения будет выступать либо объект основного класса выделенной строки в главном источнике или значение его свойства, если задано значение атрибута masterProperty Нет
masterProperty Имя свойства основного класса (baseClass) значение которого будет использовано для фильтрации данных в подчиненном источнике объектов. Да
refreshOnActivate Если установить в true тогда после активации взаимосвязи данные подчиненный источник данных будет открыт. Нет



Название элементаОписание
summary Позволяет применить агрегатные функции к источнику объектов. Например можно подсчитать сумму для заданного свойства определенного объекта.



Название элементаОписание
element (для summary) Позволяет применить агрегатную функцию к свойству объекта.

Атрибуты элемента

Атрибут Описание Может быть пустым?
propertyИмя свойства объектаНет
objectPosition Позиция объекта в строке данных источника. По умолчанию baseClassPosition Да
function Название агрегатной функции Нет



Название элементаОписание
listener Регистрирует слушателя событий происходящих в источнике объектов. Функциональность summary реализована с помощью этого механизма.

Атрибуты элемента

Атрибут Описание Может быть пустым?
object Ссылка на объект слушателя. Каждый слушатель должен релизовывать интерфейс org.weda.store.ObjectSourceListener Нет

Пример конфигурации:

            
    <contribution configuration-id="org.weda.store.ObjectSources">
        <objectSource 
            name="moneyOperation" baseClass="domain.MoneyOperation" 
            baseClassPosition="0" baseClassAlias="money"
        >
            <query maxRows="100" fetchSize="50" timeout="60">
                from budget.domain.MoneyOperation as money
                where 1=1
                {#}
                order by money.operationDate desc
            </query>
            <filter namesList="moneyOperation-filter"/>
            <summary>
                <element property="amount" function="sum"/>
            </summary>
            <listeners>
                <listener object="instance:listeners.MoneyOperationObjectSourceListener"/>
            </listeners>
        </objectSource>
    </contribution>
            
        

Доступ к сервису

Имя сервиса в среде HiveMind - org.weda.store.ObjectSourceRegistry