初始化工程
This commit is contained in:
143
Config/Tools/Luban/Templates/dart-json/bean.sbn
Normal file
143
Config/Tools/Luban/Templates/dart-json/bean.sbn
Normal file
@@ -0,0 +1,143 @@
|
||||
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}})';
|
||||
}
|
||||
}
|
||||
145
Config/Tools/Luban/Templates/dart-json/table.sbn
Normal file
145
Config/Tools/Luban/Templates/dart-json/table.sbn
Normal file
@@ -0,0 +1,145 @@
|
||||
import 'dart:collection';
|
||||
{{declaring_import_name __value_type '/gen/'}}
|
||||
{{~if __table.is_singleton_table ~}}
|
||||
{{for field in __value_type.def_bean.hierarchy_export_fields}}{{import_ref_type_dart field '/gen/'}}{{end}}
|
||||
{{~end~}}
|
||||
import '/gen/Tables.dart';
|
||||
{{
|
||||
func index_type_name
|
||||
ret (declaring_type_name $0.type)
|
||||
end
|
||||
|
||||
func table_union_map_type_name
|
||||
ret 'Map<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
|
||||
end
|
||||
|
||||
func table_key_list
|
||||
varName = $0
|
||||
indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
|
||||
ret array.join indexList ', '
|
||||
end
|
||||
|
||||
func table_param_def_list
|
||||
paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
|
||||
ret array.join paramList ', '
|
||||
end
|
||||
|
||||
func table_param_name_list
|
||||
paramList = __table.index_list |array.each do; ret $0.index_field.name; end
|
||||
ret array.join paramList ', '
|
||||
end
|
||||
}}
|
||||
|
||||
{{~if __this.comment != '' ~}}
|
||||
//{{escape_comment __this.comment}}
|
||||
{{~end~}}
|
||||
final class {{__name}} {
|
||||
|
||||
{{~if __table.is_map_table ~}}
|
||||
final List<{{declaring_type_name __value_type}}> _dataList = [];
|
||||
final Map<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap = {};
|
||||
|
||||
{{__name}}(List<dynamic> _array) {
|
||||
|
||||
for (var _buf in _array) {
|
||||
|
||||
{{declaring_type_name __value_type}} _item = {{declaring_type_name __value_type}}.deserialize(_buf);
|
||||
|
||||
_dataList.add(_item);
|
||||
_dataMap[_item.{{format_field_name __code_style __this.index_field.name}}] = _item;
|
||||
}
|
||||
}
|
||||
|
||||
{{declaring_type_name __value_type}}? getOrDefault({{declaring_type_name __key_type}} id) {
|
||||
if (_dataMap.containsKey(id)) {
|
||||
return _dataMap[id];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
void resolveRef({{__manager_name}} tables)
|
||||
{
|
||||
for(var _v in _dataList)
|
||||
{
|
||||
_v.resolveRef(tables);
|
||||
}
|
||||
}
|
||||
|
||||
{{~else if __table.is_list_table ~}}
|
||||
final List<{{declaring_type_name __value_type}}> _dataList = [];
|
||||
|
||||
{{~if __table.is_union_index~}}
|
||||
final {{table_union_map_type_name}} _dataMapUnion = {};
|
||||
{{~else if !__table.index_list.empty?~}}
|
||||
{{~for idx in __table.index_list~}}
|
||||
final Map<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}}={};
|
||||
{{~end~}}
|
||||
{{~end~}}
|
||||
|
||||
{{__name}}(List<dynamic> _array) {
|
||||
for (var _buf in _array) {
|
||||
{{declaring_type_name __value_type}} _item = {{declaring_type_name __value_type}}.deserialize(_buf);
|
||||
_dataList.add(_item);
|
||||
}
|
||||
|
||||
{{~if __table.is_union_index~}}
|
||||
for(var _v in _dataList)
|
||||
{
|
||||
_dataMapUnion[({{table_key_list "_v"}})]= _v;
|
||||
}
|
||||
{{~else if !__table.index_list.empty?~}}
|
||||
for(var _v in _dataList)
|
||||
{
|
||||
{{~for idx in __table.index_list~}}
|
||||
_dataMap_{{idx.index_field.name}}[_v.{{format_property_name __code_style idx.index_field.name}}]= _v;
|
||||
{{~end~}}
|
||||
}
|
||||
{{~end~}}
|
||||
}
|
||||
|
||||
List<{{declaring_type_name __value_type}}> get dataList => _dataList;
|
||||
|
||||
{{~if __table.is_union_index~}}
|
||||
{{declaring_type_name __value_type}}? get({{table_param_def_list}}) => _dataMapUnion[({{table_param_name_list}})];
|
||||
{{~else if !__table.index_list.empty? ~}}
|
||||
{{~for idx in __table.index_list~}}
|
||||
{{declaring_type_name __value_type}}? getBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}[key];
|
||||
{{~end~}}
|
||||
{{~end~}}
|
||||
|
||||
void resolveRef({{__manager_name}} tables)
|
||||
{
|
||||
|
||||
}
|
||||
{{~else~}}
|
||||
|
||||
{{declaring_type_name __value_type}}? _data;
|
||||
|
||||
{{declaring_type_name __value_type}}? get data => _data;
|
||||
|
||||
{{__name}}(List<dynamic> _array) {
|
||||
|
||||
var n = _array.length;
|
||||
if (n != 1)
|
||||
{
|
||||
throw Exception("table mode=one, but size != 1");
|
||||
}
|
||||
for (var _buf in _array) {
|
||||
_data = {{declaring_type_name __value_type}}.deserialize(_buf);
|
||||
}
|
||||
}
|
||||
|
||||
{{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
|
||||
{{~if field.comment != '' ~}}
|
||||
/// <summary>
|
||||
/// {{escape_comment field.comment}}
|
||||
/// </summary>
|
||||
{{~end~}}
|
||||
{{declaring_null_type_name field.ctype}} get {{format_property_name __code_style field.name}} => _data?.{{format_name_lower_camel field.name}};
|
||||
{{~end~}}
|
||||
void resolveRef({{__manager_name}} tables)
|
||||
{
|
||||
|
||||
}
|
||||
{{~end~}}
|
||||
}
|
||||
43
Config/Tools/Luban/Templates/dart-json/tables.sbn
Normal file
43
Config/Tools/Luban/Templates/dart-json/tables.sbn
Normal file
@@ -0,0 +1,43 @@
|
||||
{{~
|
||||
func get_table_inner_name
|
||||
ret '_' + ($0 | string.downcase)
|
||||
end
|
||||
~}}
|
||||
{{~for table in __tables ~}}
|
||||
{{declaring_import_table table '/gen/'}}
|
||||
{{~end~}}
|
||||
final class {{__name}}
|
||||
{
|
||||
final Future<dynamic> Function(String filePath) _asyncloadFunction;
|
||||
Tables(this._asyncloadFunction);
|
||||
|
||||
{{~for table in __tables ~}}
|
||||
{{~if table.comment != '' ~}}
|
||||
//{{escape_comment table.comment}}
|
||||
{{~end~}}
|
||||
{{table.name}}? _{{format_property_name __code_style table.name}};
|
||||
{{~end~}}
|
||||
|
||||
Future<void> waitLoad() async {
|
||||
var results = await Future.wait([
|
||||
{{~for table in __tables ~}}
|
||||
_asyncloadFunction("{{table.output_data_file}}"),
|
||||
{{~end~}}
|
||||
]);
|
||||
{{ idx=0 }}
|
||||
{{~for table in __tables ~}}
|
||||
_{{format_property_name __code_style table.name}} = {{table.name}}(results[{{idx}}]);{{idx=idx+1}}
|
||||
{{~end~}}
|
||||
resolveRef();
|
||||
}
|
||||
{{~for table in __tables ~}}
|
||||
{{table.name}}? get {{format_name_lower_camel table.name}} => _{{format_property_name __code_style table.name}};
|
||||
{{~end~}}
|
||||
|
||||
void resolveRef(){
|
||||
{{~for table in __tables ~}}
|
||||
_{{format_property_name __code_style table.name}}?.resolveRef(this);
|
||||
{{~end~}}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user