processWaterLineList method

Future<List<RemoteDto>> processWaterLineList(
  1. List<WaterLineDto>? waterLineList,
  2. WaterLineDao waterLineDao,
  3. bool noMoreEntries,
  4. WardenType? localWardenType,
  5. UserDto remoteUserDto,
  6. DbTransaction transaction,
)

Processes a list of WaterLineDto entries Uses the water_line table timestamp and table_type to find the entry in the corresponding table and returns a JSONArray of those various table entries

@param waterLineList - a list of water_line table entries @param noMoreEntries @param remoteWardenType - Type of Warden on the remote device @return

Implementation

Future<List<RemoteDto>> processWaterLineList(
    List<WaterLineDto>? waterLineList,
    WaterLineDao waterLineDao,
    bool noMoreEntries,
    WardenType? localWardenType,
    UserDto remoteUserDto,
    DbTransaction transaction) async {
  List<RemoteDto> remoteDtoList = [];
  RemoteDto? remoteDto;
  if (noMoreEntries) {
    remoteDtoList
        .add(RemoteStatusDto.sep(smdSys, status: RemoteStatus.LAST_ENTRY_REACHED));
    print("No entries found=$remoteDtoList");
  } else {
    WaterError? waterError;

    for (WaterLineDto waterLineDto in waterLineList!) {
      TableTransactionTrDao trDao = TableTransactionTrDao(smdSys, transaction);
      await trDao.init(table_id:waterLineDto.water_table_id, initTable: true);
      waterError = null;

      print("WaterLineDto=$waterLineDto");

      try {
        remoteDto = await processWaterLine(
            waterLineDto, trDao, transaction, localWardenType, remoteUserDto);
        if (remoteDto != null) {
          remoteDtoList.add(remoteDto);
        }
      } on SqlException catch (e) {
        if (e.sqlExceptionEnum == SqlExceptionEnum.FAILED_SELECT)
          waterError = WaterError.INVALID_ENTRY;
        else if (e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND)
          waterError = WaterError.ENTRY_NOT_FOUND;
        else if (e.sqlExceptionEnum == SqlExceptionEnum.TABLE_NOT_FOUND)
          waterError = WaterError.INVALID_TABLE;
        else if (e.sqlExceptionEnum == SqlExceptionEnum.PARTITION_NOT_FOUND)
          waterError = WaterError.PARTITION_NOT_FOUND;
      }
      if (waterError != null) {
        try {
          await waterLineDao.setStates(waterLineDto.water_ts!, null, waterError);
        } on SqlException catch (e) {
          if (e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND ||
              e.sqlExceptionEnum == SqlExceptionEnum.FAILED_SELECT ||
              e.sqlExceptionEnum == SqlExceptionEnum.FAILED_UPDATE)
            print("WS $e");
        }
      }
    }
  } // No More Entries
  return remoteDtoList;
}