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;
}