
org.cloudfoundry.identity.uaa.scim.impl.ScimUserJsonDeserializer Maven / Gradle / Ivy
/*******************************************************************************
* Cloud Foundry
* Copyright (c) [2009-2016] Pivotal Software, Inc. All Rights Reserved.
*
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product includes a number of subcomponents with
* separate copyright notices and license terms. Your use of these
* subcomponents is subject to the terms and conditions of the
* subcomponent's license, as noted in the LICENSE file.
*******************************************************************************/
package org.cloudfoundry.identity.uaa.scim.impl;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
import org.cloudfoundry.identity.uaa.approval.Approval;
import org.cloudfoundry.identity.uaa.constants.OriginKeys;
import org.cloudfoundry.identity.uaa.impl.JsonDateDeserializer;
import org.cloudfoundry.identity.uaa.scim.ScimMeta;
import org.cloudfoundry.identity.uaa.scim.ScimUser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
public class ScimUserJsonDeserializer extends JsonDeserializer {
@Override
public ScimUser deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ScimUser user = new ScimUser();
while (jp.nextToken() != JsonToken.END_OBJECT) {
if (jp.getCurrentToken() == JsonToken.FIELD_NAME) {
String fieldName = jp.getCurrentName();
jp.nextToken();
if ("id".equalsIgnoreCase(fieldName)) {
user.setId(jp.readValueAs(String.class));
} else if ("userName".equalsIgnoreCase(fieldName)) {
user.setUserName(jp.readValueAs(String.class));
} else if ("externalId".equalsIgnoreCase(fieldName)) {
user.setExternalId(jp.readValueAs(String.class));
} else if ("meta".equalsIgnoreCase(fieldName)) {
user.setMeta(jp.readValueAs(ScimMeta.class));
} else if ("schemas".equalsIgnoreCase(fieldName)) {
user.setSchemas(jp.readValueAs(String[].class));
} else if ("userType".equalsIgnoreCase(fieldName)) {
user.setUserType(jp.readValueAs(String.class));
} else if ("title".equalsIgnoreCase(fieldName)) {
user.setTitle(jp.readValueAs(String.class));
} else if ("timezone".equalsIgnoreCase(fieldName)) {
user.setTimezone(jp.readValueAs(String.class));
} else if ("profileUrl".equalsIgnoreCase(fieldName)) {
user.setProfileUrl(jp.readValueAs(String.class));
} else if ("preferredLanguage".equalsIgnoreCase(fieldName)) {
user.setPreferredLanguage(jp.readValueAs(String.class));
} else if ("phoneNumbers".equalsIgnoreCase(fieldName)) {
ScimUser.PhoneNumber[] phoneNumbers = jp.readValueAs(ScimUser.PhoneNumber[].class);
if (phoneNumbers!=null) {
user.setPhoneNumbers(Arrays.asList(phoneNumbers));
} else {
user.setPhoneNumbers(new ArrayList<>());
}
} else if ("password".equalsIgnoreCase(fieldName)) {
user.setPassword(jp.readValueAs(String.class));
} else if ("nickname".equalsIgnoreCase(fieldName)) {
user.setNickName(jp.readValueAs(String.class));
} else if ("name".equalsIgnoreCase(fieldName)) {
user.setName(jp.readValueAs(ScimUser.Name.class));
} else if ("locale".equalsIgnoreCase(fieldName)) {
user.setLocale(jp.readValueAs(String.class));
} else if ("emails".equalsIgnoreCase(fieldName)) {
user.setEmails(Arrays.asList(jp.readValueAs(ScimUser.Email[].class)));
} else if ("groups".equalsIgnoreCase(fieldName)) {
user.setGroups(Arrays.asList(jp.readValueAs(ScimUser.Group[].class)));
} else if ("displayName".equalsIgnoreCase(fieldName)) {
user.setDisplayName(jp.readValueAs(String.class));
} else if ("active".equalsIgnoreCase(fieldName)) {
user.setActive(jp.readValueAs(Boolean.class));
} else if ("verified".equalsIgnoreCase(fieldName)) {
user.setVerified(jp.readValueAs(Boolean.class));
} else if (OriginKeys.ORIGIN.equalsIgnoreCase(fieldName)) {
user.setOrigin(jp.readValueAs(String.class));
} else if ("externalId".equalsIgnoreCase(fieldName)) {
user.setExternalId(jp.readValueAs(String.class));
} else if ("zoneId".equalsIgnoreCase(fieldName)) {
user.setZoneId(jp.readValueAs(String.class));
} else if ("salt".equalsIgnoreCase(fieldName)) {
user.setSalt(jp.readValueAs(String.class));
} else if ("passwordLastModified".equalsIgnoreCase(fieldName)) {
if (jp.getValueAsString()!=null) {
user.setPasswordLastModified(JsonDateDeserializer.getDate(jp.getValueAsString(), jp.getCurrentLocation()));
}
} else if ("approvals".equalsIgnoreCase(fieldName)) {
user.setApprovals(new HashSet<>(Arrays.asList(jp.readValueAs(Approval[].class))));
} else if("lastLogonTime".equalsIgnoreCase(fieldName)) {
if(jp.getValueAsString() != null) {
user.setLastLogonTime(jp.getValueAsLong());
}
} else if("previousLogonTime".equalsIgnoreCase(fieldName)) {
if(jp.getValueAsString() != null) {
user.setPreviousLogonTime(jp.getValueAsLong());
}
} else {
throw new UnrecognizedPropertyException("unrecognized field", jp.getCurrentLocation(),
ScimUser.class, fieldName, Collections.emptySet());
}
}
}
return user;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy