2026-03-01 12:51:14 +00:00
|
|
|
import '../formula_models.dart';
|
2026-03-09 17:34:32 +00:00
|
|
|
import '../set_utils.dart';
|
2026-02-13 07:53:04 +00:00
|
|
|
import 'corpus_database_interface.dart';
|
2026-02-14 13:06:23 +00:00
|
|
|
import 'formulas_database.dart';
|
2026-02-13 07:53:04 +00:00
|
|
|
import 'package:d4rt_formulas/formula_models.dart' as models;
|
|
|
|
|
|
|
|
|
|
// Extension to add corpus loading/saving functionality to FormulasDatabase
|
|
|
|
|
extension CorpusDatabaseExtension on FormulasDatabase {
|
|
|
|
|
// Method to load corpus elements from database
|
|
|
|
|
Future<List<models.FormulaElement>> loadCorpusElements() async {
|
|
|
|
|
final elements = await getAllFormulaElements();
|
|
|
|
|
final List<models.FormulaElement> parsedElements = [];
|
|
|
|
|
|
|
|
|
|
for (final element in elements) {
|
|
|
|
|
try {
|
2026-03-01 12:51:14 +00:00
|
|
|
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
|
2026-02-17 16:35:51 +00:00
|
|
|
print("PARSED:$element");
|
2026-02-13 07:53:04 +00:00
|
|
|
parsedElements.addAll(parsed);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print('Error parsing database element: $e');
|
2026-02-17 16:35:51 +00:00
|
|
|
print("NOT PARSED: $element");
|
2026-02-13 07:53:04 +00:00
|
|
|
// Skip invalid elements but continue processing others
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-02-07 16:01:37 +00:00
|
|
|
|
2026-02-13 07:53:04 +00:00
|
|
|
return parsedElements;
|
|
|
|
|
}
|
2026-02-07 16:01:37 +00:00
|
|
|
|
2026-02-13 07:53:04 +00:00
|
|
|
// Method to save corpus elements to database
|
|
|
|
|
Future<void> saveCorpusElements(List<models.FormulaElement> elements) async {
|
|
|
|
|
// Clear existing elements first
|
|
|
|
|
await delete(formulaElements).go();
|
2026-02-07 16:01:37 +00:00
|
|
|
|
2026-02-13 07:53:04 +00:00
|
|
|
// Insert new elements
|
|
|
|
|
for (final element in elements) {
|
|
|
|
|
await insertFormulaElement(element.toStringLiteral());
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-02-26 20:49:32 +00:00
|
|
|
|
2026-03-08 19:17:49 +00:00
|
|
|
// Method to update a formula in the database by UUID
|
2026-02-26 20:49:32 +00:00
|
|
|
Future<bool> updateFormula(models.Formula formula) async {
|
|
|
|
|
final elements = await getAllFormulaElements();
|
2026-03-08 19:17:49 +00:00
|
|
|
|
2026-02-26 20:49:32 +00:00
|
|
|
for (final element in elements) {
|
|
|
|
|
try {
|
2026-03-06 08:10:15 +00:00
|
|
|
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
|
2026-02-26 20:49:32 +00:00
|
|
|
if (parsed.isNotEmpty && parsed.first is models.Formula) {
|
|
|
|
|
final existingFormula = parsed.first as models.Formula;
|
2026-03-09 09:40:02 +00:00
|
|
|
if (existingFormula.uuid == formula.uuid) {
|
2026-02-26 20:49:32 +00:00
|
|
|
// Update this element
|
|
|
|
|
await updateFormulaElement(
|
2026-03-08 19:17:49 +00:00
|
|
|
element.id,
|
2026-02-26 20:49:32 +00:00
|
|
|
formula.toStringLiteral()
|
|
|
|
|
);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print('Error parsing database element during update: $e');
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-08 19:17:49 +00:00
|
|
|
|
2026-02-26 20:49:32 +00:00
|
|
|
return false; // Formula not found
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method to add a new formula to the database
|
|
|
|
|
Future<void> addFormula(models.Formula formula) async {
|
|
|
|
|
await insertFormulaElement(formula.toStringLiteral());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method to delete a formula from the database by name
|
2026-03-09 09:40:02 +00:00
|
|
|
Future<bool> deleteFormula(String uuid) async {
|
2026-02-26 20:49:32 +00:00
|
|
|
final elements = await getAllFormulaElements();
|
|
|
|
|
|
|
|
|
|
for (final element in elements) {
|
|
|
|
|
try {
|
2026-03-06 08:10:15 +00:00
|
|
|
final parsed = SetUtils.parseCorpusElements('[${element.elementText}]');
|
2026-02-26 20:49:32 +00:00
|
|
|
if (parsed.isNotEmpty && parsed.first is models.Formula) {
|
|
|
|
|
final existingFormula = parsed.first as models.Formula;
|
2026-03-09 09:40:02 +00:00
|
|
|
if (existingFormula.uuid == uuid) {
|
2026-02-26 20:49:32 +00:00
|
|
|
await deleteFormulaElement(element.id);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print('Error parsing database element during delete: $e');
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false; // Formula not found
|
|
|
|
|
}
|
2026-02-17 16:35:51 +00:00
|
|
|
}
|