InstanceContainer

Интерфейс InstanceContainer – корневой элемент иерархии контейнеров. Он предназначен для работы с единственным экземпляром сущности.

InstanceContainer можно определить в XML-дескрипторе следующим образом:

<data>
    <instance id="customerDc"
              class="ui.ex1.entity.Customer">
        <fetchPlan extends="_base">
            <property name="city" fetchPlan="_base"/>
            <property name="favouriteBrands" fetchPlan="_base"/>
        </fetchPlan>
        <loader/>
        <collection id="favouriteBrandsDc" property="favouriteBrands"/>
    </instance>
</data>

Методы

InstanceContainer содержит следующие методы:

  • setItem() - устанавливает экземпляр сущности для контейнера.

  • getItem() - возвращает экземпляр, содержащийся в контейнере. Если контейнер пуст, метод выбрасывает исключение. Используйте этот метод, если вы уверены, что экземпляр был установлен, тогда вам не придётся проверять полученное значение экземпляра на null.

  • getItemOrNull() - возвращает экземпляр, содержащийся в контейнере. Если контейнер пуст, метод возвращает null. Всегда проверяйте полученное значение на null перед его использованием.

  • getEntityMetaClass() - возвращает мета-класс сущности, которая может храниться в этом контейнере.

  • setFetchPlan - устанавливает фетч-план, с которым сущности должны загружаться в этот контейнер. Обратите внимание, что контейнеры сами по себе не загружают данные, поэтому данный атрибут просто обозначает желаемое представление для загрузчика, соединенного с данным контейнером.

  • getFetchPlan() - возвращает фетч-план, с которым сущности должны загружаться в этот контейнер.

События

Интерфейс InstanceContainer позволяет регистрировать слушатели для следующих событий:

  • ItemPropertyChangeEvent вызывается, если изменилось значение какого-либо атрибута сущности, находящейся в данный момент в контейнере. Пример подписки на событие для контейнера, объявленного в XML с идентификатором customerDc:

    @Subscribe(id = "customerDc", target = Target.DATA_CONTAINER)
    public void onCustomerDcItemPropertyChange(
            InstanceContainer.ItemPropertyChangeEvent<Customer> event) {
        Customer customer = event.getItem();
        String changedProperty = event.getProperty();
        Object currentValue = event.getValue();
        Object previousValue = event.getPrevValue();
        // ...
    }
  • ItemChangeEvent вызывается при смене выбранного экземпляра (или null), установленного для данного контейнера. Пример подписки на событие для контейнера, объявленного в XML с идентификатором customerDc:

    @Subscribe(id = "customerDc", target = Target.DATA_CONTAINER)
    public void onCustomerDcItemChange(InstanceContainer.ItemChangeEvent<Customer> event) {
        Customer customer = event.getItem();
        Customer previouslySelectedCustomer = event.getPrevItem();
        // ...
    }