1 package com.atlassian.asap.nimbus.serializer;
2
3 import net.minidev.json.JSONArray;
4 import net.minidev.json.JSONObject;
5
6 import javax.json.JsonArray;
7 import javax.json.JsonNumber;
8 import javax.json.JsonObject;
9 import javax.json.JsonString;
10 import javax.json.JsonValue;
11 import java.util.Map;
12
13
14
15
16 class Jsr353NimbusTranslator {
17 static Object jsr353ToNimbus(JsonValue jsonValue) {
18 switch (jsonValue.getValueType()) {
19 case NULL:
20 return null;
21 case STRING:
22 return ((JsonString) jsonValue).getString();
23 case NUMBER:
24 return convertNumber((JsonNumber) jsonValue);
25 case TRUE:
26 return Boolean.TRUE;
27 case FALSE:
28 return Boolean.FALSE;
29 case ARRAY:
30 return convertArray((JsonArray) jsonValue);
31 case OBJECT:
32 return convertObject((JsonObject) jsonValue);
33 default:
34 throw new IllegalStateException("Broken JSON");
35 }
36 }
37
38 private static Object convertNumber(JsonNumber jsonNumber) {
39
40 if (jsonNumber.isIntegral()) {
41 return jsonNumber.longValueExact();
42 } else {
43 return jsonNumber.doubleValue();
44 }
45 }
46
47 private static Object convertArray(JsonArray jsonValue) {
48 JSONArray nimbusArray = new JSONArray();
49 for (JsonValue arrayElement : jsonValue) {
50 nimbusArray.add(jsr353ToNimbus(arrayElement));
51 }
52 return nimbusArray;
53 }
54
55 private static Object convertObject(JsonObject jsonValue) {
56 JSONObject nimbusObject = new JSONObject();
57 for (Map.Entry<String, JsonValue> entry : jsonValue.entrySet()) {
58 nimbusObject.put(entry.getKey(), jsr353ToNimbus(entry.getValue()));
59 }
60 return nimbusObject;
61 }
62 }