Repository: syncope
Updated Branches:
  refs/heads/SYNCOPE-808 cf18763b9 -> 06fd9e371 (forced update)


[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/SYNCOPE-808
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
+{}

Reply via email to