bean.sbn 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import 'dart:ffi';
  2. import 'dart:collection';
  3. import '/gen/Tables.dart';
  4. {{~
  5. parent_def_type = __this.parent_def_type
  6. export_fields = __this.export_fields
  7. hierarchy_export_fields = __this.hierarchy_export_fields
  8. ~}}
  9. {{for field in hierarchy_export_fields}}{{import_ref_type_dart field '/gen/'}}{{end}}
  10. {{if parent_def_type}}{{declaring_import_bean parent_def_type '/gen/'}}{{end}}
  11. {{~if __bean.is_abstract_type~}}
  12. {{~for child in __this.hierarchy_not_abstract_children~}}
  13. {{declaring_import_bean child '/gen/'}}
  14. {{~end~}}
  15. {{~end~}}
  16. {{~
  17. func get_ref_name
  18. ret (format_property_name __code_style $0.name) + '_Ref'
  19. end
  20. func generate_resolve_field_ref
  21. field = $0
  22. fieldName = format_name_lower_camel field.name
  23. refTable = get_ref_table field
  24. if can_generate_ref field
  25. tableName = format_name_lower_camel refTable.name
  26. if field.is_nullable
  27. ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '?.getOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
  28. else
  29. ret (get_ref_name field) + ' = tables.' + tableName + '?.getOrDefault(' + fieldName + ');'
  30. end
  31. else if can_generate_collection_ref field
  32. collection_ref_table = get_collection_ref_table field
  33. tableName = format_name_lower_camel collection_ref_table.name
  34. if field.ctype.type_name == 'list' || field.ctype.type_name == 'array'
  35. line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '.empty(growable: true);' + '\n'
  36. line2 = 'for (var _v in ' + fieldName + ') { var ref=(tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
  37. ret line1 + line2
  38. else if field.ctype.type_name == 'set'
  39. line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
  40. line2 = 'for (var _v in ' + fieldName + ') { var ref= (tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
  41. ret line1 + line2
  42. else if field.ctype.type_name == 'map'
  43. line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
  44. line2 = 'for (var kvp in ' + fieldName + '.entries) { var ref= (tables.' + tableName + '?.getOrDefault(kvp.value))!;' + (get_ref_name field) + '?[kvp.key]= ref; }' + '\n'
  45. ret line1 + line2
  46. else
  47. ret ''
  48. end
  49. else
  50. if (is_field_bean_need_resolve_ref field)
  51. ret fieldName + '?.resolveRef(tables);'
  52. else if (is_field_array_like_need_resolve_ref field)
  53. ret 'for (var _e in ' + fieldName + ') { _e?.resolveRef(tables); }'
  54. else if (is_field_map_need_resolve_ref field)
  55. ret 'for (var _e in ' + fieldName + '.values) { _e?.resolveRef(tables); }'
  56. else
  57. ret ''
  58. end
  59. end
  60. end
  61. ~}}
  62. {{~if __bean.comment != '' ~}}
  63. //{{escape_comment __bean.comment}}
  64. {{~end~}}
  65. {{class_modifier __this}} class {{__name}} {{if parent_def_type}}extends {{ __this.parent_def_type.name}}{{end}}
  66. {
  67. {{__name}}(
  68. {{~if need_gen_constructor hierarchy_export_fields~}}
  69. {
  70. {{~ for field in hierarchy_export_fields ~}}
  71. {{~if is_super_field field parent_def_type~}}
  72. required super.{{format_name_lower_camel field.name}},
  73. {{~else~}}
  74. required this.{{format_name_lower_camel field.name}},
  75. {{~end~}}
  76. {{~end~}}
  77. }
  78. {{~end~}}
  79. );
  80. factory {{__name}}.deserialize(dynamic _buf){
  81. {{~if __bean.is_abstract_type~}}
  82. switch (_buf['\$type'])
  83. {
  84. {{~for child in __this.hierarchy_not_abstract_children~}}
  85. case "{{impl_data_type child __this}}": return {{child.name}}.deserialize(_buf);
  86. {{~end~}}
  87. default: throw Exception('unknown type:$_buf[\$type]');
  88. }
  89. {{~else~}}
  90. {{~ for field in hierarchy_export_fields
  91. fieldName = format_name_lower_camel field.name
  92. ~}}
  93. final {{fieldName}};
  94. {{deserialize_field fieldName '_buf' field.name field.ctype}}
  95. {{~end~}}
  96. return {{__name}}(
  97. {{~ for field in hierarchy_export_fields
  98. fieldName = format_name_lower_camel field.name
  99. ~}}
  100. {{fieldName}}:{{fieldName}},
  101. {{~end~}}
  102. );
  103. {{~end~}}
  104. }
  105. {{~ for field in export_fields ~}}
  106. {{~if field.comment != '' ~}}
  107. //{{escape_comment field.comment}}
  108. {{~end~}}
  109. final {{declaring_type_name field.ctype}} {{format_name_lower_camel field.name}};
  110. {{~if can_generate_ref field~}}
  111. {{declaring_type_name (get_ref_type field)}}? {{get_ref_name field}};
  112. {{~else if can_generate_collection_ref field~}}
  113. {{declaring_collection_ref_name field.ctype}}? {{get_ref_name field}};
  114. {{~end~}}
  115. {{~end~}}
  116. {{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
  117. static final int __ID__ = {{__this.id}};
  118. {{~end~}}
  119. {{method_modifier __bean}}
  120. void resolveRef({{__manager_name}} tables)
  121. {
  122. {{~if parent_def_type~}}
  123. super.resolveRef(tables);
  124. {{~end~}}
  125. {{~for field in export_fields~}}
  126. {{~ line = generate_resolve_field_ref field ~}}
  127. {{~ if line != ''~}}
  128. {{line}}
  129. {{~end~}}
  130. {{~end~}}
  131. }
  132. @override
  133. String toString() {
  134. return '{{__name}}({{for field in hierarchy_export_fields}}{{format_name_lower_camel field.name}}:${{format_name_lower_camel field.name}}, {{end}})';
  135. }
  136. }