in client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvisionPanel.java [82:269]
public ResourceProvisionPanel(
final BaseModal<Serializable> modal,
final ResourceTO resourceTO,
final String adminRealm,
final PageReference pageRef) {
super(modal, pageRef);
this.resourceTO = resourceTO;
setOutputMarkupId(true);
actionTogglePanel = new ActionLinksTogglePanel<>("toggle", pageRef);
add(actionTogglePanel);
wizard = new ProvisionWizardBuilder(resourceTO, adminRealm, connectorRestClient, pageRef);
ListViewPanel.Builder<ResourceProvision> builder = new ListViewPanel.Builder<>(
ResourceProvision.class, pageRef) {
private static final long serialVersionUID = 4907732721283972943L;
@Override
protected ResourceProvision getActualItem(
final ResourceProvision item, final List<ResourceProvision> list) {
return Optional.ofNullable(item).flatMap(resourceProvision -> list.stream()
.filter(in -> ((resourceProvision.getKey() == null && in.getKey() == null)
|| (in.getKey() != null && in.getKey().equals(resourceProvision.getKey())))
&& ((resourceProvision.getAnyType() == null && in.getAnyType() == null)
|| (in.getAnyType() != null && in.getAnyType().equals(resourceProvision.getAnyType())))).
findAny()).orElse(null);
}
@Override
protected void customActionCallback(final AjaxRequestTarget target) {
// change modal footer visibility
send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target));
}
@Override
protected void customActionOnCancelCallback(final AjaxRequestTarget target) {
// change modal footer visibility
send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target));
}
@Override
protected void customActionOnFinishCallback(final AjaxRequestTarget target) {
checkAddButton(adminRealm);
// keep list ordered - SYNCOPE-1154
sortProvisions();
// change modal footer visibility
send(ResourceProvisionPanel.this, Broadcast.BUBBLE, new BaseModal.ChangeFooterVisibilityEvent(target));
}
@Override
protected ActionLinksTogglePanel<ResourceProvision> getTogglePanel() {
return actionTogglePanel;
}
};
provisions = new ArrayList<>();
if (resourceTO.getOrgUnit() != null) {
provisions.add(new ResourceProvision(resourceTO.getOrgUnit()));
}
resourceTO.getProvisions().forEach(provision -> provisions.add(new ResourceProvision(provision)));
// keep list ordered - SYNCOPE-1154
sortProvisions();
builder.setItems(provisions);
builder.includes("anyType", "objectClass", "auxClasses");
builder.setReuseItem(false);
builder.addAction(new ActionLink<>() {
private static final long serialVersionUID = -3722207913631435504L;
@Override
public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
try {
send(ResourceProvisionPanel.this, Broadcast.DEPTH,
new AjaxWizard.NewItemActionEvent<>(provision, 1, target).setTitleModel(
new StringResourceModel("inner.provision.mapping",
ResourceProvisionPanel.this,
Model.of(provision))));
} catch (SyncopeClientException e) {
LOG.error("While contacting resource", e);
SyncopeConsoleSession.get().onException(e);
((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
}
}
}, ActionLink.ActionType.MAPPING, IdMEntitlement.RESOURCE_READ).
addAction(new ActionLink<>() {
private static final long serialVersionUID = -7780999687733432439L;
@Override
public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
try {
resourceRestClient.setLatestSyncToken(resourceTO.getKey(), provision.getAnyType());
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
} catch (Exception e) {
LOG.error("While setting latest sync token for {}/{}",
resourceTO.getKey(), provision.getAnyType(), e);
SyncopeConsoleSession.get().onException(e);
}
((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
}
}, ActionLink.ActionType.SET_LATEST_SYNC_TOKEN, IdMEntitlement.RESOURCE_UPDATE).
addAction(new ActionLink<>() {
private static final long serialVersionUID = -7780999687733432439L;
@Override
public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
try {
resourceRestClient.removeSyncToken(resourceTO.getKey(), provision.getAnyType());
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
} catch (Exception e) {
LOG.error("While removing sync token for {}/{}",
resourceTO.getKey(), provision.getAnyType(), e);
SyncopeConsoleSession.get().onException(e);
}
((BaseWebPage) pageRef.getPage()).getNotificationPanel().refresh(target);
}
}, ActionLink.ActionType.REMOVE_SYNC_TOKEN, IdMEntitlement.RESOURCE_UPDATE).
addAction(new ActionLink<>() {
private static final long serialVersionUID = -3722207913631435544L;
@Override
public void onClick(final AjaxRequestTarget target, final ResourceProvision provision) {
if (provision.getOrgUnitTO() != null) {
resourceTO.setOrgUnit(null);
} else if (provision.getProvisionTO() != null) {
resourceTO.getProvisions().remove(provision.getProvisionTO());
}
provisions.remove(provision);
checkAddButton(adminRealm);
send(ResourceProvisionPanel.this, Broadcast.DEPTH, new ListViewReload<>(target));
}
}, ActionLink.ActionType.DELETE, IdMEntitlement.RESOURCE_UPDATE, true);
builder.addNewItemPanelBuilder(wizard);
list = builder.build("provision");
list.setReadOnly(!SyncopeConsoleSession.get().owns(IdMEntitlement.RESOURCE_UPDATE, adminRealm));
addAjaxLink = new AjaxLink<>("add") {
private static final long serialVersionUID = -7978723352517770644L;
@Override
public void onClick(final AjaxRequestTarget target) {
send(ResourceProvisionPanel.this, Broadcast.BREADTH,
new ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
objectTypeTogglePanel.setHeaderLabel(target);
objectTypeTogglePanel.toggle(target, true);
}
};
list.addOrReplaceInnerObject(addAjaxLink);
add(list);
// ----------------------------------------------------------------------
// toggle panel, used to choose 'type' before starting wizard - SYNCOPE-1167
final ResourceProvision provision = new ResourceProvision();
provision.setAnyType("");
objectTypeTogglePanel = new ObjectTypeTogglePanel("objectTypeToggle", provision, getAnyTypes(), pageRef) {
private static final long serialVersionUID = 7878063325027015067L;
@Override
protected void onSubmit(final String type, final AjaxRequestTarget target) {
provision.setAnyType(type);
send(list, Broadcast.BREADTH,
new ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
send(list, Broadcast.DEPTH,
new AjaxWizard.NewItemActionEvent<>(provision, target));
wizard.setObjectClassModelObject(type);
}
};
checkAddButton(adminRealm);
add(objectTypeTogglePanel);
}