This is an automated email from the ASF dual-hosted git repository.
skylark17 pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new c2c7852 [SYNCOPE-957] Added missing sections for reconciliation
process
c2c7852 is described below
commit c2c7852edc2427e6e3b25c72ac94dc050fe0700b
Author: skylark17 <[email protected]>
AuthorDate: Tue Dec 10 14:58:32 2019 +0100
[SYNCOPE-957] Added missing sections for reconciliation process
---
.../console/panels/LinkedAccountModalPanel.java | 179 +++++++++++++++------
.../panels/LinkedAccountsStatusModalPanel.java | 40 +++++
.../client/console/panels/UserDirectoryPanel.java | 21 ++-
.../console/status/AnyStatusDirectoryPanel.java | 29 ++++
.../client/console/status/ReconTaskPanel.java | 4 +-
.../wizards/any/LinkedAccountDetailsPanel.java | 27 ++--
.../wizards/any/LinkedAccountWizardBuilder.java | 19 +--
.../console/panels/LinkedAccountModalPanel.html | 4 +-
...el.html => LinkedAccountsStatusModalPanel.html} | 5 +-
.../syncope/core/logic/ReconciliationLogic.java | 2 +-
10 files changed, 242 insertions(+), 88 deletions(-)
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
index be0a70c..da7569d 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.panels;
import static org.apache.syncope.client.console.panels.AbstractModalPanel.LOG;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -30,6 +29,8 @@ import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.pages.BasePage;
import org.apache.syncope.client.console.rest.AnyTypeRestClient;
import org.apache.syncope.client.console.rest.UserRestClient;
+import org.apache.syncope.client.console.status.ReconStatusPanel;
+import org.apache.syncope.client.console.status.ReconTaskPanel;
import
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import
org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksTogglePanel;
@@ -40,6 +41,8 @@ import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.patch.LinkedAccountPatch;
import org.apache.syncope.common.lib.patch.UserPatch;
import org.apache.syncope.common.lib.to.LinkedAccountTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.common.lib.types.PatchOperation;
import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -47,10 +50,12 @@ import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
-public class LinkedAccountModalPanel extends AbstractModalPanel<Serializable> {
+public class LinkedAccountModalPanel extends Panel implements ModalPanel {
private static final long serialVersionUID = -4603032036433309900L;
@@ -60,27 +65,29 @@ public class LinkedAccountModalPanel extends
AbstractModalPanel<Serializable> {
private final AjaxLink<LinkedAccountTO> addAjaxLink;
- protected ActionLinksTogglePanel<LinkedAccountTO> actionTogglePanel;
+ private ActionLinksTogglePanel<LinkedAccountTO> actionTogglePanel;
private UserRestClient userRestClient = new UserRestClient();
private final List<LinkedAccountTO> linkedAccountTOs;
public LinkedAccountModalPanel(
- final BaseModal<Serializable> modal,
- final UserTO userTO,
- final PageReference pageRef) {
+ final BaseModal<?> baseModal,
+ final IModel<UserTO> model,
+ final PageReference pageRef,
+ final boolean recounciliationOnly) {
- super(modal, pageRef);
+ super(BaseModal.getContentId(), model);
- UserTO readUserTO = userRestClient.read(userTO.getKey());
+ final MultilevelPanel mlp = new MultilevelPanel("mlpContainer");
+ mlp.setOutputMarkupId(true);
setOutputMarkupId(true);
actionTogglePanel = new ActionLinksTogglePanel<>("toggle", pageRef);
add(actionTogglePanel);
- wizard = new LinkedAccountWizardBuilder(readUserTO.getKey(), pageRef);
+ wizard = new LinkedAccountWizardBuilder(model, pageRef);
final ListViewPanel.Builder<LinkedAccountTO> builder = new
ListViewPanel.Builder<LinkedAccountTO>(
LinkedAccountTO.class, pageRef) {
@@ -117,9 +124,8 @@ public class LinkedAccountModalPanel extends
AbstractModalPanel<Serializable> {
checkAddButton();
linkedAccountTOs.clear();
-
linkedAccountTOs.addAll(userRestClient.read(userTO.getKey()).getLinkedAccounts());
+ linkedAccountTOs.addAll(model.getObject().getLinkedAccounts());
sortLinkedAccounts();
-
ListViewPanel.class.cast(list).refreshList(linkedAccountTOs);
// change modal footer visibility
@@ -132,7 +138,7 @@ public class LinkedAccountModalPanel extends
AbstractModalPanel<Serializable> {
}
};
- linkedAccountTOs = new ArrayList<>(readUserTO.getLinkedAccounts());
+ linkedAccountTOs = new
ArrayList<>(model.getObject().getLinkedAccounts());
sortLinkedAccounts();
builder.setItems(linkedAccountTOs);
@@ -146,57 +152,131 @@ public class LinkedAccountModalPanel extends
AbstractModalPanel<Serializable> {
@Override
public void onClick(final AjaxRequestTarget target, final
LinkedAccountTO linkedAccountTO) {
- try {
- send(LinkedAccountModalPanel.this, Broadcast.DEPTH,
- new
AjaxWizard.NewItemActionEvent<>(linkedAccountTO, 1, target).setResourceModel(
- new
StringResourceModel("inner.edit.linkedAccount",
- LinkedAccountModalPanel.this,
- Model.of(linkedAccountTO))));
- } catch (SyncopeClientException e) {
- LOG.error("While contacting linked account", e);
- SyncopeConsoleSession.get().error(
- StringUtils.isBlank(e.getMessage()) ?
e.getClass().getName() : e.getMessage());
- ((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
+ mlp.next(linkedAccountTO.getResource(),
+ new ReconStatusPanel(
+ linkedAccountTO.getResource(),
+ model.getObject().getType(),
+ model.getObject().getKey()),
+ target);
+ target.add(mlp);
+
+ ((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
+ send(LinkedAccountModalPanel.this, Broadcast.BREADTH,
+ new
ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
+ }
+ }, ActionLink.ActionType.VIEW, StandardEntitlement.USER_READ);
+
+ if (!recounciliationOnly) {
+ builder.addAction(new ActionLink<LinkedAccountTO>() {
+
+ private static final long serialVersionUID =
2555747430358755813L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final
LinkedAccountTO linkedAccountTO) {
+ try {
+ send(LinkedAccountModalPanel.this, Broadcast.DEPTH,
+ new
AjaxWizard.NewItemActionEvent<>(linkedAccountTO, 1, target).
+ setResourceModel(new
StringResourceModel("inner.edit.linkedAccount",
+ LinkedAccountModalPanel.this,
+ Model.of(linkedAccountTO))));
+
+ } catch (SyncopeClientException e) {
+ LOG.error("While contacting linked account", e);
+ SyncopeConsoleSession.get().error(
+ StringUtils.isBlank(e.getMessage()) ?
e.getClass().getName() : e.getMessage());
+ ((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
+ }
+
+ send(LinkedAccountModalPanel.this, Broadcast.BREADTH,
+ new
ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
}
+ }, ActionLink.ActionType.EDIT, StandardEntitlement.USER_READ);
+ }
+
+ builder.addAction(new ActionLink<LinkedAccountTO>() {
+ private static final long serialVersionUID = 2555747430358755813L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final
LinkedAccountTO linkedAccountTO) {
+ mlp.next("PUSH " + linkedAccountTO.getResource(),
+ new ReconTaskPanel(
+ linkedAccountTO.getResource(),
+ new PushTaskTO(),
+ model.getObject().getType(),
+ null,
+ linkedAccountTO.getConnObjectKeyValue(),
+ true,
+ mlp,
+ pageRef),
+ target);
+ target.add(mlp);
+
+ ((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
send(LinkedAccountModalPanel.this, Broadcast.BREADTH,
new
ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
}
- }, ActionLink.ActionType.EDIT, StandardEntitlement.USER_READ).
+ }, ActionLink.ActionType.RECONCILIATION_PUSH,
StandardEntitlement.USER_READ).
addAction(new ActionLink<LinkedAccountTO>() {
private static final long serialVersionUID =
2555747430358755813L;
@Override
public void onClick(final AjaxRequestTarget target, final
LinkedAccountTO linkedAccountTO) {
- try {
- LinkedAccountPatch linkedAccountPatch =
- new LinkedAccountPatch.Builder().
- operation(PatchOperation.DELETE).
-
linkedAccountTO(linkedAccountTO).build();
-
linkedAccountPatch.setLinkedAccountTO(linkedAccountTO);
- UserPatch patch = new UserPatch();
- patch.setKey(readUserTO.getKey());
- patch.getLinkedAccounts().add(linkedAccountPatch);
-
userRestClient.update(userRestClient.read(userTO.getKey()).getETagValue(),
patch);
- linkedAccountTOs.remove(linkedAccountTO);
-
-
SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
- } catch (Exception e) {
- LOG.error("While removing linked account {}",
linkedAccountTO.getKey(), e);
-
SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
- ? e.getClass().getName() : e.getMessage());
- }
-
- checkAddButton();
+ mlp.next("PULL " + linkedAccountTO.getResource(),
+ new ReconTaskPanel(
+ linkedAccountTO.getResource(),
+ new PullTaskTO(),
+ model.getObject().getType(),
+ null,
+
linkedAccountTO.getConnObjectKeyValue(),
+ true,
+ mlp,
+ pageRef),
+ target);
+ target.add(mlp);
+
((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
- send(LinkedAccountModalPanel.this, Broadcast.DEPTH,
new ListViewPanel.ListViewReload<>(target));
+ send(LinkedAccountModalPanel.this, Broadcast.BREADTH,
+ new
ActionLinksTogglePanel.ActionLinkToggleCloseEventPayload(target));
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PULL,
StandardEntitlement.USER_READ);
+
+ if (!recounciliationOnly) {
+ builder.addAction(new ActionLink<LinkedAccountTO>() {
+
+ private static final long serialVersionUID =
2555747430358755813L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final
LinkedAccountTO linkedAccountTO) {
+ try {
+ LinkedAccountPatch linkedAccountPatch = new
LinkedAccountPatch.Builder().
+ operation(PatchOperation.DELETE).
+ linkedAccountTO(linkedAccountTO).build();
+ linkedAccountPatch.setLinkedAccountTO(linkedAccountTO);
+ UserPatch patch = new UserPatch();
+ patch.setKey(model.getObject().getKey());
+ patch.getLinkedAccounts().add(linkedAccountPatch);
+
model.setObject(userRestClient.update(model.getObject().getETagValue(),
patch).getEntity());
+ linkedAccountTOs.remove(linkedAccountTO);
+
+
SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+ } catch (Exception e) {
+ LOG.error("While removing linked account {}",
linkedAccountTO.getKey(), e);
+
SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+ ? e.getClass().getName() : e.getMessage());
}
- }, ActionLink.ActionType.DELETE,
StandardEntitlement.USER_UPDATE, true);
+
+ checkAddButton();
+ ((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
+ send(LinkedAccountModalPanel.this, Broadcast.DEPTH, new
ListViewPanel.ListViewReload<>(target));
+ }
+ }, ActionLink.ActionType.DELETE, StandardEntitlement.USER_UPDATE,
true);
+ }
builder.addNewItemPanelBuilder(wizard);
- list = builder.build("linkedAccountsList");
+ list = builder.build(MultilevelPanel.FIRST_LEVEL_ID);
list.setOutputMarkupId(true);
list.setReadOnly(!SyncopeConsoleSession.get().owns(StandardEntitlement.USER_UPDATE));
@@ -215,8 +295,9 @@ public class LinkedAccountModalPanel extends
AbstractModalPanel<Serializable> {
LinkedAccountModalPanel.this)));
}
};
- list.addOrReplaceInnerObject(addAjaxLink);
- add(list);
+
list.addOrReplaceInnerObject(addAjaxLink.setEnabled(!recounciliationOnly).setVisible(!recounciliationOnly));
+
+ add(mlp.setFirstLevel(list));
}
private void sortLinkedAccounts() {
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.java
new file mode 100644
index 0000000..0a88afb
--- /dev/null
+++
b/client/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.model.IModel;
+
+public class LinkedAccountsStatusModalPanel extends
MultilevelPanel.SecondLevel {
+
+ private static final long serialVersionUID = 8804361394735366181L;
+
+ public LinkedAccountsStatusModalPanel(
+ final BaseModal<?> baseModal,
+ final IModel<UserTO> model,
+ final PageReference pageRef) {
+
+ super(MultilevelPanel.SECOND_LEVEL_ID);
+
+ add(new LinkedAccountModalPanel(baseModal, model, pageRef,
true).setOutputMarkupId(true));
+ }
+
+}
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index d36afbd..eb42741 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -69,7 +69,6 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
@Override
protected void onConfigure() {
super.onConfigure();
- setFooterVisible(false);
}
};
@@ -92,6 +91,17 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
}
});
+ wizardWrapperModal.setWindowClosedCallback(new
ModalWindow.WindowClosedCallback() {
+
+ private static final long serialVersionUID = -6109847349558471532L;
+
+ @Override
+ public void onClose(final AjaxRequestTarget target) {
+ updateResultTable(target);
+ modal.show(false);
+ }
+ });
+
wizardWrapperModal.size(Modal.Size.Large);
addOuterObject(wizardWrapperModal);
}
@@ -154,7 +164,7 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
public void onClick(final AjaxRequestTarget target, final UserTO
ignore) {
send(UserDirectoryPanel.this, Broadcast.EXACT,
new AjaxWizard.EditItemActionEvent<>(
- new UserWrapper(new
UserRestClient().read(model.getObject().getKey())),
+ new
UserWrapper(UserRestClient.class.cast(restClient).read(model.getObject().getKey())),
target));
}
}, ActionType.EDIT,
@@ -285,6 +295,7 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
@Override
public void onClick(final AjaxRequestTarget target, final
UserTO ignore) {
+
model.setObject(UserRestClient.class.cast(restClient).read(model.getObject().getKey()));
IModel<AnyWrapper<UserTO>> formModel = new
CompoundPropertyModel<>(
new AnyWrapper<>(model.getObject()));
altDefaultModal.setFormModel(formModel);
@@ -340,13 +351,15 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
@Override
public void onClick(final AjaxRequestTarget target, final
UserTO ignore) {
+
model.setObject(UserRestClient.class.cast(restClient).read(model.getObject().getKey()));
target.add(wizardWrapperModal.setContent(
- new LinkedAccountModalPanel(wizardWrapperModal,
model.getObject(), pageRef)));
+ new LinkedAccountModalPanel(wizardWrapperModal,
model, pageRef, false)));
wizardWrapperModal.header(new
ResourceModel("linkedAccounts.title"));
wizardWrapperModal.show(true);
}
}, ActionType.MANAGE_ACCOUNTS,
- String.format("%s,%s", StandardEntitlement.USER_READ,
StandardEntitlement.USER_UPDATE));
+ String.format("%s,%s,%s", StandardEntitlement.USER_READ,
StandardEntitlement.USER_UPDATE,
+ StandardEntitlement.RESOURCE_GET_CONNOBJECT));
}
panel.add(new ActionLink<UserTO>() {
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index 81438b4..5f80e19 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -33,6 +33,7 @@ import
org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
+import org.apache.syncope.client.console.panels.LinkedAccountsStatusModalPanel;
import org.apache.syncope.client.console.panels.ModalPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
@@ -63,6 +64,7 @@ import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
public class AnyStatusDirectoryPanel
@@ -244,6 +246,33 @@ public class AnyStatusDirectoryPanel
}, ActionLink.ActionType.RECONCILIATION_PULL,
StandardEntitlement.TASK_EXECUTE);
}
+ if (anyTO instanceof UserTO &&
!UserTO.class.cast(anyTO).getLinkedAccounts().isEmpty()) {
+ UserTO userTO = UserTO.class.cast(anyTO);
+
+ if (!userTO.getLinkedAccounts().isEmpty()
+ &&
userTO.getLinkedAccounts().stream().anyMatch(linkedAccountTO -> {
+ return
linkedAccountTO.getResource().equals(model.getObject().getResource());
+ })) {
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID =
5168094747477174155L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final
StatusBean bean) {
+ multiLevelPanelRef.next("ACCOUNTS",
+ new LinkedAccountsStatusModalPanel(
+ baseModal,
Model.of(UserTO.class.cast(anyTO)), pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+
AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.MANAGE_ACCOUNTS,
+ String.format("%s,%s,%s",
StandardEntitlement.USER_READ, StandardEntitlement.USER_UPDATE,
+ StandardEntitlement.RESOURCE_GET_CONNOBJECT));
+ }
+ }
+
return panel;
}
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
index 0e4e4f3..2ea7620 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -194,7 +194,9 @@ public class ReconTaskPanel extends
MultilevelPanel.SecondLevel {
} catch (Exception e) {
LOG.error("While attempting reconciliation on {}",
reconQuery, form.getModelObject(), e);
SyncopeConsoleSession.get().error(resource + ": "
- + (StringUtils.isBlank(e.getMessage()) ?
e.getClass().getName() : e.getMessage()));
+ + (StringUtils.isBlank(e.getMessage())
+ ? e.getClass().getName()
+ :
StringUtils.abbreviate(StringUtils.normalizeSpace(e.getMessage()), 280)));
}
multiLevelPanelRef.prev(target);
((BasePage)
pageRef.getPage()).getNotificationPanel().refresh(target);
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountDetailsPanel.java
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountDetailsPanel.java
index ca8be3e..6970c5e 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountDetailsPanel.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountDetailsPanel.java
@@ -18,11 +18,9 @@
*/
package org.apache.syncope.client.console.wizards.any;
-import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -60,7 +58,7 @@ public class LinkedAccountDetailsPanel extends WizardStep {
private final ResourceRestClient resourceRestClient = new
ResourceRestClient();
- private ArrayList<String> connObjectKeyFieldValues;
+ private List<String> connObjectKeyFieldValues;
public LinkedAccountDetailsPanel(final LinkedAccountTO linkedAccountTO) {
super();
@@ -157,11 +155,10 @@ public class LinkedAccountDetailsPanel extends WizardStep
{
final String resource,
final String searchTerm) {
- Set<String> choices = new HashSet<>();
- String resourceRemoteKey = ConnIdSpecialName.NAME;
+ AtomicReference<String> resourceRemoteKey = new
AtomicReference<>(ConnIdSpecialName.NAME);
try {
- resourceRemoteKey =
resourceRestClient.read(resource).getProvision(AnyTypeKind.USER.name()).get().
- getMapping().getConnObjectKeyItem().getExtAttrName();
+
resourceRemoteKey.set(resourceRestClient.read(resource).getProvision(AnyTypeKind.USER.name()).get().
+ getMapping().getConnObjectKeyItem().getExtAttrName());
} catch (Exception ex) {
LOG.error("While reading mapping for resource {}", resource, ex);
}
@@ -169,20 +166,16 @@ public class LinkedAccountDetailsPanel extends WizardStep
{
ConnObjectTOQuery.Builder builder = new
ConnObjectTOQuery.Builder().size(SEARCH_SIZE);
if (StringUtils.isNotBlank(searchTerm)) {
builder.fiql(SyncopeClient.getConnObjectTOFiqlSearchConditionBuilder().
- is(resourceRemoteKey).equalTo(searchTerm +
"*").query()).build();
+ is(resourceRemoteKey.get()).equalTo(searchTerm +
"*").query()).build();
}
Pair<String, List<ConnObjectTO>> items =
resourceRestClient.searchConnObjects(resource,
AnyTypeKind.USER.name(),
builder,
- new SortParam<>(resourceRemoteKey, true));
+ new SortParam<>(resourceRemoteKey.get(), true));
- choices.addAll(items.getRight().stream().map(item -> {
- return
item.getAttr(ConnIdSpecialName.UID).get().getValues().get(0);
- }).collect(Collectors.toSet()));
-
- connObjectKeyFieldValues = new ArrayList<>(choices);
- Collections.sort(connObjectKeyFieldValues);
+ connObjectKeyFieldValues = items.getRight().stream().
+ map(item ->
item.getAttr(resourceRemoteKey.get()).get().getValues().get(0)).
+ collect(Collectors.toList());
ajaxTextFieldPanel.setChoices(connObjectKeyFieldValues);
}
-
}
diff --git
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
index 065aa3e..0b8bea4 100644
---
a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
+++
b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
@@ -34,6 +34,7 @@ import org.apache.syncope.common.lib.to.UserTO;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.model.IModel;
/**
* Accounts wizard builder.
@@ -44,19 +45,15 @@ public class LinkedAccountWizardBuilder extends
AjaxWizardBuilder<LinkedAccountT
private final UserRestClient userRestClient = new UserRestClient();
- private UserTO userTO;
+ private final IModel<UserTO> model;
- private final String userKey;
-
- public LinkedAccountWizardBuilder(final String userKey, final
PageReference pageRef) {
+ public LinkedAccountWizardBuilder(final IModel<UserTO> model, final
PageReference pageRef) {
super(new LinkedAccountTO(), pageRef);
- this.userKey = userKey;
- this.userTO = userRestClient.read(userKey);
+ this.model = model;
}
@Override
public AjaxWizard<LinkedAccountTO> build(final String id, final
AjaxWizard.Mode mode) {
- this.userTO = userRestClient.read(userKey);
return super.build(id, mode);
}
@@ -64,7 +61,7 @@ public class LinkedAccountWizardBuilder extends
AjaxWizardBuilder<LinkedAccountT
protected WizardModel buildModelSteps(final LinkedAccountTO modelObject,
final WizardModel wizardModel) {
wizardModel.add(new LinkedAccountDetailsPanel(modelObject));
wizardModel.add(new LinkedAccountCredentialsPanel(modelObject));
- wizardModel.add(new LinkedAccountPlainAttrsPanel(new
EntityWrapper<>(modelObject), userTO));
+ wizardModel.add(new LinkedAccountPlainAttrsPanel(new
EntityWrapper<>(modelObject), model.getObject()));
wizardModel.add(new LinkedAccountPrivilegesPanel(modelObject));
return wizardModel;
}
@@ -76,9 +73,9 @@ public class LinkedAccountWizardBuilder extends
AjaxWizardBuilder<LinkedAccountT
LinkedAccountPatch linkedAccountPatch = new
LinkedAccountPatch.Builder().linkedAccountTO(modelObject).build();
linkedAccountPatch.setLinkedAccountTO(modelObject);
UserPatch patch = new UserPatch();
- patch.setKey(userTO.getKey());
+ patch.setKey(model.getObject().getKey());
patch.getLinkedAccounts().add(linkedAccountPatch);
- userRestClient.update(userTO.getETagValue(), patch);
+
model.setObject(userRestClient.update(model.getObject().getETagValue(),
patch).getEntity());
return modelObject;
}
@@ -96,7 +93,7 @@ public class LinkedAccountWizardBuilder extends
AjaxWizardBuilder<LinkedAccountT
LinkedAccountTO linkedAccountTO =
LinkedAccountTO.class.cast(afterObject);
return new CreateEvent(
linkedAccountTO.getConnObjectKeyValue(),
- userTO,
+ model.getObject(),
target);
}
diff --git
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
index dd5288c..aadf84f 100644
---
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
+++
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
@@ -18,7 +18,7 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <span wicket:id="linkedAccountsList">[linkedAccountsList]</span>
- <div wicket:id="toggle"/>
+ <span wicket:id="toggle"/>
+ <span wicket:id="mlpContainer">[MlpContainer]</span>
</wicket:panel>
</html>
\ No newline at end of file
diff --git
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.html
similarity index 89%
copy from
client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
copy to
client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.html
index dd5288c..f6f3a66 100644
---
a/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.html
+++
b/client/console/src/main/resources/org/apache/syncope/client/console/panels/LinkedAccountsStatusModalPanel.html
@@ -18,7 +18,6 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <span wicket:id="linkedAccountsList">[linkedAccountsList]</span>
- <div wicket:id="toggle"/>
+ <div wicket:id="content"></div>
</wicket:panel>
-</html>
\ No newline at end of file
+</html>
diff --git
a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index e8bbfcd..ebe7f35 100644
---
a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++
b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -266,7 +266,7 @@ public class ReconciliationLogic extends
AbstractTransactionalLogic<EntityTO> {
match.getLinkedAccount(),
pushTask);
if (result.getStatus() ==
ProvisioningReport.Status.FAILURE) {
-
sce.getElements().add(results.get(0).getMessage());
+ sce.getElements().add(result.getMessage());
} else {
results.add(result);
}