package gov.nysenate.openleg.processor.transcript; import gov.nysenate.openleg.dao.base.LimitOffset; import gov.nysenate.openleg.dao.transcript.TranscriptFileDao; import gov.nysenate.openleg.model.transcript.TranscriptFile; import gov.nysenate.openleg.model.transcript.TranscriptId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.time.LocalDateTime; import java.util.List; @Service public class ManagedTranscriptProcessService implements TranscriptProcessService { private static Logger logger = LoggerFactory.getLogger(ManagedTranscriptProcessService.class); @Autowired private TranscriptFileDao transcriptFileDao; @Autowired private TranscriptParser transcriptParser; /** --- Implemented Methods --- */ /** {@inheritDoc} */ @Override public int collate() { return collateTranscriptFiles(); } /** {@inheritDoc} */ @Override public int ingest() { return processPendingTranscriptFiles(); } @Override public String getCollateType() { return "transcript file"; } /** {@inheritDoc} */ @Override public int collateTranscriptFiles() { logger.debug("Collating transcript files..."); int numCollated = 0; try { List<TranscriptFile> transcriptFiles; do { transcriptFiles = transcriptFileDao.getIncomingTranscriptFiles(LimitOffset.FIFTY); for (TranscriptFile file : transcriptFiles) { file.setPendingProcessing(true); transcriptFileDao.archiveAndUpdateTranscriptFile(file); numCollated++; } } while (!transcriptFiles.isEmpty()); } catch (IOException ex) { logger.error("Error retrieving transcript files during collation", ex); } logger.debug("Collated {} transcript files.", numCollated); return numCollated; } /** {@inheritDoc} */ @Override public List<TranscriptFile> getPendingTranscriptFiles(LimitOffset limitOffset) { return transcriptFileDao.getPendingTranscriptFiles(limitOffset); } /** {@inheritDoc} */ @Override public int processTranscriptFiles(List<TranscriptFile> transcriptFiles) { int processCount = 0; for (TranscriptFile file : transcriptFiles) { try { logger.info("Processing transcript file {}", file.getFileName()); transcriptParser.process(file); file.setProcessedCount(file.getProcessedCount() + 1); file.setPendingProcessing(false); file.setProcessedDateTime(LocalDateTime.now()); transcriptFileDao.updateTranscriptFile(file); processCount++; } catch (IOException ex) { logger.error("Error processing TranscriptFile " + file.getFileName() + ".", ex); } } return processCount; } /** {@inheritDoc} */ @Override public int processPendingTranscriptFiles() { List<TranscriptFile> transcriptFiles; int processCount = 0; do { transcriptFiles = getPendingTranscriptFiles(LimitOffset.FIFTY); processCount += processTranscriptFiles(transcriptFiles); } while (!transcriptFiles.isEmpty()); return processCount; } /** {@inheritDoc} */ @Override public void updatePendingProcessing(TranscriptId transcriptId, boolean pendingProcessing) { throw new UnsupportedOperationException("Not implemented"); } }