-
-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathCapSentryMapConverter.java
More file actions
140 lines (131 loc) · 5.54 KB
/
CapSentryMapConverter.java
File metadata and controls
140 lines (131 loc) · 5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package io.sentry.capacitor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;
import com.getcapacitor.JSObject;
import org.json.JSONArray;
import org.json.JSONObject;
import io.sentry.ILogger;
import io.sentry.SentryLevel;
import io.sentry.android.core.AndroidLogger;
public final class CapSentryMapConverter {
public static final String NAME = "CapSentry.MapConverter";
private static final ILogger logger = new AndroidLogger(NAME);
private CapSentryMapConverter() {
throw new AssertionError("Utility class should not be instantiated");
}
public static Object convertToWritable(Object serialized) {
if (serialized instanceof List) {
JSONArray writable = new JSONArray();
for (Object item : (List<?>) serialized) {
addValueToWritableArray(writable, convertToWritable(item));
}
return writable;
} else if (serialized instanceof Map) {
JSObject writable = new JSObject();
for (Map.Entry<?, ?> entry : ((Map<?, ?>) serialized).entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
if (key instanceof String) {
addValueToWritableMap(writable, (String) key, convertToWritable(value));
} else {
logger.log(SentryLevel.ERROR, "Only String keys are supported in Map.", key);
}
}
return writable;
} else if (serialized instanceof Byte) {
return Integer.valueOf((Byte) serialized);
} else if (serialized instanceof Short) {
return Integer.valueOf((Short) serialized);
} else if (serialized instanceof Float) {
return Double.valueOf((Float) serialized);
} else if (serialized instanceof Long) {
return Double.valueOf((Long) serialized);
} else if (serialized instanceof BigInteger) {
return ((BigInteger) serialized).doubleValue();
} else if (serialized instanceof BigDecimal) {
return ((BigDecimal) serialized).doubleValue();
} else if (serialized instanceof Integer
|| serialized instanceof Double
|| serialized instanceof Boolean
|| serialized == null
|| serialized instanceof String) {
return serialized;
} else {
logger.log(
SentryLevel.ERROR, "Supplied serialized value could not be converted." + serialized);
return null;
}
}
private static void addValueToWritableArray(JSONArray writableArray, Object value) {
try {
if (value == null) {
writableArray.put(JSONObject.NULL);
} else if (value instanceof Boolean) {
writableArray.put((Boolean) value);
} else if (value instanceof Double) {
writableArray.put((Double) value);
} else if (value instanceof Float) {
writableArray.put(((Float) value).doubleValue());
} else if (value instanceof Integer) {
writableArray.put((Integer) value);
} else if (value instanceof Short) {
writableArray.put(((Short) value).intValue());
} else if (value instanceof Byte) {
writableArray.put(((Byte) value).intValue());
} else if (value instanceof Long) {
writableArray.put(((Long) value).doubleValue());
} else if (value instanceof BigInteger) {
writableArray.put(((BigInteger) value).doubleValue());
} else if (value instanceof BigDecimal) {
writableArray.put(((BigDecimal) value).doubleValue());
} else if (value instanceof String) {
writableArray.put((String) value);
} else if (value instanceof JSObject || value instanceof JSONObject) {
writableArray.put(value instanceof JSObject ? (JSObject) value : (JSONObject) value);
} else if (value instanceof JSONArray) {
writableArray.put((JSONArray) value);
} else {
logger.log(SentryLevel.ERROR, "Could not convert object: " + value);
}
} catch (Exception e) {
logger.log(SentryLevel.ERROR, "Error adding value to array: " + e.getMessage(), e);
}
}
private static void addValueToWritableMap(JSObject writableMap, String key, Object value) {
try {
if (value == null) {
writableMap.put(key, JSONObject.NULL);
} else if (value instanceof Boolean) {
writableMap.put(key, (Boolean) value);
} else if (value instanceof Double) {
writableMap.put(key, (Double) value);
} else if (value instanceof Float) {
writableMap.put(key, ((Float) value).doubleValue());
} else if (value instanceof Integer) {
writableMap.put(key, (Integer) value);
} else if (value instanceof Short) {
writableMap.put(key, ((Short) value).intValue());
} else if (value instanceof Byte) {
writableMap.put(key, ((Byte) value).intValue());
} else if (value instanceof Long) {
writableMap.put(key, ((Long) value).doubleValue());
} else if (value instanceof BigInteger) {
writableMap.put(key, ((BigInteger) value).doubleValue());
} else if (value instanceof BigDecimal) {
writableMap.put(key, ((BigDecimal) value).doubleValue());
} else if (value instanceof String) {
writableMap.put(key, (String) value);
} else if (value instanceof JSONArray) {
writableMap.put(key, (JSONArray) value);
} else if (value instanceof JSObject || value instanceof JSONObject) {
writableMap.put(key, value instanceof JSObject ? (JSObject) value : (JSONObject) value);
} else {
logger.log(SentryLevel.ERROR, "Could not convert object: " + value);
}
} catch (Exception e) {
logger.log(SentryLevel.ERROR, "Error adding value to map: " + e.getMessage(), e);
}
}
}