InstanceContainer
Интерфейс InstanceContainer – корневой элемент иерархии контейнеров. Он предназначен для работы с единственным экземпляром сущности.
InstanceContainer можно определить в XML-дескрипторе следующим образом:
<instance id="departmentDc"
          class="com.company.onboarding.entity.Department">
    <fetchPlan extends="_base">
        <property name="hrManager" fetchPlan="_base"/>
    </fetchPlan>
    <loader id="departmentDl"/>
</instance>Методы
InstanceContainer содержит следующие методы:
- 
setItem()- устанавливает экземпляр сущности для контейнера.
- 
getItem()- возвращает экземпляр, содержащийся в контейнере. Если контейнер пуст, метод выбрасывает исключение. Используйте этот метод, если вы уверены, что экземпляр был установлен, тогда вам не придётся проверять полученное значение экземпляра наnull.
- 
getItemOrNull()- возвращает экземпляр, содержащийся в контейнере. Если контейнер пуст, метод возвращаетnull. Всегда проверяйте полученное значение наnullперед его использованием.
- 
getEntityMetaClass()- возвращает мета-класс сущности, которая может храниться в этом контейнере.
- 
setFetchPlan- устанавливает фетч-план, с которым сущности должны загружаться в этот контейнер. Обратите внимание, что контейнеры сами по себе не загружают данные, поэтому данный атрибут просто обозначает желаемое представление для загрузчика, соединенного с данным контейнером.
- 
getFetchPlan()- возвращает фетч-план, с которым сущности должны загружаться в этот контейнер.
События
Интерфейс InstanceContainer позволяет регистрировать слушатели для следующих событий:
- 
ItemPropertyChangeEventвызывается, если изменилось значение какого-либо атрибута сущности, находящейся в данный момент в контейнере. Пример подписки на событие для контейнера, объявленного в XML с идентификаторомdepartmentDc:@Subscribe(id = "departmentDc", target = Target.DATA_CONTAINER) public void onDepartmentDcItemPropertyChange( final InstanceContainer.ItemPropertyChangeEvent<Department> event) { Department department = event.getItem(); String changedProperty = event.getProperty(); Object currentValue = event.getValue(); Object previousValue = event.getPrevValue(); // ... }
- 
ItemChangeEventвызывается при смене выбранного экземпляра (илиnull), установленного для данного контейнера. Пример подписки на событие для контейнера, объявленного в XML с идентификаторомdepartmentDc:@Subscribe(id = "departmentDc", target = Target.DATA_CONTAINER) public void onDepartmentDcItemChange(final InstanceContainer.ItemChangeEvent<Department> event) { Department department = event.getItem(); Department previouslySelectedDepartment = event.getPrevItem(); // ... }