package com.mattermost.helpers; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableType; import com.facebook.react.bridge.WritableArray; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; public class ReadableArrayUtils { public static JSONArray toJSONArray(ReadableArray readableArray) throws JSONException { JSONArray jsonArray = new JSONArray(); for (int i = 0; i < readableArray.size(); i++) { ReadableType type = readableArray.getType(i); switch (type) { case Null: jsonArray.put(i, null); break; case Boolean: jsonArray.put(i, readableArray.getBoolean(i)); break; case Number: jsonArray.put(i, readableArray.getDouble(i)); break; case String: jsonArray.put(i, readableArray.getString(i)); break; case Map: jsonArray.put(i, ReadableMapUtils.toJSONObject(readableArray.getMap(i))); break; case Array: jsonArray.put(i, ReadableArrayUtils.toJSONArray(readableArray.getArray(i))); break; } } return jsonArray; } public static Object[] toArray(JSONArray jsonArray) throws JSONException { Object[] array = new Object[jsonArray.length()]; for (int i = 0; i < jsonArray.length(); i++) { Object value = jsonArray.get(i); if (value instanceof JSONObject) { value = ReadableMapUtils.toMap((JSONObject) value); } if (value instanceof JSONArray) { value = ReadableArrayUtils.toArray((JSONArray) value); } array[i] = value; } return array; } public static Object[] toArray(ReadableArray readableArray) { Object[] array = new Object[readableArray.size()]; for (int i = 0; i < readableArray.size(); i++) { ReadableType type = readableArray.getType(i); switch (type) { case Null: array[i] = null; break; case Boolean: array[i] = readableArray.getBoolean(i); break; case Number: array[i] = readableArray.getDouble(i); break; case String: array[i] = readableArray.getString(i); break; case Map: array[i] = ReadableMapUtils.toMap(readableArray.getMap(i)); break; case Array: array[i] = ReadableArrayUtils.toArray(readableArray.getArray(i)); break; } } return array; } public static WritableArray toWritableArray(Object[] array) { WritableArray writableArray = Arguments.createArray(); for (Object value : array) { if (value == null) { writableArray.pushNull(); } else if (value instanceof Boolean) { writableArray.pushBoolean((Boolean) value); } else if (value instanceof Double) { writableArray.pushDouble((Double) value); } else if (value instanceof Integer) { writableArray.pushInt((Integer) value); } else if (value instanceof String) { writableArray.pushString((String) value); } else if (value instanceof Map) { writableArray.pushMap(ReadableMapUtils.toWritableMap((Map) value)); } else if (value.getClass().isArray()) { writableArray.pushArray(ReadableArrayUtils.toWritableArray((Object[]) value)); } } return writableArray; } }