Bläddra i källkod

scim domain init

scim domain init
shimingxy 5 år sedan
förälder
incheckning
804bdd398f
28 ändrade filer med 562 tillägg och 125 borttagningar
  1. 1 1
      maxkey-connectors/maxkey-connector-activedirectory/src/main/resources/application.properties
  2. 1 1
      maxkey-connectors/maxkey-connector-ldap/src/main/resources/application.properties
  3. 33 0
      maxkey-core/src/main/java/org/maxkey/json/JsonDateDeserializer.java
  4. 16 14
      maxkey-core/src/main/java/org/maxkey/json/JsonDateSerializer.java
  5. 19 18
      maxkey-core/src/main/java/org/maxkey/json/JsonDateTimeDeserializer.java
  6. 16 16
      maxkey-core/src/main/java/org/maxkey/json/JsonDateTimeSerializer.java
  7. 21 34
      maxkey-core/src/main/java/org/maxkey/json/JsonISODateDeserializer.java
  8. 14 28
      maxkey-core/src/main/java/org/maxkey/json/JsonISODateSerializer.java
  9. 14 0
      maxkey-identitys/maxkey-identity-scim/.classpath
  10. 3 2
      maxkey-identitys/maxkey-identity-scim/.settings/org.eclipse.wst.common.component
  11. 1 4
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Enterprise.java
  12. 16 3
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/EnterpriseUser.java
  13. 8 2
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Group.java
  14. 15 0
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Meta.java
  15. 5 0
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MultiValuedAttribute.java
  16. 2 1
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Resource.java
  17. 3 0
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/User.java
  18. 1 1
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoneNumber.java
  19. 24 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ReadJson2String.java
  20. 48 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString.json
  21. 18 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java
  22. 67 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java
  23. 33 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString.json
  24. 19 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java
  25. 46 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java
  26. 42 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString.json
  27. 16 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java
  28. 60 0
      maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java

+ 1 - 1
maxkey-connectors/maxkey-connector-activedirectory/src/main/resources/application.properties

@@ -15,7 +15,7 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.kafka.bootstrap-servers=localhost:9092
 ###########【初始化消费者配置】###########
 # 默认的消费组ID
-spring.kafka.consumer.properties.group.id=defaultConsumerGroup
+spring.kafka.consumer.properties.group.id=ActiveDirectoryConsumerGroup
 # 是否自动提交offset
 spring.kafka.consumer.enable-auto-commit=true
 # 提交offset延时(接收到消息后多久提交offset)

+ 1 - 1
maxkey-connectors/maxkey-connector-ldap/src/main/resources/application.properties

@@ -17,7 +17,7 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.kafka.bootstrap-servers=localhost:9092
 ###########【初始化消费者配置】###########
 # 默认的消费组ID
-spring.kafka.consumer.properties.group.id=test-consumer-group
+spring.kafka.consumer.properties.group.id=LdapConsumerGroup
 # 是否自动提交offset
 spring.kafka.consumer.enable-auto-commit=true
 # 提交offset延时(接收到消息后多久提交offset)

+ 33 - 0
maxkey-core/src/main/java/org/maxkey/json/JsonDateDeserializer.java

@@ -0,0 +1,33 @@
+package org.maxkey.json;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * JSON deserializer for Jackson to handle regular date instances as timestamps
+ * in ISO format.
+ *
+ */
+public class JsonDateDeserializer extends JsonDeserializer<Date> {
+
+    private static final SimpleDateFormat dateFormat = 
+            new SimpleDateFormat("yyyy-MM-dd");
+
+    @Override
+    public Date deserialize(JsonParser parser, DeserializationContext context)
+            throws IOException, JsonProcessingException {
+        try {
+            return dateFormat.parse(parser.getText());
+        } catch (ParseException e) {
+            throw new JsonParseException(parser,"Could not parse date", e);
+        }
+    }
+
+}

+ 16 - 14
maxkey-core/src/main/java/org/maxkey/json/JsonDateSerializer.java

@@ -1,28 +1,30 @@
 package org.maxkey.json;
 
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.springframework.stereotype.Component;
-
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.stereotype.Component;
 
 /**
- * 日期json序列化格式
+ * 日期json序列化格式.
+ * 
  * @author Crystal.Sea
  *
  */
+
 @Component
-public class JsonDateSerializer  extends JsonSerializer<Date>{
-	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+public class JsonDateSerializer extends JsonSerializer<Date> {
+    private static final SimpleDateFormat dateFormat = 
+            new SimpleDateFormat("yyyy-MM-dd");
 
-	@Override
-	public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
-	throws IOException, JsonProcessingException {
-		String formattedDate = dateFormat.format(date);
-		gen.writeString(formattedDate);
-	}
+    @Override
+    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
+            throws IOException, JsonProcessingException {
+        String formattedDate = dateFormat.format(date);
+        gen.writeString(formattedDate);
+    }
 }

+ 19 - 18
maxkey-core/src/main/java/org/maxkey/json/JsonDateTimeDeserializer.java

@@ -1,31 +1,32 @@
 package org.maxkey.json;
 
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
 import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-
 import org.springframework.stereotype.Component;
 
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
 
 @Component
-public class JsonDateTimeDeserializer   extends JsonDeserializer<Date>{
-	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-	@Override
-	public Date deserialize(JsonParser jsonParser, DeserializationContext dc)
-			throws IOException, JsonProcessingException {
-		Date parserDate=null;
-		try {
-			parserDate = dateFormat.parse(jsonParser.getText());
-		} catch (ParseException e) {
+public class JsonDateTimeDeserializer extends JsonDeserializer<Date> {
+    private static final SimpleDateFormat dateFormat = 
+            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
-			e.printStackTrace();
-		}
-		return parserDate;
-	}
+    @Override
+    public Date deserialize(JsonParser parser, DeserializationContext dc)
+            throws IOException, JsonProcessingException {
+        Date parserDate = null;
+        try {
+            parserDate = dateFormat.parse(parser.getText());
+        } catch (ParseException e) {
+            throw new JsonParseException(parser,"Could not parse date", e);
+        }
+        return parserDate;
+    }
 
 }

+ 16 - 16
maxkey-core/src/main/java/org/maxkey/json/JsonDateTimeSerializer.java

@@ -1,28 +1,28 @@
 package org.maxkey.json;
 
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.springframework.stereotype.Component;
-
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
-
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.stereotype.Component;
 /**
- * 日期时间json序列化格式
+ * 日期时间json序列化格式.
+ * 
  * @author Crystal.Sea
  *
  */
+
 @Component
-public class JsonDateTimeSerializer  extends JsonSerializer<Date>{
-	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-	
-	@Override
-	public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
-	throws IOException, JsonProcessingException {
-		String formattedDate = dateFormat.format(date);
-		gen.writeString(formattedDate);
-	}
+public class JsonDateTimeSerializer extends JsonSerializer<Date> {
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @Override
+    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
+            throws IOException, JsonProcessingException {
+        String formattedDate = dateFormat.format(date);
+        gen.writeString(formattedDate);
+    }
 }

+ 21 - 34
maxkey-core/src/main/java/org/maxkey/json/JsonISODateDeserializer.java

@@ -1,47 +1,34 @@
-/*
- * Cloud Foundry 2012.02.03 Beta
- * Copyright (c) [2009-2012] VMware, 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.maxkey.json;
 
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 /**
- * JSON deserializer for Jackson to handle regular date instances as timestamps in ISO format.
- * 
- * @author Dave Syer
+ * JSON deserializer for Jackson to handle regular date instances as timestamps
+ * in ISO format.
  *
  */
+
 public class JsonISODateDeserializer extends JsonDeserializer<Date> {
-	 
-    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
- 
-	@Override
-	public Date deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
-		try {
-			return dateFormat.parse(parser.getText());
-		}
-		catch (ParseException e) {
-			throw new JsonParseException("Could not parse date", parser.getCurrentLocation(), e);
-		}
-	}
- 
+
+    private static final SimpleDateFormat dateFormat = 
+            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+
+    @Override
+    public Date deserialize(JsonParser parser, DeserializationContext context)
+            throws IOException, JsonProcessingException {
+        try {
+            return dateFormat.parse(parser.getText());
+        } catch (ParseException e) {
+            throw new JsonParseException(parser,"Could not parse date", e);
+        }
+    }
+
 }

+ 14 - 28
maxkey-core/src/main/java/org/maxkey/json/JsonISODateSerializer.java

@@ -1,42 +1,28 @@
-/*
- * Cloud Foundry 2012.02.03 Beta
- * Copyright (c) [2009-2012] VMware, 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.maxkey.json;
 
-
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 /**
- * JSON serializer for Jackson to handle regular date instances as timestamps in ISO format.
- * 
- * @author Dave Syer
- * 
+ * JSON serializer for Jackson to handle regular date instances as timestamps in
+ * ISO format.
  */
+
 public class JsonISODateSerializer extends JsonSerializer<Date> {
 
-	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+    private static final SimpleDateFormat dateFormat = 
+            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
 
-	@Override
-	public void serialize(Date date, JsonGenerator generator, SerializerProvider provider) throws IOException,
-			JsonProcessingException {
-		String formatted = dateFormat.format(date);
-		generator.writeString(formatted);
-	}
+    @Override
+    public void serialize(Date date, JsonGenerator generator, SerializerProvider provider)
+            throws IOException, JsonProcessingException {
+        String formatted = dateFormat.format(date);
+        generator.writeString(formatted);
+    }
 
 }

+ 14 - 0
maxkey-identitys/maxkey-identity-scim/.classpath

@@ -12,6 +12,20 @@
 			<attribute name="gradle_used_by_scope" value="main,test"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="src" output="bin/test" path="src/test/java">
+		<attributes>
+			<attribute name="gradle_scope" value="test"/>
+			<attribute name="gradle_used_by_scope" value="test"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="bin/test" path="src/test/resources">
+		<attributes>
+			<attribute name="gradle_scope" value="test"/>
+			<attribute name="gradle_used_by_scope" value="test"/>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
 	<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
 		<attributes>

+ 3 - 2
maxkey-identitys/maxkey-identity-scim/.settings/org.eclipse.wst.common.component

@@ -1,8 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-modules id="moduleCoreId" project-version="1.5.0">
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
 	<wb-module deploy-name="maxkey-identity-scim">
 		<wb-resource deploy-path="/" source-path="src/main/resources"/>
 		<wb-resource deploy-path="/" source-path="src/main/java"/>
+        <wb-resource deploy-path="/" source-path="/src/test/java"/>
+        <wb-resource deploy-path="/" source-path="/src/test/resources"/>
 		<dependent-module deploy-path="../" handle="module:/resource/maxkey-core/maxkey-core">
 			<dependency-type>uses</dependency-type>
 		</dependent-module>

+ 1 - 4
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Enterprise.java

@@ -3,11 +3,8 @@ package org.maxkey.identity.scim.resources;
 import java.io.Serializable;
 
 public class Enterprise implements Serializable {
-    
-    /**
-     * 
-     */
     private static final long serialVersionUID = -204619629148409697L;
+    
     private  String employeeNumber;
     private  String costCenter;
     private  String organization;

+ 16 - 3
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/EnterpriseUser.java

@@ -1,16 +1,29 @@
 package org.maxkey.identity.scim.resources;
 
+import java.util.HashSet;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class EnterpriseUser extends User {
-    /**
-     * 
-     */
     private static final long serialVersionUID = 3212312511630459427L;
     
     public static final String SCHEMA = "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User";
     
+    @JsonProperty(SCHEMA)
     Enterprise enterprise;
     
     public EnterpriseUser() {
+        schemas =new HashSet<String>();
+        schemas.add(User.SCHEMA);
+        schemas.add(SCHEMA);
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
     }
     
     

+ 8 - 2
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Group.java

@@ -1,13 +1,16 @@
 package org.maxkey.identity.scim.resources;
 
+import java.util.HashSet;
 import java.util.Set;
 
-public class Group {
+public class Group extends Resource{
+    private static final long serialVersionUID = 404613567384513866L;
 
     public static final String SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:Group";
-
+    
     private  String displayName;
     private  Set<MemberRef> members;
+    
     public String getDisplayName() {
         return displayName;
     }
@@ -20,7 +23,10 @@ public class Group {
     public void setMembers(Set<MemberRef> members) {
         this.members = members;
     }
+    
     public Group() {
+        schemas =new HashSet<String>();
+        schemas.add(SCHEMA);
     }
     
 }

+ 15 - 0
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Meta.java

@@ -4,6 +4,11 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.Set;
 
+import org.maxkey.json.*;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
 public class Meta implements Serializable {
     
     /**
@@ -12,10 +17,20 @@ public class Meta implements Serializable {
     private static final long serialVersionUID = -2244662962968933591L;
     
     private  String resourceType;
+    
+    @JsonSerialize(using = JsonISODateSerializer.class)
+    @JsonDeserialize(using = JsonISODateDeserializer.class)
     private  Date created;
+    
+    @JsonSerialize(using = JsonISODateSerializer.class)
+    @JsonDeserialize(using = JsonISODateDeserializer.class)
+    
     private  Date lastModified;
+    
     private  String location;
+    
     private  String version;
+    
     private  Set<String> attributes;
     
     

+ 5 - 0
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/MultiValuedAttribute.java

@@ -2,11 +2,16 @@ package org.maxkey.identity.scim.resources;
 
 import java.io.Serializable;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class MultiValuedAttribute implements Serializable {
+    
     private static final long serialVersionUID = 6878912593878245947L;
+    
     String value;
     String display;
     boolean primary;
+    @JsonProperty("$ref")
     String reference;
     String type;
       

+ 2 - 1
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/Resource.java

@@ -9,10 +9,11 @@ public class Resource implements Serializable {
      * 
      */
     private static final long serialVersionUID = -5159743553948621024L;
+    protected  Set<String> schemas;
     private  String id;
     private  String externalId;
     private  Meta meta;
-    private  Set<String> schemas;
+    
     public Resource() {
 
     }

+ 3 - 0
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/User.java

@@ -1,5 +1,6 @@
 package org.maxkey.identity.scim.resources;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
@@ -176,6 +177,8 @@ public class User extends Resource{
         this.extensions = extensions;
     }
     public User() {
+        schemas =new HashSet<String>();
+        schemas.add(SCHEMA);
     }
 
     

+ 1 - 1
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/UserPhoneNumber.java

@@ -2,7 +2,7 @@ package org.maxkey.identity.scim.resources;
 
 import java.io.Serializable;
 
-public class UserPhoneNumber  implements Serializable {
+public class UserPhoneNumber extends MultiValuedAttribute implements Serializable {
 
     /**
      * 

+ 24 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ReadJson2String.java

@@ -0,0 +1,24 @@
+package org.maxkey.identity.scim.resources;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+
+public class ReadJson2String {
+
+    public static String read(String jsonFileName) {
+        try {
+            List<String> list = FileUtils.readLines(new File(ReadJson2String.class.getResource(jsonFileName).getFile()),"UTF-8");
+            StringBuilder sb = new StringBuilder();
+            for (String ss : list) {
+                sb.append(ss);
+            }
+            System.out.println(sb.toString());
+            return sb.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 48 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString.json

@@ -0,0 +1,48 @@
+{
+  "schemas": [
+    "urn:ietf:params:scim:schemas:core:2.0:User",
+    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
+  ],
+  "id": "1111111111111",
+  "externalId": "UserName",
+  "meta": {
+    "resourceType": "User",
+    "created": "2020-06-15T23:06:00.129Z",
+    "lastModified": "2020-06-15T23:06:00.129Z",
+    "location": "https://example.com/v2/Users/2819c223...",
+    "version": "W\\/\"f250dd84f0671c3\""
+  },
+  "userName": "UserName",
+  "name": {
+    "formatted": "Ms. Barbara J Jensen, III",
+    "familyName": "Jensen",
+    "givenName": "Barbara",
+    "middleName": "Jane",
+    "honorificPrefix": "Ms.",
+    "honorificSuffix": "III"
+  },
+  "emails": [
+    {
+      "value": "bjensen@example.com",
+      "primary": false,
+      "type": "work"
+    }
+  ],
+  "phoneNumbers": [
+    {
+      "value": "555-555-8377",
+      "primary": false,
+      "type": "home"
+    },
+    {
+      "value": "555-555-8377",
+      "primary": false,
+      "type": "work"
+    }
+  ],
+  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
+    "employeeNumber": "k200908",
+    "costCenter": "1111",
+    "department": "de"
+  }
+}

+ 18 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonString2ObjectTest.java

@@ -0,0 +1,18 @@
+package org.maxkey.identity.scim.resources;
+
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimEnterpriseUserJsonString2ObjectTest {
+
+    public static void main(String[] args) {
+       
+        String userJsonString = ReadJson2String.read("ScimEnterpriseUserJsonString.json");
+        EnterpriseUser u  = JsonUtils.json2Object(userJsonString, EnterpriseUser.class);
+        
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(u)));
+        System.out.println(u.getEnterprise().getCostCenter());
+    }
+
+}

+ 67 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimEnterpriseUserJsonTest.java

@@ -0,0 +1,67 @@
+package org.maxkey.identity.scim.resources;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimEnterpriseUserJsonTest {
+
+    public static void main(String[] args) {
+       
+        // TODO Auto-generated method stub
+        EnterpriseUser u = new EnterpriseUser();
+        u.setUserName("UserName");
+        u.setExternalId("UserName");
+        u.setId("1111111111111");
+        
+        Meta meta = new Meta();
+        meta.setVersion("W\\/\"f250dd84f0671c3\"");
+        meta.setCreated(new Date());
+        meta.setLocation("https://example.com/v2/Users/2819c223...");
+        meta.setResourceType("User");
+        meta.setLastModified(new Date());
+        u.setMeta(meta);
+        
+        UserName un=new UserName();
+        un.setFamilyName("Jensen");
+        un.setFormatted("Ms. Barbara J Jensen, III");
+        un.setGivenName("Barbara");
+        un.setHonorificPrefix("Ms.");
+        un.setHonorificSuffix("III");
+        un.setMiddleName("Jane");
+        u.setName(un);
+        
+        List<UserPhoneNumber> UserPhoneNumberList = new ArrayList<UserPhoneNumber>();
+        UserPhoneNumber pn =new UserPhoneNumber();
+        pn.setValue("555-555-8377");
+        pn.setType(UserPhoneNumber.UserPhoneNumberType.WORK);
+        
+        UserPhoneNumber pnh =new UserPhoneNumber();
+        pnh.setValue("555-555-8377");
+        pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME);
+        UserPhoneNumberList.add(pnh);
+        
+        UserPhoneNumberList.add(pn);
+        
+        u.setPhoneNumbers(UserPhoneNumberList);
+        
+        List<UserEmail> ueList = new ArrayList<UserEmail>();
+        UserEmail ue =new UserEmail();
+        ue.setValue("bjensen@example.com");
+        ue.setType(UserEmail.UserEmailType.WORK);
+        ueList.add(ue);
+        u.setEmails(ueList);
+        
+        Enterprise ent =new Enterprise();
+        ent.setCostCenter("1111");
+        ent.setDepartment("de");
+        ent.setEmployeeNumber("k200908");
+        u.setEnterprise(ent);
+        
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(u)));
+    }
+
+}

+ 33 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString.json

@@ -0,0 +1,33 @@
+{
+  "schemas": [
+    "urn:ietf:params:scim:schemas:core:2.0:Group"
+  ],
+  "meta": {
+    "resourceType": "User",
+    "created": "2020-06-15T23:08:50.698Z",
+    "lastModified": "2020-06-15T23:08:50.698Z",
+    "location": "https://example.com/v2/Users/2819c223...",
+    "version": "W\\/\"f250dd84f0671c3\""
+  },
+  "displayName": "Tour Guides",
+  "members": [
+    {
+      "value": "2819c223-7f76-453a-919d-413861904646",
+      "display": "Babs Jensen",
+      "primary": false,
+      "$ref": "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
+    },
+    {
+      "value": "2819c223-7f76-453a-919d-413861904646",
+      "display": "Babs Jensen",
+      "primary": false,
+      "$ref": "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
+    },
+    {
+      "value": "2819c223-7f76-453a-919d-413861904646",
+      "display": "Babs Jensen",
+      "primary": false,
+      "$ref": "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
+    }
+  ]
+}

+ 19 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonString2ObjectTest.java

@@ -0,0 +1,19 @@
+package org.maxkey.identity.scim.resources;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimGroupJsonString2ObjectTest {
+    public static void main(String[] args) {
+        String userJsonString = ReadJson2String.read("ScimGroupJsonString.json");
+        Group g  = JsonUtils.json2Object(userJsonString, Group.class);
+
+        
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(g)));
+    }
+}

+ 46 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimGroupJsonTest.java

@@ -0,0 +1,46 @@
+package org.maxkey.identity.scim.resources;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimGroupJsonTest {
+    public static void main(String[] args) {
+        Group g= new Group();
+        
+        Meta meta = new Meta();
+        meta.setVersion("W\\/\"f250dd84f0671c3\"");
+        meta.setCreated(new Date());
+        meta.setLocation("https://example.com/v2/Users/2819c223...");
+        meta.setResourceType("User");
+        meta.setLastModified(new Date());
+        g.setMeta(meta);
+              
+        g.setDisplayName("Tour Guides");
+        
+        Set<MemberRef> mrSet =new HashSet<MemberRef>();
+        MemberRef mr1 =new MemberRef();
+        mr1.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
+        mr1.setValue("2819c223-7f76-453a-919d-413861904646");
+        mr1.setDisplay("Babs Jensen");
+        MemberRef mr2 =new MemberRef();
+        mr2.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
+        mr2.setValue("2819c223-7f76-453a-919d-413861904646");
+        mr2.setDisplay("Babs Jensen");
+        MemberRef mr3 =new MemberRef();
+        mr3.setReference("https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646");
+        mr3.setValue("2819c223-7f76-453a-919d-413861904646");
+        mr3.setDisplay("Babs Jensen");
+        mrSet.add(mr1);
+        mrSet.add(mr2);
+        mrSet.add(mr3);
+        
+        g.setMembers(mrSet);
+        
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(g)));
+    }
+}

+ 42 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString.json

@@ -0,0 +1,42 @@
+{
+  "schemas": [
+    "urn:ietf:params:scim:schemas:core:2.0:User"
+  ],
+  "id": "1111111111111",
+  "externalId": "UserName",
+  "meta": {
+    "resourceType": "User",
+    "created": "2020-06-15T23:09:30.763Z",
+    "lastModified": "2020-06-15T23:09:30.763Z",
+    "location": "https://example.com/v2/Users/2819c223...",
+    "version": "W\\/\"f250dd84f0671c3\""
+  },
+  "userName": "UserName",
+  "name": {
+    "formatted": "Ms. Barbara J Jensen, III",
+    "familyName": "Jensen",
+    "givenName": "Barbara",
+    "middleName": "Jane",
+    "honorificPrefix": "Ms.",
+    "honorificSuffix": "III"
+  },
+  "emails": [
+    {
+      "value": "bjensen@example.com",
+      "primary": false,
+      "type": "work"
+    }
+  ],
+  "phoneNumbers": [
+    {
+      "value": "555-555-8377",
+      "primary": false,
+      "type": "home"
+    },
+    {
+      "value": "555-555-8377",
+      "primary": false,
+      "type": "work"
+    }
+  ]
+}

+ 16 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonString2ObjectTest.java

@@ -0,0 +1,16 @@
+package org.maxkey.identity.scim.resources;
+
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimUserJsonString2ObjectTest {
+
+    public static void main(String[] args) {
+
+        String userJsonString = ReadJson2String.read("ScimUserJsonString.json");
+        User u  = JsonUtils.json2Object(userJsonString, User.class);
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(u)));
+    }
+
+}

+ 60 - 0
maxkey-identitys/maxkey-identity-scim/src/test/java/org/maxkey/identity/scim/resources/ScimUserJsonTest.java

@@ -0,0 +1,60 @@
+package org.maxkey.identity.scim.resources;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.maxkey.pretty.impl.JsonPretty;
+import org.maxkey.util.JsonUtils;
+
+public class ScimUserJsonTest {
+
+    public static void main(String[] args) {
+        // TODO Auto-generated method stub
+        User u = new User();
+        u.setUserName("UserName");
+        u.setExternalId("UserName");
+        u.setId("1111111111111");
+        
+        Meta meta = new Meta();
+        meta.setVersion("W\\/\"f250dd84f0671c3\"");
+        meta.setCreated(new Date());
+        meta.setLocation("https://example.com/v2/Users/2819c223...");
+        meta.setResourceType("User");
+        meta.setLastModified(new Date());
+        u.setMeta(meta);
+        
+        UserName un=new UserName();
+        un.setFamilyName("Jensen");
+        un.setFormatted("Ms. Barbara J Jensen, III");
+        un.setGivenName("Barbara");
+        un.setHonorificPrefix("Ms.");
+        un.setHonorificSuffix("III");
+        un.setMiddleName("Jane");
+        u.setName(un);
+        
+        List<UserPhoneNumber> UserPhoneNumberList = new ArrayList<UserPhoneNumber>();
+        UserPhoneNumber pn =new UserPhoneNumber();
+        pn.setValue("555-555-8377");
+        pn.setType(UserPhoneNumber.UserPhoneNumberType.WORK);
+        
+        UserPhoneNumber pnh =new UserPhoneNumber();
+        pnh.setValue("555-555-8377");
+        pnh.setType(UserPhoneNumber.UserPhoneNumberType.HOME);
+        UserPhoneNumberList.add(pnh);
+        
+        UserPhoneNumberList.add(pn);
+        
+        u.setPhoneNumbers(UserPhoneNumberList);
+        
+        List<UserEmail> ueList = new ArrayList<UserEmail>();
+        UserEmail ue =new UserEmail();
+        ue.setValue("bjensen@example.com");
+        ue.setType(UserEmail.UserEmailType.WORK);
+        ueList.add(ue);
+        u.setEmails(ueList);
+        
+        System.out.println(
+                (new JsonPretty()).format(JsonUtils.object2Json(u)));
+    }
+
+}