protected <E extends Entity> void performAction(RemoveBuilder<E> builder, List<E> selectedItems) { if (builder.getBeforeActionPerformedHandler() != null) { BeforeActionPerformedEvent<E> event = new BeforeActionPerformedEvent<>(builder.getOrigin(), selectedItems); builder.getBeforeActionPerformedHandler().accept(event); if (event.isActionPrevented()) { // do not perform action return; } } if (builder.getOperation() == Operation.EXCLUDE) { excludeItems(builder, selectedItems); } else { removeItems(builder, selectedItems); } if (builder.getAfterActionPerformedHandler() != null) { AfterActionPerformedEvent<E> event = new AfterActionPerformedEvent<>(builder.origin, selectedItems); builder.getAfterActionPerformedHandler().accept(event); } }
@SuppressWarnings("unchecked") protected <E extends Entity> CollectionContainer<E> getCollectionContainer(RemoveBuilder<E> builder) { CollectionContainer<E> container; if (builder.getContainer() != null) { container = builder.getContainer(); } else if (builder.getListComponent() != null) { DataUnit items = builder.getListComponent().getItems(); container = ((ContainerDataUnit) items).getContainer(); } else { throw new IllegalArgumentException("Neither container nor list component is specified"); } return container; }
protected <E extends Entity> void triggerAction(RemoveBuilder<E> builder) { List<E> selectedItems = Collections.emptyList(); if (builder.getItems() != null) { selectedItems = builder.getItems(); } else if (builder.getListComponent() != null) { selectedItems = new ArrayList<>(builder.getListComponent().getSelected()); } if (!selectedItems.isEmpty()) { if (builder.isConfirmationRequired()) { performActionWithConfirmation(builder, selectedItems); } else { performAction(builder, selectedItems); } } }
@SuppressWarnings("CodeBlock2Expr") protected <E extends Entity> void performActionWithConfirmation(RemoveBuilder<E> builder, List<E> selectedItems) { ScreenContext screenContext = getScreenContext(builder.getOrigin()); Dialogs dialogs = screenContext.getDialogs(); String title = builder.getConfirmationTitle() != null ? builder.getConfirmationTitle() : messages.getMainMessage("dialogs.Confirmation"); String message = builder.getConfirmationTitle() != null ? builder.getConfirmationTitle() : messages.getMainMessage("dialogs.Confirmation.Remove"); dialogs.createOptionDialog() .withCaption(title) .withMessage(message) .withActions( new DialogAction(DialogAction.Type.YES).withHandler(e -> { performAction(builder, selectedItems); }), new DialogAction(DialogAction.Type.NO).withHandler(e -> { focusListComponent(builder); if (builder.getActionCancelledHandler() != null) { ActionCancelledEvent<E> event = new ActionCancelledEvent<>(builder.getOrigin(), selectedItems); builder.getActionCancelledHandler().accept(event); } }) ) .show(); }
/** * Excludes selected items from the list component without confirmation. Works with nested containers only. * * @param target list component * @param <E> entity type */ public <E extends Entity> void excludeSelected(ListComponent<E> target) { builder(target) .withConfirmation(false) .exclude(); }
/** * Creates a remove builder. * * @param entityClass entity class * @param origin invoking screen * @param <E> type of entity */ public <E extends Entity> RemoveBuilder<E> builder(Class<E> entityClass, FrameOwner origin) { checkNotNullArgument(entityClass); checkNotNullArgument(origin); return new RemoveBuilder<>(origin, entityClass, this::triggerAction); }
protected <E extends Entity> void focusListComponent(RemoveBuilder<E> builder) { if (builder.getListComponent() instanceof Focusable) { ((Focusable) builder.getListComponent()).focus(); } }