use of edu.cornell.kfs.rass.batch.RassXmlFileParseResult in project cu-kfs by CU-CommunityApps.
the class RassReportServiceImpl method writeBatchJobReports.
@Override
public void writeBatchJobReports(RassBatchJobReport rassBatchJobReport) {
LOG.info("writeBatchJobReports: start writing RASS batch job reports for each file");
List<RassXmlFileParseResult> fileParseResults = rassBatchJobReport.getFileParseResults();
Map<String, RassXmlFileProcessingResult> fileProcessingResults = rassBatchJobReport.getFileProcessingResults();
List<RassXmlFileParseResult> errorResults = new ArrayList<>();
for (RassXmlFileParseResult fileParseResult : fileParseResults) {
if (RassConstants.RassParseResultCode.ERROR.equals(fileParseResult.getResultCode())) {
errorResults.add(fileParseResult);
continue;
}
RassXmlFileProcessingResult fileResult = fileProcessingResults.get(fileParseResult.getRassXmlFileName());
initializeNewReportForFile(fileParseResult);
writeReportSummary(fileResult);
writeReportDetails(fileResult);
finalizeReportForCurrentFile();
sendReportEmail();
}
if (!errorResults.isEmpty()) {
LOG.info("writeBatchJobReports: One or more RASS files failed to be parsed; writing error report file");
writeErrorReport(errorResults);
sendReportEmail();
}
LOG.info("writeBatchJobReports: finished writing RASS batch job reports");
}
use of edu.cornell.kfs.rass.batch.RassXmlFileParseResult in project cu-kfs by CU-CommunityApps.
the class RassServiceImpl method parseRassXml.
protected RassXmlFileParseResult parseRassXml(String rassInputFileName) {
try {
LOG.info("parseRassXml, reading RASS XML from file: " + rassInputFileName);
byte[] rassXmlContent = LoadFileUtils.safelyLoadFileBytes(rassInputFileName);
RassXmlDocumentWrapper parsedContent = (RassXmlDocumentWrapper) batchInputFileService.parse(batchInputFileType, rassXmlContent);
LOG.info("parseRassXml, successfully parsed RASS XML into data object from file: " + rassInputFileName);
return new RassXmlFileParseResult(rassInputFileName, RassParseResultCode.SUCCESS, Optional.of(parsedContent));
} catch (RuntimeException e) {
LOG.error("parseRassXml, could not read XML from file: " + rassInputFileName, e);
return new RassXmlFileParseResult(rassInputFileName, RassParseResultCode.ERROR, Optional.empty());
} finally {
removeDoneFileQuietly(rassInputFileName);
}
}
use of edu.cornell.kfs.rass.batch.RassXmlFileParseResult in project cu-kfs by CU-CommunityApps.
the class RassServiceImplXmlParseTest method assertRassParseResultsAreCorrect.
private void assertRassParseResultsAreCorrect(List<RassXmlFileParseResult> expectedResults, List<RassXmlFileParseResult> actualResults) {
assertEquals("Wrong number of parsing results", expectedResults.size(), actualResults.size());
Map<String, RassXmlFileParseResult> actualResultsByFileName = actualResults.stream().collect(Collectors.toMap(this::getFileNameFromResultUsingSlashes, Function.identity()));
for (RassXmlFileParseResult expectedResult : expectedResults) {
String expectedFileName = expectedResult.getRassXmlFileName();
RassXmlFileParseResult actualResult = actualResultsByFileName.get(expectedFileName);
assertNotNull("A result object should have been present for file " + expectedFileName, actualResult);
assertEquals("Wrong parse result code for file " + expectedFileName, expectedResult.getResultCode(), actualResult.getResultCode());
if (expectedResult.hasParsedDocumentWrapper()) {
assertTrue("Parsed content should have been present for file " + expectedFileName, actualResult.hasParsedDocumentWrapper());
assertEquals("Wrong parsed contents for file " + expectedFileName, expectedResult.getParsedDocumentWrapper(), actualResult.getParsedDocumentWrapper());
} else {
assertFalse("Parsed data should not have been present for file " + expectedFileName, actualResult.hasParsedDocumentWrapper());
}
}
}
use of edu.cornell.kfs.rass.batch.RassXmlFileParseResult in project cu-kfs by CU-CommunityApps.
the class RassReportServiceImpl method writeErrorReport.
private void writeErrorReport(List<RassXmlFileParseResult> errorResults) {
initializeNewReport(RassConstants.RASS_PARSE_ERRORS_BASE_FILENAME);
reportWriterService.writeFormattedMessageLine("RASS Error Report");
reportWriterService.writeNewLines(1);
writeFormattedMessageLineForConfigProperty(RassKeyConstants.MESSAGE_RASS_REPORT_ERROR_HEADER_LINE1);
writeFormattedMessageLineForConfigProperty(RassKeyConstants.MESSAGE_RASS_REPORT_ERROR_HEADER_LINE2);
writeFormattedMessageLineForConfigProperty(RassKeyConstants.MESSAGE_RASS_REPORT_ERROR_HEADER_LINE3);
reportWriterService.writeNewLines(1);
for (RassXmlFileParseResult errorResult : errorResults) {
String xmlFileName = getFileNameWithoutPath(errorResult.getRassXmlFileName());
reportWriterService.writeFormattedMessageLine(xmlFileName);
}
finalizeReportForCurrentFile();
}
use of edu.cornell.kfs.rass.batch.RassXmlFileParseResult in project cu-kfs by CU-CommunityApps.
the class RassServiceImpl method updateBOs.
protected <T extends RassXmlObject, R extends PersistableBusinessObject> Map<String, RassBusinessObjectUpdateResultGrouping<R>> updateBOs(List<RassXmlFileParseResult> parsedFiles, RassObjectTranslationDefinition<T, R> objectDefinition, PendingDocumentTracker documentTracker) {
Map<String, RassBusinessObjectUpdateResultGrouping<R>> resultGroupings = new HashMap<>();
LOG.info("updateBOs, Started processing objects of type " + objectDefinition.getObjectLabel());
for (RassXmlFileParseResult parsedFile : parsedFiles) {
LOG.info("updateBOs, Processing results from file " + parsedFile.getRassXmlFileName());
parsedObjectTypeProcessingWatcher.accept(parsedFile.getRassXmlFileName(), objectDefinition.getBusinessObjectClass());
List<RassBusinessObjectUpdateResult<R>> objectResults = new ArrayList<>();
RassObjectGroupingUpdateResultCode groupingResultCode = RassObjectGroupingUpdateResultCode.SUCCESS;
try {
RassXmlDocumentWrapper documentWrapper = parsedFile.getParsedDocumentWrapper();
Date extractDate = documentWrapper.getExtractDate();
if (extractDate == null) {
LOG.warn("updateBOs, Processing a file that does not specify an extract date");
} else {
LOG.info("updateBOs, Processing file with extract date " + extractDate);
}
List<?> xmlObjects = (List<?>) ObjectPropertyUtils.getPropertyValue(documentWrapper, objectDefinition.getRootXmlObjectListPropertyName());
if (Agency.class.getSimpleName().equals(objectDefinition.getObjectLabel())) {
LOG.info("updateBOs, found a collection of Agencies, we need to sort the agencies such any agencies that are the 'reports to agency' for other agencies are created or updated first.");
xmlObjects = rassSortService.sortRassXmlAgencyEntriesForUpdate((List<RassXmlAgencyEntry>) xmlObjects);
}
LOG.info("updateBOs, Found " + xmlObjects.size() + KFSConstants.BLANK_SPACE + objectDefinition.getObjectLabel() + " objects to process");
for (Object xmlObject : xmlObjects) {
T typedXmlObject = objectDefinition.getXmlObjectClass().cast(xmlObject);
RassBusinessObjectUpdateResult<R> result = processObject(objectDefinition, documentTracker, typedXmlObject);
if (RassObjectUpdateResultCode.isSuccessfulResult(result.getResultCode())) {
documentTracker.addDocumentIdToTrack(result);
} else if (RassObjectUpdateResultCode.ERROR.equals(result.getResultCode())) {
documentTracker.addObjectUpdateFailureToTrack(result);
groupingResultCode = RassObjectGroupingUpdateResultCode.ERROR;
}
objectResults.add(result);
}
LOG.info("updateBOs, Finished processing " + objectDefinition.getObjectLabel() + " objects from file " + parsedFile.getRassXmlFileName());
} catch (RuntimeException e) {
LOG.error("updateBOs, Unexpected exception encountered when processing BOs of type " + objectDefinition.getObjectLabel() + " for file " + parsedFile.getRassXmlFileName(), e);
groupingResultCode = RassObjectGroupingUpdateResultCode.ERROR;
}
resultGroupings.put(parsedFile.getRassXmlFileName(), new RassBusinessObjectUpdateResultGrouping<>(objectDefinition.getBusinessObjectClass(), objectResults, groupingResultCode));
}
LOG.info("updateBOs, Finished processing objects of type " + objectDefinition.getObjectLabel());
return resultGroupings;
}
Aggregations