You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuDbo.java 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package com.luticate.utils.dbo;
  2. import org.json.JSONArray;
  3. import org.json.JSONException;
  4. import org.json.JSONObject;
  5. import java.lang.reflect.Array;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.GenericArrayType;
  8. import java.lang.reflect.ParameterizedType;
  9. import java.lang.reflect.Type;
  10. import java.util.AbstractMap;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. import java.util.Vector;
  14. /**
  15. * Created by robin on 11/27/15.
  16. */
  17. public abstract class LuDbo {
  18. public void fromString(String data) throws Exception
  19. {
  20. JSONObject json = new JSONObject(data);
  21. fromJson(json);
  22. }
  23. public static String getFieldFromJson(String jsonName)
  24. {
  25. if (!jsonName.startsWith("_")) {
  26. return String.format("_%s", jsonName);
  27. }
  28. return jsonName;
  29. }
  30. public static String getJsonFromField(String fieldName)
  31. {
  32. if (fieldName.startsWith("_")) {
  33. return fieldName.substring(1);
  34. }
  35. return fieldName;
  36. }
  37. public static Object getObjectFromJson(Class clazz, JSONObject json, String key) throws Exception {
  38. if (json.isNull(key)) {
  39. return null;
  40. }
  41. if (clazz == Byte.class || clazz == byte.class) {
  42. return (byte) json.getInt(key);
  43. }
  44. if (clazz == Character.class || clazz == char.class) {
  45. return json.getString(key).charAt(0);
  46. }
  47. if (clazz == Short.class || clazz == short.class) {
  48. return (short) json.getInt(key);
  49. }
  50. if (clazz == Integer.class || clazz == int.class) {
  51. return json.getInt(key);
  52. }
  53. if (clazz == Long.class || clazz == long.class) {
  54. return json.getLong(key);
  55. }
  56. if (clazz == Float.class || clazz == float.class) {
  57. return (float) json.getDouble(key);
  58. }
  59. if (clazz == Double.class || clazz == double.class) {
  60. return json.getDouble(key);
  61. }
  62. if (clazz == Boolean.class || clazz == boolean.class) {
  63. return json.getBoolean(key);
  64. }
  65. if (clazz == String.class) {
  66. return json.getString(key);
  67. }
  68. if (LuDbo.class.isAssignableFrom(clazz)) {
  69. LuDbo dbo = (LuDbo) clazz.newInstance();
  70. dbo.fromJson(json.getJSONObject(key));
  71. return dbo;
  72. }
  73. return null;
  74. }
  75. public static Object getObjectFromJson(Class clazz, JSONArray json, int key) throws Exception {
  76. if (json.isNull(key)) {
  77. return null;
  78. }
  79. if (clazz == Byte.class || clazz == byte.class) {
  80. return (byte) json.getInt(key);
  81. }
  82. if (clazz == Character.class || clazz == char.class) {
  83. return json.getString(key).charAt(0);
  84. }
  85. if (clazz == Short.class || clazz == short.class) {
  86. return (short) json.getInt(key);
  87. }
  88. if (clazz == Integer.class || clazz == int.class) {
  89. return json.getInt(key);
  90. }
  91. if (clazz == Long.class || clazz == long.class) {
  92. return json.getLong(key);
  93. }
  94. if (clazz == Float.class || clazz == float.class) {
  95. return (float) json.getDouble(key);
  96. }
  97. if (clazz == Double.class || clazz == double.class) {
  98. return json.getDouble(key);
  99. }
  100. if (clazz == Boolean.class || clazz == boolean.class) {
  101. return json.getBoolean(key);
  102. }
  103. if (clazz == String.class) {
  104. return json.getString(key);
  105. }
  106. if (LuDbo.class.isAssignableFrom(clazz)) {
  107. LuDbo dbo = (LuDbo) clazz.newInstance();
  108. dbo.fromJson(json.getJSONObject(key));
  109. return dbo;
  110. }
  111. return null;
  112. }
  113. public void fromJson(JSONObject json) throws Exception
  114. {
  115. for (Field field : getClass().getDeclaredFields()) {
  116. String key = getJsonFromField(field.getName());
  117. Class clazz = field.getType();
  118. Object value = null;
  119. if (json.has(key)) {
  120. if (List.class.isAssignableFrom(clazz)) {
  121. ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
  122. Class type = (Class) parameterizedType.getActualTypeArguments()[0];
  123. List<Object> list = (clazz == List.class ? new Vector<>() : (List<Object>) clazz.newInstance());
  124. JSONArray jsonArray = json.getJSONArray(key);
  125. for (int i = 0; i < jsonArray.length(); ++i) {
  126. list.add(getObjectFromJson(type, jsonArray, i));
  127. }
  128. value = list;
  129. }
  130. else if (clazz.isArray()) {
  131. Class type = clazz.getComponentType();
  132. JSONArray jsonArray = json.getJSONArray(key);
  133. Object array = Array.newInstance(type, jsonArray.length());
  134. for (int i = 0; i < jsonArray.length(); ++i) {
  135. Array.set(array, i, getObjectFromJson(type, jsonArray, i));
  136. }
  137. value = array;
  138. }
  139. // else if (AbstractMap.class.isAssignableFrom(clazz)) {
  140. // ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
  141. // Class type = (Class) parameterizedType.getActualTypeArguments()[0];
  142. // if (type == String.class) {
  143. // type = (Class) parameterizedType.getActualTypeArguments()[1];
  144. // }
  145. // }
  146. else {
  147. value = getObjectFromJson(clazz, json, key);
  148. }
  149. }
  150. field.setAccessible(true);
  151. field.set(this, value);
  152. field.setAccessible(false);
  153. }
  154. }
  155. public HashMap<String, Object> toArray()
  156. {
  157. HashMap<String, Object> map = new HashMap<>();
  158. return map;
  159. }
  160. public JSONObject toJson()
  161. {
  162. return new JSONObject(toArray());
  163. }
  164. @Override
  165. public String toString()
  166. {
  167. return toJson().toString();
  168. }
  169. }