144 lines
5.3 KiB
Plaintext
144 lines
5.3 KiB
Plaintext
import 'dart:ffi';
|
|
import 'dart:collection';
|
|
import '/gen/Tables.dart';
|
|
|
|
{{~
|
|
parent_def_type = __this.parent_def_type
|
|
export_fields = __this.export_fields
|
|
hierarchy_export_fields = __this.hierarchy_export_fields
|
|
~}}
|
|
{{for field in hierarchy_export_fields}}{{import_ref_type_dart field '/gen/'}}{{end}}
|
|
{{if parent_def_type}}{{declaring_import_bean parent_def_type '/gen/'}}{{end}}
|
|
{{~if __bean.is_abstract_type~}}
|
|
{{~for child in __this.hierarchy_not_abstract_children~}}
|
|
{{declaring_import_bean child '/gen/'}}
|
|
{{~end~}}
|
|
{{~end~}}
|
|
{{~
|
|
func get_ref_name
|
|
ret (format_property_name __code_style $0.name) + '_Ref'
|
|
end
|
|
|
|
func generate_resolve_field_ref
|
|
field = $0
|
|
fieldName = format_name_lower_camel field.name
|
|
refTable = get_ref_table field
|
|
if can_generate_ref field
|
|
tableName = format_name_lower_camel refTable.name
|
|
if field.is_nullable
|
|
ret (get_ref_name field) + ' = ' + fieldName + '!= null ? tables.' + tableName + '?.getOrDefault(' + (get_value_of_nullable_type field.ctype fieldName) + ') : null;'
|
|
else
|
|
ret (get_ref_name field) + ' = tables.' + tableName + '?.getOrDefault(' + fieldName + ');'
|
|
end
|
|
else if can_generate_collection_ref field
|
|
collection_ref_table = get_collection_ref_table field
|
|
tableName = format_name_lower_camel collection_ref_table.name
|
|
if field.ctype.type_name == 'list' || field.ctype.type_name == 'array'
|
|
line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '.empty(growable: true);' + '\n'
|
|
line2 = 'for (var _v in ' + fieldName + ') { var ref=(tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
|
|
ret line1 + line2
|
|
else if field.ctype.type_name == 'set'
|
|
line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
|
|
line2 = 'for (var _v in ' + fieldName + ') { var ref= (tables.'+tableName + '?.getOrDefault(_v))!;'+ (get_ref_name field) + '?.add(ref); }' + '\n'
|
|
ret line1 + line2
|
|
else if field.ctype.type_name == 'map'
|
|
line1 = (get_ref_name field) + ' = ' + (declaring_collection_ref_name field.ctype) + '();' + '\n'
|
|
line2 = 'for (var kvp in ' + fieldName + '.entries) { var ref= (tables.' + tableName + '?.getOrDefault(kvp.value))!;' + (get_ref_name field) + '?[kvp.key]= ref; }' + '\n'
|
|
ret line1 + line2
|
|
else
|
|
ret ''
|
|
end
|
|
else
|
|
if (is_field_bean_need_resolve_ref field)
|
|
ret fieldName + '?.resolveRef(tables);'
|
|
else if (is_field_array_like_need_resolve_ref field)
|
|
ret 'for (var _e in ' + fieldName + ') { _e?.resolveRef(tables); }'
|
|
else if (is_field_map_need_resolve_ref field)
|
|
ret 'for (var _e in ' + fieldName + '.values) { _e?.resolveRef(tables); }'
|
|
else
|
|
ret ''
|
|
end
|
|
end
|
|
end
|
|
|
|
~}}
|
|
{{~if __bean.comment != '' ~}}
|
|
//{{escape_comment __bean.comment}}
|
|
{{~end~}}
|
|
{{class_modifier __this}} class {{__name}} {{if parent_def_type}}extends {{ __this.parent_def_type.name}}{{end}}
|
|
{
|
|
{{__name}}(
|
|
{{~if need_gen_constructor hierarchy_export_fields~}}
|
|
{
|
|
{{~ for field in hierarchy_export_fields ~}}
|
|
{{~if is_super_field field parent_def_type~}}
|
|
required super.{{format_name_lower_camel field.name}},
|
|
{{~else~}}
|
|
required this.{{format_name_lower_camel field.name}},
|
|
{{~end~}}
|
|
{{~end~}}
|
|
}
|
|
{{~end~}}
|
|
);
|
|
|
|
factory {{__name}}.deserialize(dynamic _buf){
|
|
{{~if __bean.is_abstract_type~}}
|
|
switch (_buf['\$type'])
|
|
{
|
|
{{~for child in __this.hierarchy_not_abstract_children~}}
|
|
case "{{impl_data_type child __this}}": return {{child.name}}.deserialize(_buf);
|
|
{{~end~}}
|
|
default: throw Exception('unknown type:$_buf[\$type]');
|
|
}
|
|
{{~else~}}
|
|
{{~ for field in hierarchy_export_fields
|
|
fieldName = format_name_lower_camel field.name
|
|
~}}
|
|
final {{fieldName}};
|
|
{{deserialize_field fieldName '_buf' field.name field.ctype}}
|
|
{{~end~}}
|
|
return {{__name}}(
|
|
{{~ for field in hierarchy_export_fields
|
|
fieldName = format_name_lower_camel field.name
|
|
~}}
|
|
{{fieldName}}:{{fieldName}},
|
|
{{~end~}}
|
|
);
|
|
{{~end~}}
|
|
}
|
|
|
|
{{~ for field in export_fields ~}}
|
|
{{~if field.comment != '' ~}}
|
|
//{{escape_comment field.comment}}
|
|
{{~end~}}
|
|
final {{declaring_type_name field.ctype}} {{format_name_lower_camel field.name}};
|
|
{{~if can_generate_ref field~}}
|
|
{{declaring_type_name (get_ref_type field)}}? {{get_ref_name field}};
|
|
{{~else if can_generate_collection_ref field~}}
|
|
{{declaring_collection_ref_name field.ctype}}? {{get_ref_name field}};
|
|
{{~end~}}
|
|
{{~end~}}
|
|
{{~if !__bean.is_abstract_type && !__bean.is_value_type~}}
|
|
static final int __ID__ = {{__this.id}};
|
|
{{~end~}}
|
|
{{method_modifier __bean}}
|
|
void resolveRef({{__manager_name}} tables)
|
|
{
|
|
{{~if parent_def_type~}}
|
|
super.resolveRef(tables);
|
|
{{~end~}}
|
|
|
|
{{~for field in export_fields~}}
|
|
{{~ line = generate_resolve_field_ref field ~}}
|
|
{{~ if line != ''~}}
|
|
{{line}}
|
|
{{~end~}}
|
|
{{~end~}}
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return '{{__name}}({{for field in hierarchy_export_fields}}{{format_name_lower_camel field.name}}:${{format_name_lower_camel field.name}}, {{end}})';
|
|
}
|
|
}
|