Guest User

Untitled

a guest
Sep 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. data class H(
  2. val k: K?,
  3. ...,
  4. val z: Z?
  5. )
  6.  
  7. ... ... ... ...
  8.  
  9. data class K(
  10. var h: String?,
  11. var k: Boolean?,
  12. ...,
  13. var z: Int?
  14. )
  15.  
  16. ... ... ... ...
  17.  
  18. data class A(
  19. val h: H?,
  20. ...,
  21. val z: Z?
  22. )
  23.  
  24. val breadCrumb : MutableList<String> = mutableListOf("h", "k", ..., "z")
  25.  
  26. val a = A(...)
  27. a.h.k.....z = "new value"
  28.  
  29. var curItem: Any = A(...)
  30. for (itemName in breadCrumb){
  31. ...
  32. for(dataField in curItem::class.java.fields) {
  33. if(dataField.get(curItem).name == itemName){
  34. when(dataField.type.simpleName){
  35. "String" -> dataField .set(curItem, value.text)
  36. "Integer" -> dataField .setInt(curItem, value.text as Int)
  37. "Float" -> dataField .setFloat(curItem, value.text as Float)
  38. "Boolean" -> dataField .setBoolean(curItem, value.text as Boolean)
  39. }
  40. ..........
  41. curItem = dataField.java.get(curItem)
  42. }
  43. }
  44. }
  45.  
  46. fun setValue(field: JSONUIField, value: JSONUIValue) {
  47. var curItem: Any = A.getAsJsonObject("a")
  48.  
  49. for (itemName in breadCrumb) {
  50. if ((curItem as JsonObject).getAsJsonObject(itemName) == null)
  51. curItem.add(itemName, JsonObject())
  52. curItem = curItem.getAsJsonObject(itemName)
  53. }
  54. when (field.type) {
  55. "String" -> (curItem as JsonObject).addProperty(field.name, value.value)
  56. "Integer" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toInt())
  57. "Float" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toFloat())
  58. "Boolean" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toBoolean())
  59. }
  60. }
  61.  
  62. val curItem = A("", false, 0)
  63.  
  64. val itemNames = listOf("a", "b", "c")
  65. val itemStrValue = "test"
  66. val itemIntValue = "10"
  67. val itemFloatValue = "5.0"
  68. val itemBooleanValue = "true"
  69.  
  70. for(dataField in curItem::class.declaredMemberProperties) {
  71. for (itemName in itemNames) {
  72. if (dataField.name == itemName) {
  73. val mutableProp = dataField as? KMutableProperty1<Any, Any>
  74. if (mutableProp != null) {
  75. when (dataField.returnType.classifier as KClass<Any>) {
  76. String::class -> mutableProp.set(curItem, itemStrValue)
  77. Int::class -> mutableProp.set(curItem, itemIntValue.toInt())
  78. Float::class -> mutableProp.set(curItem, itemFloatValue.toFloat())
  79. Boolean::class -> mutableProp.set(curItem, itemBooleanValue.toBoolean())
  80. }
  81. }
  82. }
  83. }
  84. }
  85.  
  86. println(curItem) // A(a=test, b=true, c=10)
  87.  
  88. data class A(
  89. var a: String?,
  90. var b: Boolean?,
  91. var c: Int?
  92. )
Add Comment
Please, Sign In to add comment