diff options
author | Ang Li <angli@google.com> | 2018-01-12 11:54:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-12 11:54:03 -0800 |
commit | c2d947efa173968571cbcc11376159647a9ff356 (patch) | |
tree | c8e06f22c7dffb5ffed4f7824120fb0dff8a5354 /third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java | |
parent | 4d02684ade1a312b39591a94a92328dc0b65b883 (diff) | |
download | mobly-snippet-lib-c2d947efa173968571cbcc11376159647a9ff356.tar.gz |
Support custom converters of non-primitive types. (#86)
Now users can supply custom logic for object serialization/de-serialization
through a centralized class, and snippet lib will automatically use the custom converters.
Added a new example to demonstrate this feature.
Diffstat (limited to 'third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java')
-rw-r--r-- | third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java index d005530..5b0065a 100644 --- a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java +++ b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.ParcelUuid; +import com.google.android.mobly.snippet.manager.SnippetObjectConverterManager; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.URL; @@ -36,6 +37,8 @@ import org.json.JSONObject; public class JsonBuilder { + private JsonBuilder() {} + @SuppressWarnings("unchecked") public static Object build(Object data) throws JSONException { if (data == null) { @@ -69,11 +72,11 @@ public class JsonBuilder { return data; } if (data instanceof Set<?>) { - List<Object> items = new ArrayList<Object>((Set<?>) data); + List<Object> items = new ArrayList<>((Set<?>) data); return buildJsonList(items); } if (data instanceof Collection<?>) { - List<Object> items = new ArrayList<Object>((Collection<?>) data); + List<Object> items = new ArrayList<>((Collection<?>) data); return buildJsonList(items); } if (data instanceof List<?>) { @@ -86,13 +89,13 @@ public class JsonBuilder { return buildJsonIntent((Intent) data); } if (data instanceof Map<?, ?>) { - // TODO(damonkohler): I would like to make this a checked cast if - // possible. + // TODO(damonkohler): I would like to make this a checked cast if possible. return buildJsonMap((Map<String, ?>) data); } if (data instanceof ParcelUuid) { return data.toString(); } + // TODO(xpconanfan): Deprecate the following default non-primitive type builders. if (data instanceof InetSocketAddress) { return buildInetSocketAddress((InetSocketAddress) data); } @@ -112,7 +115,11 @@ public class JsonBuilder { if (data instanceof Object[]) { return buildJSONArray((Object[]) data); } - + // Try with custom converter provided by user. + Object result = SnippetObjectConverterManager.getInstance().objectToJson(data); + if (result != null) { + return result; + } return data.toString(); } @@ -195,8 +202,4 @@ public class JsonBuilder { private static JSONObject buildUri(Uri uri) throws JSONException { return new JSONObject().put("Uri", build((uri != null) ? uri.toString() : "")); } - - private JsonBuilder() { - // This is a utility class. - } } |