You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by sk...@apache.org on 2019/02/28 13:33:10 UTC
[syncope] branch 2_0_X updated: [SYNCOPE-1439] Fixed user
membership attributes not updating from Admin Console
This is an automated email from the ASF dual-hosted git repository.
skylark17 pushed a commit to branch 2_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_0_X by this push:
new 1631cab [SYNCOPE-1439] Fixed user membership attributes not updating from Admin Console
new baa6d4c Merge pull request #98 from mat-ale/2_0_X
1631cab is described below
commit 1631cabcac0a1e908ace2758ce77317d4a2bd0a8
Author: Matteo Alessandroni <ma...@tirasa.net>
AuthorDate: Thu Feb 28 10:35:03 2019 +0100
[SYNCOPE-1439] Fixed user membership attributes not updating from Admin Console
---
.../client/console/wizards/any/PlainAttrs.java | 174 +++++++++++++++++----
1 file changed, 141 insertions(+), 33 deletions(-)
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index d7beff2..4cc07f8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.client.console.wizards.any;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -47,6 +48,7 @@ import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.to.AttributableTO;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.GroupableRelatableTO;
import org.apache.syncope.common.lib.to.MembershipTO;
@@ -63,6 +65,7 @@ import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
@@ -112,7 +115,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
@Override
public WebMarkupContainer getPanel(final String panelId) {
- return new PlainSchemas(panelId, schemas, attrTOs);
+ return new PlainSchemasOwn(panelId, schemas, attrTOs);
}
}), Model.of(0)).setOutputMarkupId(true));
@@ -133,10 +136,19 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
@Override
public WebMarkupContainer getPanel(final String panelId) {
- return new PlainSchemas(
+ return new PlainSchemasMemberships(
panelId,
membershipSchemas.get(membershipTO.getGroupKey()),
- new ListModel<>(getAttrsFromTO(membershipTO)));
+ new LoadableDetachableModel<AttributableTO>() { // SYNCOPE-1439
+
+ private static final long serialVersionUID = 526768546610546553L;
+
+ @Override
+ protected AttributableTO load() {
+ return membershipTO;
+ }
+
+ });
}
}), Model.of(-1)).setOutputMarkupId(true));
}
@@ -363,15 +375,91 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
return panel;
}
- public class PlainSchemas extends Schemas {
+ protected class PlainSchemasMemberships extends PlainSchemas<AttributableTO> {
+
+ private static final long serialVersionUID = 456754923340249215L;
+
+ public PlainSchemasMemberships(
+ final String id,
+ final Map<String, PlainSchemaTO> schemas,
+ final IModel<AttributableTO> attributableTO) {
+
+ super(id, schemas, attributableTO);
+
+ final List<AttrTO> res = new ArrayList<>(attributableTO.getObject().getPlainAttrs());
+ Collections.sort(res, new AttrComparator());
+
+ add(new ListView<AttrTO>("schemas",
+ new ListModel<AttrTO>(res)) {
+
+ private static final long serialVersionUID = 5306618783986001008L;
+
+ @Override
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ protected void populateItem(final ListItem<AttrTO> item) {
+ final AttrTO attrTO = item.getModelObject();
+
+ AbstractFieldPanel<?> panel = getFieldPanel(schemas.get(attrTO.getSchema()));
+ if (mode == AjaxWizard.Mode.TEMPLATE
+ || !schemas.get(attrTO.getSchema()).isMultivalue()) {
+
+ FieldPanel.class.cast(panel).setNewModel(new Model() {
+
+ private static final long serialVersionUID = -4214654722524358000L;
+
+ @Override
+ public Serializable getObject() {
+ return attributableTO.getObject().getPlainAttr(attrTO.getSchema()).
+ getValues().isEmpty()
+ ? null
+ : attributableTO.getObject().getPlainAttr(attrTO.getSchema()).
+ getValues().get(0);
+ }
+
+ @Override
+ public void setObject(final Serializable object) {
+ attributableTO.getObject().getPlainAttr(attrTO.getSchema()).getValues().clear();
+ if (object != null) {
+ attributableTO.getObject().getPlainAttr(attrTO.getSchema()).
+ getValues().add(object.toString());
+ }
+ }
+ });
+ } else {
+ panel = new MultiFieldPanel.Builder<>(
+ new ListModel<String>() {
+
+ private static final long serialVersionUID = -1765231556272935141L;
+
+ @Override
+ public List<String> getObject() {
+ return attributableTO.getObject().getPlainAttr(attrTO.getSchema()).getValues();
+ }
+ }).build(
+ "panel",
+ attrTO.getSchema(),
+ FieldPanel.class.cast(panel));
+ // SYNCOPE-1215 the entire multifield panel must be readonly, not only its field
+ ((MultiFieldPanel) panel).setReadOnly(schemas.get(attrTO.getSchema()).isReadonly());
+ }
+ item.add(panel);
+
+ setExternalAction(attrTO, panel);
+ }
+ });
+ }
+ }
+
+ protected class PlainSchemasOwn extends PlainSchemas<List<AttrTO>> {
private static final long serialVersionUID = -4730563859116024676L;
- public PlainSchemas(
+ public PlainSchemasOwn(
final String id,
- final Map<String, PlainSchemaTO> availableSchemas,
+ final Map<String, PlainSchemaTO> schemas,
final IModel<List<AttrTO>> attrTOs) {
- super(id);
+
+ super(id, schemas, attrTOs);
add(new ListView<AttrTO>("schemas", attrTOs) {
@@ -382,9 +470,10 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
protected void populateItem(final ListItem<AttrTO> item) {
AttrTO attrTO = item.getModelObject();
- AbstractFieldPanel<?> panel = getFieldPanel(availableSchemas.get(attrTO.getSchema()));
+ AbstractFieldPanel<?> panel = getFieldPanel(schemas.get(attrTO.getSchema()));
if (mode == AjaxWizard.Mode.TEMPLATE
- || !availableSchemas.get(attrTO.getSchema()).isMultivalue()) {
+ || !schemas.get(attrTO.getSchema()).isMultivalue()) {
+
FieldPanel.class.cast(panel).setNewModel(attrTO.getValues());
} else {
panel = new MultiFieldPanel.Builder<>(
@@ -393,35 +482,54 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
attrTO.getSchema(),
FieldPanel.class.cast(panel));
// SYNCOPE-1215 the entire multifield panel must be readonly, not only its field
- ((MultiFieldPanel) panel).setReadOnly(availableSchemas.get(attrTO.getSchema()).isReadonly());
+ ((MultiFieldPanel) panel).setReadOnly(schemas.get(attrTO.getSchema()).isReadonly());
}
item.add(panel);
- if (previousObject != null
- && (previousObject.getPlainAttr(attrTO.getSchema()) == null
- || !ListUtils.isEqualList(
- ListUtils.select(previousObject.getPlainAttr(attrTO.getSchema()).getValues(),
- new Predicate<String>() {
-
- @Override
- public boolean evaluate(final String object) {
- return StringUtils.isNotEmpty(object);
- }
- }), ListUtils.select(attrTO.getValues(),
- new Predicate<String>() {
-
- @Override
- public boolean evaluate(final String object) {
- return StringUtils.isNotEmpty(object);
- }
- })))) {
- List<String> oldValues = previousObject.getPlainAttr(attrTO.getSchema()) == null
- ? Collections.<String>emptyList()
- : previousObject.getPlainAttr(attrTO.getSchema()).getValues();
- panel.showExternAction(new LabelInfo("externalAction", oldValues));
- }
+ setExternalAction(attrTO, panel);
}
});
}
}
+
+ protected class PlainSchemas<T> extends Schemas {
+
+ private static final long serialVersionUID = -8563704881825476824L;
+
+ public PlainSchemas(
+ final String id,
+ final Map<String, PlainSchemaTO> schemas,
+ final IModel<T> model) {
+
+ super(id);
+ }
+
+ protected void setExternalAction(final AttrTO attrTO, final AbstractFieldPanel<?> panel) {
+ if (previousObject != null
+ && (previousObject.getPlainAttr(attrTO.getSchema()) == null
+ || !ListUtils.isEqualList(
+ ListUtils.select(previousObject.getPlainAttr(attrTO.getSchema()).getValues(),
+ new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return StringUtils.isNotEmpty(object);
+ }
+ }), ListUtils.select(attrTO.getValues(),
+ new Predicate<String>() {
+
+ @Override
+ public boolean evaluate(final String object) {
+ return StringUtils.isNotEmpty(object);
+ }
+ })))) {
+
+ List<String> oldValues = previousObject.getPlainAttr(attrTO.getSchema()) == null
+ ? Collections.<String>emptyList()
+ : previousObject.getPlainAttr(attrTO.getSchema()).getValues();
+ panel.showExternAction(new LabelInfo("externalAction", oldValues));
+ }
+ }
+ }
+
}