[SYNCOPE-1060] missing fix about dates on membership attributes on self registration
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/be1eb72b Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/be1eb72b Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/be1eb72b Branch: refs/heads/SYNCOPE-808 Commit: be1eb72ba507ea0f74c983ec52cce558fb669627 Parents: 7ce0a55 Author: Andrea Patricelli <andreapatrice...@apache.org> Authored: Fri Apr 7 17:05:37 2017 +0200 Committer: Andrea Patricelli <andreapatrice...@apache.org> Committed: Mon Apr 10 09:04:56 2017 +0200 ---------------------------------------------------------------------- .../enduser/resources/BaseUserSelfResource.java | 67 ++++++++++++++++++++ .../resources/UserSelfCreateResource.java | 36 ++++------- .../enduser/resources/UserSelfReadResource.java | 20 +----- .../resources/UserSelfUpdateResource.java | 24 +------ 4 files changed, 80 insertions(+), 67 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/be1eb72b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/BaseUserSelfResource.java ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/BaseUserSelfResource.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/BaseUserSelfResource.java new file mode 100644 index 0000000..6071642 --- /dev/null +++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/BaseUserSelfResource.java @@ -0,0 +1,67 @@ +/* + * 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.enduser.resources; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang3.time.FastDateFormat; +import org.apache.syncope.common.lib.to.AttrTO; +import org.apache.syncope.common.lib.to.PlainSchemaTO; + +public abstract class BaseUserSelfResource extends BaseResource { + + private static final long serialVersionUID = -5892402817902884085L; + + protected 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); + } + } + + protected void millisToDate(final Map<String, AttrTO> plainAttrMap, final PlainSchemaTO plainSchema) + throws IllegalArgumentException { + 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/be1eb72b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfCreateResource.java ---------------------------------------------------------------------- diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfCreateResource.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfCreateResource.java index c8baa53..fbb2e33 100644 --- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfCreateResource.java +++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfCreateResource.java @@ -22,9 +22,7 @@ import static org.apache.syncope.client.enduser.resources.BaseResource.LOG; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; @@ -33,7 +31,6 @@ import javax.ws.rs.core.Response; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.SerializationUtils; -import org.apache.commons.lang3.time.FastDateFormat; import org.apache.syncope.client.enduser.SyncopeEnduserConstants; import org.apache.syncope.client.enduser.SyncopeEnduserSession; import org.apache.syncope.client.enduser.annotations.Resource; @@ -45,7 +42,7 @@ import org.apache.syncope.common.lib.to.UserTO; import org.apache.syncope.common.rest.api.service.UserSelfService; @Resource(key = "userSelfCreate", path = "/api/self/create") -public class UserSelfCreateResource extends BaseResource { +public class UserSelfCreateResource extends BaseUserSelfResource { private static final long serialVersionUID = -2721621682300247583L; @@ -86,28 +83,8 @@ public class UserSelfCreateResource extends BaseResource { } if (isSelfRegistrationAllowed() && userTO != null) { - 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("#")) { @@ -133,6 +110,15 @@ public class UserSelfCreateResource extends BaseResource { } 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("#")) { http://git-wip-us.apache.org/repos/asf/syncope/blob/be1eb72b/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 3d913e2..056e757 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,15 +20,11 @@ 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; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.commons.lang3.SerializationUtils; -import org.apache.commons.lang3.time.FastDateFormat; import org.apache.syncope.client.enduser.SyncopeEnduserSession; import org.apache.syncope.client.enduser.annotations.Resource; import org.apache.syncope.common.lib.to.AttrTO; @@ -39,7 +35,7 @@ import org.apache.wicket.request.resource.AbstractResource; import org.apache.wicket.request.resource.IResource; @Resource(key = "userSelfRead", path = "/api/self/read") -public class UserSelfReadResource extends BaseResource { +public class UserSelfReadResource extends BaseUserSelfResource { private static final long serialVersionUID = -9184809392631523912L; @@ -111,18 +107,4 @@ 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/be1eb72b/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 9934aad..bc1a9fd 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 @@ -20,9 +20,7 @@ package org.apache.syncope.client.enduser.resources; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; @@ -31,7 +29,6 @@ import javax.ws.rs.core.Response; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.SerializationUtils; -import org.apache.commons.lang3.time.FastDateFormat; import org.apache.syncope.client.enduser.SyncopeEnduserConstants; import org.apache.syncope.client.enduser.SyncopeEnduserSession; import org.apache.syncope.client.enduser.annotations.Resource; @@ -45,7 +42,7 @@ import org.apache.wicket.request.resource.AbstractResource; import org.apache.wicket.request.resource.IResource; @Resource(key = "userSelfUpdate", path = "/api/self/update") -public class UserSelfUpdateResource extends BaseResource { +public class UserSelfUpdateResource extends BaseUserSelfResource { private static final long serialVersionUID = -2721621682300247583L; @@ -187,23 +184,4 @@ 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); - } - } }