Контейнеры свойств
Контейнеры InstancePropertyContainer
и CollectionPropertyContainer
предназначены для работы с единичными экземплярами и коллекциями экземпляров сущностей, которые являются атрибутами других сущностей.
Контейнеры свойств можно определить в XML-дескрипторе следующим образом:
<instance id="userDc"
class="com.company.onboarding.entity.User"> (1)
<fetchPlan extends="_base">
<property name="department" fetchPlan="_base"/>
<property name="steps" fetchPlan="_base">
<property name="step" fetchPlan="_base"/>
</property>
<property name="hobbies" fetchPlan="_base"/>
</fetchPlan>
<loader/>
<collection id="stepsDc" property="steps"/> (2)
</instance>
1 | InstanceContainer содержит экземпляр сущности User , имеющей атрибут steps . |
2 | CollectionPropertyContainer содержит коллекцию экземпляров сущности UserStep , находящуюся в атрибуте steps сущности User . |
Методы
Контейнеры свойств (property containers) реализуют интерфейс Nested
, в котором определены методы получения контейнера-владельца и имени его атрибута, к которому привязан контейнер свойства. В примере с сущностями User
и UserStep
контейнером-владельцем будет тот, в котором хранится экземпляр User
.
InstancePropertyContainer
работает напрямую с атрибутом сущности-владельца. Это значит, что при вызове метода setItem()
значение будет установлено для атрибута соответствующей сущности-владельца, и будет вызван слушатель ее события ItemPropertyChangeEvent
.
CollectionPropertyContainer
содержит копию коллекции сущности-владельца. Ниже описаны методы CollectionPropertyContainer
:
-
getMutableItems()
возвращает изменяемый список сущностей, и изменения списка отражаются на связанном свойстве. То есть, если вы удалите элемент из этого списка, атрибут сущности-владельца будет изменен, а для контейнера-владельца будет вызван слушательItemPropertyChangeEvent
. -
getDisconnectedItems()
возвращает изменяемый список сущностей, но изменения списка не отражаются на связанном свойстве. То есть, если вы удалите элемент из этого списка, атрибут сущности-владельца изменен не будет. -
setItems()
устанавливает коллекцию экземпляров сущностей для контейнера и связанного с ним свойства сущности-владельца. Для контейнера-владельца вызывается слушательItemPropertyChangeEvent
. -
setDisconnectedItems()
устанавливает коллекцию экземпляров сущностей для контейнера, но связанное свойство сущности-владельца не изменяется.
Методы getDisconnectedItems()
и setDisconnectedItems()
можно использовать для временного изменения отображения коллекции в UI, например, для фильтрации таблицы:
@ViewComponent
private CollectionPropertyContainer<UserStep> stepsDc;
@Autowired
private MetadataTools metadataTools;
private void filterByDueDate(LocalDate dueDate) {
List<UserStep> filtered = getEditedEntity().getSteps().stream()
.filter(userStep -> userStep.getDueDate().isAfter(dueDate))
.collect(Collectors.toList());
stepsDc.setDisconnectedItems(filtered);
}
private void resetFilter() {
stepsDc.setDisconnectedItems(getEditedEntity().getSteps());
}