From 3ee292090346f27e7e23d4943b74ada281f20552 Mon Sep 17 00:00:00 2001
From: Gerwin Gsenger <g.gsenger@datentechnik-innovation.at>
Date: Tue, 13 Jan 2015 14:43:57 +0100
Subject: add initial deserialization, small code restructuring

---
 .../config/auth/ConfigurationToJSONConverter.java  | 118 ++++++++++++++++-----
 1 file changed, 90 insertions(+), 28 deletions(-)

(limited to 'id/server/idserverlib/src')

diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/ConfigurationToJSONConverter.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/ConfigurationToJSONConverter.java
index 2efb1e251..00a685b5e 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/ConfigurationToJSONConverter.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/ConfigurationToJSONConverter.java
@@ -8,16 +8,19 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
 
 import at.gv.egovernment.moa.id.config.ConfigurationException;
 import at.gv.egovernment.moa.id.config.ConfigurationProvider;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
@@ -30,8 +33,18 @@ public class ConfigurationToJSONConverter {
 
 		try {
 			ConfigurationToJSONConverter converter = new ConfigurationToJSONConverter();
-			List<String> jsonResults = converter.convertConfigToJSONStrings(true);
-			System.out.println(jsonResults);
+			Map<String, String> jsonResults = converter.convertConfigToJSONStrings(true);
+			for (String name : jsonResults.keySet()) {
+				System.out.println("Method: " + name + " = ");
+				System.out.println(jsonResults.get(name));
+				converter.convertJsonStringToObject(jsonResults.get(name));
+			}
+
+			System.out.println("Try conversion from Json to object");
+			for (String name : jsonResults.keySet()) {
+				Object obj = converter.convertJsonStringToObject(jsonResults.get(name));
+				System.out.println(obj);
+			}
 
 		} catch (ConfigurationException e) {
 			e.printStackTrace();
@@ -51,9 +64,10 @@ public class ConfigurationToJSONConverter {
 		try (PrintWriter outStream = new PrintWriter(out)) {
 			// get pretty printed JSON
 			ConfigurationToJSONConverter converter = new ConfigurationToJSONConverter();
-			List<String> jsonResults = converter.convertConfigToJSONStrings(isPrettyPrint);
-			for (String json : jsonResults) {
-				outStream.println(json);
+			Map<String, String> jsonResults = converter.convertConfigToJSONStrings(isPrettyPrint);
+			for (String name : jsonResults.keySet()) {
+				outStream.println(name);
+				outStream.println(jsonResults.get(name));
 			}
 		}
 
@@ -61,24 +75,17 @@ public class ConfigurationToJSONConverter {
 
 	public void writeConfigToJSONDB() throws ConfigurationException {
 		ConfigurationToJSONConverter converter = new ConfigurationToJSONConverter();
-		List<String> jsonResults = converter.convertConfigToJSONStrings(false);
-		if(jsonResults.isEmpty()){
+		Map<String, String> jsonResults = converter.convertConfigToJSONStrings(false);
+		if (jsonResults.isEmpty()) {
 			System.out.println("WARN: writing EMPTY configuration to database");
 		}
 		// TODO: write to db
 	}
 
-	public List<String> convertConfigToJSONStrings(boolean prettyPrint) {
-
-		List<String> result = new ArrayList<String>();
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
-		mapper.setVisibility(PropertyAccessor.GETTER, Visibility.PUBLIC_ONLY);
-		mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.PUBLIC_ONLY);
+	public Map<String, String> convertConfigToJSONStrings(boolean prettyPrint) {
 
-		if (prettyPrint) {
-			mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		}
+		Map<String, String> result = new HashMap<String, String>();
+		JsonMapper mapper = new JsonMapper(prettyPrint);
 
 		try {
 			// find all getter methods
@@ -89,30 +96,85 @@ public class ConfigurationToJSONConverter {
 						&& (!"class".equals(pd.getName()))
 						&& (pd.getReadMethod().getAnnotation(JsonIgnore.class) == null)) {
 					try {
+						JsonProperty name = pd.getReadMethod().getAnnotation(JsonProperty.class);
 						// get result of get method
 						Object tmp = pd.getReadMethod().invoke(config);
 						// convert result to JSON
-						String show = mapper.writeValueAsString(tmp);
-						System.out.println("Method: " + pd.getDisplayName());
-						System.out.println(show);
-						result.add(show);
+						String json = mapper.serialize(tmp);
+						if (name != null) {
+							result.put(name.value(), json);
+						} else {
+							System.out.println("CHECK if '" + pd.getDisplayName() + "' is NOT ANNOTATED");
+						}
+
 					} catch (JsonGenerationException | JsonMappingException e) {
-						 System.out.println("Problems while writing JSON as String");
-						 return new ArrayList<String>();
+						System.out.println("Problems while writing JSON as String");
+						return new HashMap<String, String>();
 					}
 				}
 			}
 
-			// TODO: handle static methods
+			// no static method handling needed
 
 		} catch (IntrospectionException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
 			System.out.println("Problems while using reflection to get all getter methods.");
 		} catch (IOException e) {
-			System.out.println("Problems while writing JSON as String");
-			return new ArrayList<String>();
+			System.out.println("Problems while writing JSON as string");
+			return new HashMap<String, String>();
 		}
 
 		return result;
 	}
 
+	public Object convertJsonStringToObject(String jsonString){
+		JsonMapper mapper = new JsonMapper();
+		Object result = null;
+		try {
+			result = mapper.deserialize(jsonString, null);
+		} catch (JsonParseException | JsonMappingException e) {
+			System.out.println("Problems parsing the JSON string");
+			return null;
+		} catch (IOException e) {
+			System.out.println("Problems while reading JSON string");
+			return null;
+		}
+
+		return result;
+	}
+
+	private class JsonMapper {
+
+		private ObjectMapper mapper = new ObjectMapper();
+
+		public JsonMapper(){
+			this(false);
+		}
+
+		public JsonMapper(boolean prettyPrint) {
+			mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+			mapper.setVisibility(PropertyAccessor.GETTER, Visibility.PUBLIC_ONLY);
+			mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.PUBLIC_ONLY);
+			if (prettyPrint) {
+				mapper.enable(SerializationFeature.INDENT_OUTPUT);
+			}
+		}
+
+		public String serialize(Object value) throws JsonProcessingException {
+			return mapper.writeValueAsString(value);
+		}
+
+		public Object deserialize(String value, Class type) throws JsonParseException, JsonMappingException,
+				IOException {
+
+			ObjectMapper mapper = new ObjectMapper();
+			if (type != null) {
+				return mapper.readValue(value, type);
+			} else {
+				return mapper.readValue(value, Object.class);
+			}
+
+		}
+
+	}
+
 }
-- 
cgit v1.2.3