load method

  1. @override
Future<List<T>> load(
  1. String? correlation_id
)
override

Loads data items from external JSON file.

  • correlation_id (optional) transaction id to trace execution through call chain. Return Future that receives loaded items Throws error.

Implementation

@override
Future<List<T>> load(String? correlation_id) async {
  if (path == null || path == '') {
    throw ConfigException(null, 'NO path', 'Data file path is not set');
  }

  var file = File(path!);

  if (!file.existsSync()) {
    return <T>[];
  }

  try {
    var json = file.readAsStringSync();
    var list = JsonConverter.toNullableMap(json);
    var arr = ArrayConverter.listToArray(list);

    try {
      var objectsList = arr.map((item) {
        var obj = TypeReflector.createInstanceByType(T, []);
        obj.fromJson(item);
        return obj as T;
      }).toList();

      return objectsList;
    } on NoSuchMethodError {
      throw Exception('Data class must have fromJson method for conversions');
    }
  } catch (ex) {
    var err = FileException(correlation_id, 'READ_FAILED',
            'Failed to read data file: ' + path.toString())
        .withCause(ex);
    throw err;
  }
}