Fix V2.8: selectedRows-Leerproblem und isRunning()-Inkonsistenz behoben

- markSelectedRowsAsResetPending() schützt selectedRows jetzt mit
  selectionSyncInProgress=true, sodass der TableView-SelectionModel-
  Listener die Selektion nicht löscht, wenn Zeilen ersetzt werden
- isRunning() und updateButtonStates() verwenden runningProperty.get()
  statt coordinator.isRunning() für konsistentes Verhalten zwischen
  Button-Zustand und Selektion
- Diagnose-LOG am Anfang von handleReprocessSelected() gibt isRunning()
  und selectedRows.size() aus (Laufend=false, Selektion>0 erwartet)
- Alle [TEMP-TRACE]-Logs entfernt aus GuiBatchRunCoordinator,
  SqliteUnitOfWorkAdapter, SqliteDocumentRecordRepositoryAdapter
  und DocumentProcessingCoordinator

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-04-23 15:35:57 +02:00
parent 55088354ab
commit 09605ee495
5 changed files with 16 additions and 25 deletions
@@ -108,13 +108,8 @@ public class SqliteDocumentRecordRepositoryAdapter implements DocumentRecordRepo
SKIPPED_ALREADY_PROCESSED, SKIPPED_FINAL_FAILURE ->
new DocumentKnownProcessable(record);
};
logger.info("[TEMP-TRACE] findByFingerprint: fingerprint={}, jdbcUrl={}, Ergebnis={}",
fingerprint.sha256Hex(), jdbcUrl, result.getClass().getSimpleName());
return result;
} else {
// Document not found
logger.info("[TEMP-TRACE] findByFingerprint: fingerprint={}, jdbcUrl={}, Ergebnis=DocumentUnknown",
fingerprint.sha256Hex(), jdbcUrl);
return new DocumentUnknown();
}
}
@@ -321,9 +316,7 @@ public class SqliteDocumentRecordRepositoryAdapter implements DocumentRecordRepo
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, fingerprint.sha256Hex());
int rowsAffected = statement.executeUpdate();
logger.info("[TEMP-TRACE] deleteByFingerprint: fingerprint={}, jdbcUrl={}, rowsAffected={}",
fingerprint.sha256Hex(), jdbcUrl, rowsAffected);
statement.executeUpdate();
} catch (SQLException e) {
String message = "Failed to delete document record for fingerprint '"
@@ -178,8 +178,6 @@ public class SqliteUnitOfWorkAdapter implements UnitOfWorkPort {
*/
@Override
public void resetDocumentByFingerprint(DocumentFingerprint fingerprint) {
logger.info("[TEMP-TRACE] resetDocumentByFingerprint: Fingerprint={}, jdbcUrl={}",
fingerprint.sha256Hex(), jdbcUrl);
// Delete attempts first (FK constraint: processing_attempt → document_record)
SqliteProcessingAttemptRepositoryAdapter attemptRepo =
new SqliteProcessingAttemptRepositoryAdapter(jdbcUrl) {
@@ -199,8 +197,6 @@ public class SqliteUnitOfWorkAdapter implements UnitOfWorkPort {
}
};
recordRepo.deleteByFingerprint(fingerprint);
logger.info("[TEMP-TRACE] resetDocumentByFingerprint: Löschung abgeschlossen für Fingerprint={}",
fingerprint.sha256Hex());
}
}
}