generateFiles method

void generateFiles()

Implementation

void generateFiles() {
  final tableDeclaration = jsonEncode(holder.declarations.asMap());
  final lines = <String>[];
  lines.add('import \'package:xdatabase/xdatabase.dart\';\n');
  lines.add('import \'models.dart\';\n\n');
  holder.declarations.tables.forEach((tableName, tableDeclaration) {
    final insName = tableDeclaration.className.toLowerCase();
    final className = tableDeclaration.className;
    lines.add('class ${className}Bean implements Bean<$className> {');
    lines.add('  $className? $insName;');
    lines.add('  ${className}Bean(this.$insName);');
    lines.add('  @override');
    lines.add('  Map<String, dynamic> asMap() {');
    lines.add('    if ($insName == null) {');
    lines.add('      throw UnsupportedError(\'Not Initialized\');');
    lines.add('    }');
    lines.add('    return {');
    tableDeclaration.fields.forEach((field) {
      lines.add(
          '      \'${field.fieldName}\': $insName!.${field.propertyName},');
    });
    lines.add('    };');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  $className fromMap(Map<String, dynamic> map) {');
    lines.add('    final $insName = $className();');
    tableDeclaration.fields.forEach((field) {
      lines.add(
          '    $insName.${field.propertyName} = map[\'${field.fieldName}\'];');
    });
    lines.add('    return $insName;');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<int> delete(String statement, QueryAble conn) {');
    lines.add(
        '    return Orm<$className>(conn).query(statement).delete(this);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<int> deleteByPk(QueryAble conn) {');
    lines.add('    return Orm<$className>(conn).deleteByPk(this);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<int> insert(QueryAble conn) {');
    lines.add('    return Orm<$className>(conn).insert(this);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add(
        '  Future<List<$className>> select(String statement, QueryAble conn) {');
    lines.add(
        '    return Orm<$className>(conn).query(statement).fetch(this, all: $insName != null);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<$className?> selectByPk(QueryAble conn) {');
    lines.add('    return Orm<$className>(conn).byPrimary(this);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<int> update(String statement, QueryAble conn) {');
    lines.add(
        '    return Orm<$className>(conn).query(statement).update(this);');
    lines.add('  }\n');
    lines.add('  @override');
    lines.add('  Future<int> updateByPK(QueryAble conn) {');
    lines.add('    return Orm<$className>(conn).updateByPk(this);');
    lines.add('  }');
    lines.add('  ');
    tableDeclaration.fields.forEach((field) {
      lines.add(
          '  static final Column ${field.propertyName} = Column(\'${field.fieldName}\');');
    });
    lines.add('  ');
    lines.add('  ');
    lines.add('}\n');
  });
  lines.add('');
  lines.add('');
  lines.add('const String declarationMap = \'\'\'$tableDeclaration\'\'\';');
  final seqs = workingDirectory.split(separator);
  final basePath = seqs.getRange(0, seqs.length - 1).join(separator);
  print('basePath:$basePath');
  final filePath = '${basePath}/lib/modelBeans.dart';
  print('filePath:$filePath');
  File(filePath).writeAsStringSync(lines.join('\n'));
}