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(); // ... }