protected <E extends Entity> void removeItems(RemoveBuilder<E> builder, List<E> selectedItems) { FrameOwner origin = builder.getOrigin(); ScreenData screenData = UiControllerUtils.getScreenData(origin); CollectionContainer<E> container = getCollectionContainer(builder); commitIfNeeded(selectedItems, container, screenData); if (selectedItems.size() == 1) { container.getMutableItems().remove(selectedItems.get(0)); } else { container.getMutableItems().removeAll(selectedItems); } focusListComponent(builder); }
@SuppressWarnings("unchecked") protected <E extends Entity> void excludeItems(RemoveBuilder<E> builder, List<E> selectedItems) { CollectionContainer<E> container = getCollectionContainer(builder); if (!(container instanceof Nested)) { throw new IllegalArgumentException("Exclude action supports only Nested containers"); } InstanceContainer masterDc = ((Nested) container).getMaster(); String property = ((Nested) container).getProperty(); Entity masterItem = masterDc.getItem(); MetaProperty metaProperty = masterItem.getMetaClass().getPropertyNN(property); MetaProperty inverseMetaProperty = metaProperty.getInverse(); if (inverseMetaProperty != null && !inverseMetaProperty.getRange().getCardinality().isMany()) { Class inversePropClass = extendedEntities.getEffectiveClass(inverseMetaProperty.getDomain()); Class dcClass = extendedEntities.getEffectiveClass(container.getEntityMetaClass()); if (inversePropClass.isAssignableFrom(dcClass)) { // update reference for One-To-Many for (Entity item : selectedItems) { item.setValue(inverseMetaProperty.getName(), null); } } } container.getMutableItems().removeAll(selectedItems); focusListComponent(builder); }