createAndroidDatabase static method

Future<void> createAndroidDatabase(
  1. String location,
  2. SchemaMetaData smd,
  3. SchemaMetaData smdSys,
  4. ConfigurationNameDefaults defaults,
)

Implementation

static Future<void> createAndroidDatabase(String location, SchemaMetaData smd,
    SchemaMetaData smdSys, ConfigurationNameDefaults defaults) async {
  if (location == null) location = ".";
  WardenType localWardenType = WardenType.USER;
  WardenType remoteWardenType = WardenType.WRITE_SERVER;
  DbTransaction mysqlTransaction =
      await DataBaseHelper.getDbTransaction(C_DATABASE_NAME);
  DbTransaction sqliteTransaction =
      await DataBaseHelper.getSqlite3DbTransaction("food", location);

  // ----------------------------------------------------- REPLICATE DATABASE
  ReplicateDataBase replicateDataBase = ReplicateDataBase(
      WardenType.USER,
      WardenType.WRITE_SERVER,
      smd,
      smdSys,
      mysqlTransaction,
      sqliteTransaction,
      true);
  int writtenCount =
      await replicateDataBase.reproduceDataBaseAboveTs(0, null);

  WaterLineDao waterLineDao = WaterLineDao.sep(smdSys, sqliteTransaction);
  await waterLineDao.init();
  Set<WaterError> errorStateEnumSet =
      WaterErrorAccess.getAllOfWaterErrorSet();
  errorStateEnumSet.remove(WaterError.NONE);
  try {
    await waterLineDao.deleteWaterLine(
        null, null, null, null, errorStateEnumSet);
  } on SqlException catch (e) {
    if (e.sqlExceptionEnum != SqlExceptionEnum.ENTRY_NOT_FOUND &&
        e.sqlExceptionEnum != SqlExceptionEnum.TABLE_NOT_FOUND) rethrow;
  }
  ClientWarden clientWarden = ClientWarden(WardenType.USER, waterLineDao);
  await clientWarden.cleanWaterLine();
  // ----------------------------------------------------- NOW DOWNLOAD WATER_LINE_FIELD TABLES
  UserTools userTools = UserTools();
  WaterLineField waterLineField = WaterLineField(
      localWardenType, remoteWardenType, smdSys, sqliteTransaction);
  await waterLineField.init();
  //List<Integer> productIdList = waterLineField.getNotUpToDateProductIdList();
  //Iterator<Integer> iter = productIdList.iterator();
  //Integer id=null;
  //RemoteWaterLineFieldDtoPartitionTools partitionTools = RemoteWaterLineFieldDtoPartitionTools();
  //while(iter.hasNext()) {
  //id = iter.next();
  //try {
  //waterLineField.inList(id, SchemaMetaData.TableType.PRODUCT);
  //if (waterLineField.isDataAvailableToUser(id, userCountryCodeEnumSet, sqliteTransaction)) {
  //List<RemoteDto> remoteDtoList = RestRequestSelectedRowsUtils.getRemoteFieldDtoListToSend(waterLineField);
  //List<RemoteDto> tablesArray = partitionTools.retrieveJoinedRows(remoteDtoList, remoteWardenType, localWardenType, Country.CountryCode.USA, foodCategoryMap, mysqlTransaction);
  //AbstractWarden abstractWarden = ClientWardenFactory.getAbstractWarden(localWardenType, remoteWardenType, sqliteTransaction, foodCategoryMap);
  //RestGetLatestRowsUtils latestRowsUtils= RestGetLatestRowsUtils(abstractWarden, sqliteTransaction, userTools);
  //latestRowsUtils.storeRemoteDtoList(tablesArray);
  //}
  //} catch (EntryNotFoundException | FailedSelectException | FailedUpdateException e) {
  //logger.error("UI", e);
  //}
  //}
  // ------------------------------------------------ NOW UPDATE WATER_LINE_FIELD TS
  ChangeSuperType changeSuperType = ChangeSuperType.CHANGES;
  bool finalEntryReceived = false;
  List<RemoteDto> remoteDtoList;
  AbstractRemoteFieldWarden abstractRemoteFieldWarden =
      AbstractRemoteFieldWarden(
          localWardenType, remoteWardenType, smd, smdSys, mysqlTransaction);
  await abstractRemoteFieldWarden.init();
  try {
    RestGetLatestWaterLineFieldsUtils getFields =
        RestGetLatestWaterLineFieldsUtils(
            WardenType.USER,
            WardenType.READ_SERVER,
            smd,
            smdSys,
            sqliteTransaction,
            userTools,
            defaults);
    do {
      remoteDtoList =
          await abstractRemoteFieldWarden.getRemoteFieldListAboveLocalTs(
              await waterLineField.getMaxTs(changeSuperType),
              changeSuperType,
              100);
      finalEntryReceived =
          await getFields.storeWaterLineFieldsList(remoteDtoList);
    } while (!finalEntryReceived);
  } on RemoteStatusException catch (e) {
    print(e);
  } on SqlException catch (e) {
    //EntryNotFoundException e) {
    print(e);
  }
  // ----------------------------------------------------- ADD DATABASE VERSION
  await CrudHelper.insertConfiguration(
      ConfigurationNameEnum.DATABASE_VERSION,
      AbstractEntries.C_MINIMUM_VERSION,
      null,
      5000000,
      sqliteTransaction,
      WardenType.USER,
      WardenType.READ_SERVER,
      smd,
      smdSys,
      defaults);
  await sqliteTransaction.endTransaction();
  await mysqlTransaction.endTransaction();
}