Repository: syncope Updated Branches: refs/heads/2_0_X 905b98dfd -> 23fdc9140
[SYNCOPE-1060] fixed wrong dates propagation to/from enduser Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/23fdc914 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/23fdc914 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/23fdc914 Branch: refs/heads/2_0_X Commit: 23fdc9140e8ae69f4c15f6448fe51af43cd5df8c Parents: 905b98d Author: Andrea Patricelli <andreapatrice...@apache.org> Authored: Fri Apr 7 16:57:24 2017 +0200 Committer: Andrea Patricelli <andreapatrice...@apache.org> Committed: Fri Apr 7 16:57:24 2017 +0200 ---------------------------------------------------------------------- .../enduser/resources/UserSelfReadResource.java | 33 +++++++---- .../resources/UserSelfUpdateResource.java | 60 +++++++++++--------- .../resources/app/configuration/customForm.json | 2 +- 3 files changed, 56 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/23fdc914/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfReadResource.java ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfReadResource.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfReadResource.java index 8aefb55..3d913e2 100644 --- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfReadResource.java +++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfReadResource.java @@ -20,6 +20,7 @@ package org.apache.syncope.client.enduser.resources; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -59,22 +60,15 @@ public class UserSelfReadResource extends BaseResource { UserTO userTO = SerializationUtils.clone(SyncopeEnduserSession.get().getSelfTO()); Map<String, AttrTO> userPlainAttrMap = userTO.getPlainAttrMap(); - // Date -> millis conversion + // 1. Date -> millis conversion for PLAIN attributes of USER and its MEMBERSHIPS for (PlainSchemaTO plainSchema : SyncopeEnduserSession.get().getDatePlainSchemas()) { - if (userPlainAttrMap.containsKey(plainSchema.getKey())) { - FastDateFormat fmt = FastDateFormat.getInstance(plainSchema.getConversionPattern()); - - AttrTO dateAttr = userPlainAttrMap.get(plainSchema.getKey()); - List<String> milliValues = new ArrayList<>(dateAttr.getValues().size()); - for (String value : dateAttr.getValues()) { - milliValues.add(String.valueOf(fmt.parse(value).getTime())); - } - dateAttr.getValues().clear(); - dateAttr.getValues().addAll(milliValues); + dateToMillis(userPlainAttrMap, plainSchema); + for (MembershipTO membership : userTO.getMemberships()) { + dateToMillis(membership.getPlainAttrMap(), plainSchema); } } - // membership attributes management + // 2. membership attributes management for (MembershipTO membership : userTO.getMemberships()) { String groupName = membership.getGroupName(); for (AttrTO attr : membership.getPlainAttrs()) { @@ -116,4 +110,19 @@ public class UserSelfReadResource extends BaseResource { } return response; } + + private void dateToMillis(final Map<String, AttrTO> plainAttrMap, final PlainSchemaTO plainSchema) + throws ParseException { + if (plainAttrMap.containsKey(plainSchema.getKey())) { + FastDateFormat fmt = FastDateFormat.getInstance(plainSchema.getConversionPattern()); + + AttrTO dateAttr = plainAttrMap.get(plainSchema.getKey()); + List<String> milliValues = new ArrayList<>(dateAttr.getValues().size()); + for (String value : dateAttr.getValues()) { + milliValues.add(String.valueOf(fmt.parse(value).getTime())); + } + dateAttr.getValues().clear(); + dateAttr.getValues().addAll(milliValues); + } + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/23fdc914/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfUpdateResource.java ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfUpdateResource.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfUpdateResource.java index 2ee22db..9934aad 100644 --- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfUpdateResource.java +++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfUpdateResource.java @@ -70,52 +70,40 @@ public class UserSelfUpdateResource extends BaseResource { UserTO userTO = MAPPER.readValue(request.getReader().readLine(), UserTO.class); - Map<String, AttrTO> userPlainAttrMap = userTO.getPlainAttrMap(); - - // millis -> Date conversion - for (PlainSchemaTO plainSchema : SyncopeEnduserSession.get().getDatePlainSchemas()) { - if (userPlainAttrMap.containsKey(plainSchema.getKey())) { - FastDateFormat fmt = FastDateFormat.getInstance(plainSchema.getConversionPattern()); - - AttrTO dateAttr = userPlainAttrMap.get(plainSchema.getKey()); - List<String> formattedValues = new ArrayList<>(dateAttr.getValues().size()); - for (String value : dateAttr.getValues()) { - try { - formattedValues.add(fmt.format(Long.valueOf(value))); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("Invalid format value for " + value); - } - } - dateAttr.getValues().clear(); - dateAttr.getValues().addAll(formattedValues); - } - } - - // membership attributes management + // 1. membership attributes management Set<AttrTO> membAttrs = new HashSet<>(); for (AttrTO attr : userTO.getPlainAttrs()) { if (attr.getSchema().contains("#")) { - final String[] simpleAttrs = attr.getSchema().split("#"); + final String[] compositeSchemaKey = attr.getSchema().split("#"); MembershipTO membership = IterableUtils.find(userTO.getMemberships(), new Predicate<MembershipTO>() { @Override public boolean evaluate(final MembershipTO item) { - return simpleAttrs[0].equals(item.getGroupName()); + return compositeSchemaKey[0].equals(item.getGroupName()); } }); if (membership == null) { - membership = new MembershipTO.Builder().group(null, simpleAttrs[0]).build(); + membership = new MembershipTO.Builder().group(null, compositeSchemaKey[0]).build(); userTO.getMemberships().add(membership); } AttrTO clone = SerializationUtils.clone(attr); - clone.setSchema(simpleAttrs[1]); + clone.setSchema(compositeSchemaKey[1]); membership.getPlainAttrs().add(clone); membAttrs.add(attr); } } userTO.getPlainAttrs().removeAll(membAttrs); + // 2. millis -> Date conversion for PLAIN attributes of USER and its MEMBERSHIPS + Map<String, AttrTO> userPlainAttrMap = userTO.getPlainAttrMap(); + for (PlainSchemaTO plainSchema : SyncopeEnduserSession.get().getDatePlainSchemas()) { + millisToDate(userPlainAttrMap, plainSchema); + for (MembershipTO membership : userTO.getMemberships()) { + millisToDate(membership.getPlainAttrMap(), plainSchema); + } + } + membAttrs.clear(); for (AttrTO attr : userTO.getDerAttrs()) { if (attr.getSchema().contains("#")) { @@ -198,4 +186,24 @@ public class UserSelfUpdateResource extends BaseResource { } return response; } + + private void millisToDate(final Map<String, AttrTO> plainAttrMap, final PlainSchemaTO plainSchema) + throws IllegalArgumentException { + LOG.info("CONVERTING >>>>>>>>>> {}", plainSchema.getKey()); + if (plainAttrMap.containsKey(plainSchema.getKey())) { + FastDateFormat fmt = FastDateFormat.getInstance(plainSchema.getConversionPattern()); + + AttrTO dateAttr = plainAttrMap.get(plainSchema.getKey()); + List<String> formattedValues = new ArrayList<>(dateAttr.getValues().size()); + for (String value : dateAttr.getValues()) { + try { + formattedValues.add(fmt.format(Long.valueOf(value))); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid format value for " + value); + } + } + dateAttr.getValues().clear(); + dateAttr.getValues().addAll(formattedValues); + } + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/23fdc914/client/enduser/src/main/resources/META-INF/resources/app/configuration/customForm.json ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/resources/META-INF/resources/app/configuration/customForm.json b/client/enduser/src/main/resources/META-INF/resources/app/configuration/customForm.json index 9e26dfe..0967ef4 100644 --- a/client/enduser/src/main/resources/META-INF/resources/app/configuration/customForm.json +++ b/client/enduser/src/main/resources/META-INF/resources/app/configuration/customForm.json @@ -1 +1 @@ -{} \ No newline at end of file +{}