protected ActionsPanel getActions()

in client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java [143:318]


    protected ActionsPanel<RemediationTO> getActions(final IModel<RemediationTO> model) {
        ActionsPanel<RemediationTO> panel = super.getActions(model);

        panel.add(new ActionLink<>() {

            private static final long serialVersionUID = 6193210574968203299L;

            @Override
            public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                modal.header(new ResourceModel("error"));
                modal.setContent(new ExecMessageModal(model.getObject().getError()));
                modal.show(true);
                target.add(modal);
            }
        }, ActionLink.ActionType.VIEW_DETAILS, IdMEntitlement.REMEDIATION_READ);

        if (model.getObject().getOperation() == ResourceOperation.DELETE) {
            String entitlements = StringUtils.join(new String[] {
                IdMEntitlement.REMEDIATION_REMEDY,
                AnyTypeKind.USER.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.USER_DELETE
                : AnyTypeKind.GROUP.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.GROUP_DELETE
                : AnyEntitlement.DELETE.getFor(model.getObject().getAnyType()) }, ",");

            panel.add(new ActionLink<>() {

                private static final long serialVersionUID = 6193210574968203299L;

                @Override
                public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                    try {
                        restClient.remedy(model.getObject().getKey(), model.getObject().getKeyPayload());

                        SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
                        target.add(container);
                    } catch (SyncopeClientException e) {
                        LOG.error("While performing remediation {}", model.getObject().getKey(), e);
                        SyncopeConsoleSession.get().onException(e);
                    }
                    ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
                }
            }, ActionLink.ActionType.CLOSE, entitlements, true);
        } else {
            String entitlements = model.getObject().getOperation() == ResourceOperation.CREATE
                    ? StringUtils.join(new String[] {
                IdMEntitlement.REMEDIATION_REMEDY,
                AnyTypeKind.USER.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.USER_CREATE
                : AnyTypeKind.GROUP.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.GROUP_CREATE
                : AnyEntitlement.CREATE.getFor(model.getObject().getAnyType()) }, ",")
                    : StringUtils.join(new String[] {
                IdMEntitlement.REMEDIATION_REMEDY,
                AnyTypeKind.USER.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.USER_UPDATE
                : AnyTypeKind.GROUP.name().equals(model.getObject().getAnyType())
                ? IdRepoEntitlement.GROUP_UPDATE
                : AnyEntitlement.UPDATE.getFor(model.getObject().getAnyType()) }, ",");

            panel.add(new ActionLink<>() {

                private static final long serialVersionUID = 6193210574968203299L;

                @Override
                public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                    modal.setFormModel(new CompoundPropertyModel<>(model.getObject()));
                    RemediationTO remediationTO = model.getObject();

                    switch (remediationTO.getAnyType()) {
                        case "USER":
                            UserTO newUserTO;
                            UserTO previousUserTO;
                            if (remediationTO.getAnyURPayload() == null) {
                                newUserTO = new UserTO();
                                EntityTOUtils.toAnyTO(remediationTO.getAnyCRPayload(), newUserTO);
                                previousUserTO = null;
                            } else {
                                previousUserTO = userRestClient.read(remediationTO.getAnyURPayload().getKey());
                                newUserTO = AnyOperations.patch(
                                        previousUserTO, (UserUR) remediationTO.getAnyURPayload());
                            }

                            AjaxWizard.EditItemActionEvent<UserTO> userEvent =
                                    new AjaxWizard.EditItemActionEvent<>(newUserTO, target);
                            userEvent.forceModalPanel(new RemediationUserWizardBuilder(
                                    model.getObject(),
                                    previousUserTO,
                                    newUserTO,
                                    anyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                    AnyLayoutUtils.fetch(roleRestClient, List.of(remediationTO.getAnyType())).getUser(),
                                    userRestClient,
                                    pageRef
                            ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
                            send(RemediationDirectoryPanel.this, Broadcast.EXACT, userEvent);
                            break;

                        case "GROUP":
                            GroupTO newGroupTO;
                            GroupTO previousGroupTO;
                            if (remediationTO.getAnyURPayload() == null) {
                                newGroupTO = new GroupTO();
                                EntityTOUtils.toAnyTO(remediationTO.getAnyCRPayload(), newGroupTO);
                                previousGroupTO = null;
                            } else {
                                previousGroupTO = groupRestClient.read(remediationTO.getAnyURPayload().getKey());
                                newGroupTO = AnyOperations.patch(
                                        previousGroupTO, (GroupUR) remediationTO.getAnyURPayload());
                            }

                            AjaxWizard.EditItemActionEvent<GroupTO> groupEvent =
                                    new AjaxWizard.EditItemActionEvent<>(newGroupTO, target);
                            groupEvent.forceModalPanel(new RemediationGroupWizardBuilder(
                                    model.getObject(),
                                    previousGroupTO,
                                    newGroupTO,
                                    anyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                    AnyLayoutUtils.fetch(
                                            roleRestClient, List.of(remediationTO.getAnyType())).getGroup(),
                                    pageRef
                            ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
                            send(RemediationDirectoryPanel.this, Broadcast.EXACT, groupEvent);
                            break;

                        default:
                            AnyObjectTO newAnyObjectTO;
                            AnyObjectTO previousAnyObjectTO;
                            if (remediationTO.getAnyURPayload() == null) {
                                newAnyObjectTO = new AnyObjectTO();
                                EntityTOUtils.toAnyTO(remediationTO.getAnyCRPayload(), newAnyObjectTO);
                                previousAnyObjectTO = null;
                            } else {
                                previousAnyObjectTO = anyObjectRestClient.
                                        read(remediationTO.getAnyURPayload().getKey());
                                newAnyObjectTO = AnyOperations.patch(
                                        previousAnyObjectTO, (AnyObjectUR) remediationTO.getAnyURPayload());
                            }

                            AjaxWizard.EditItemActionEvent<AnyObjectTO> anyObjectEvent =
                                    new AjaxWizard.EditItemActionEvent<>(newAnyObjectTO, target);
                            anyObjectEvent.forceModalPanel(new RemediationAnyObjectWizardBuilder(
                                    model.getObject(),
                                    previousAnyObjectTO,
                                    newAnyObjectTO,
                                    anyTypeRestClient.read(remediationTO.getAnyType()).getClasses(),
                                    AnyLayoutUtils.fetch(roleRestClient, List.of(remediationTO.getAnyType())).
                                            getAnyObjects().get(remediationTO.getAnyType()),
                                    pageRef
                            ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
                            send(RemediationDirectoryPanel.this, Broadcast.EXACT, anyObjectEvent);
                    }
                }
            }, ActionLink.ActionType.EDIT, entitlements);
        }

        panel.add(new ActionLink<>() {

            private static final long serialVersionUID = 6193210574968203299L;

            @Override
            public void onClick(final AjaxRequestTarget target, final RemediationTO ignore) {
                try {
                    restClient.delete(model.getObject().getKey());

                    SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
                    target.add(container);
                } catch (SyncopeClientException e) {
                    LOG.error("While deleting {}", model.getObject().getKey(), e);
                    SyncopeConsoleSession.get().onException(e);
                }
                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
            }
        }, ActionLink.ActionType.DELETE, IdMEntitlement.REMEDIATION_DELETE, true);

        return panel;
    }