createAndroidDatabase static method
Future<void>
createAndroidDatabase(
- String location,
- SchemaMetaData smd,
- SchemaMetaData smdSys,
- 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();
}