Search in sources :

Example 1 with RassXmlFileParseResult

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");
}
Also used : RassXmlFileProcessingResult(edu.cornell.kfs.rass.batch.RassXmlFileProcessingResult) ArrayList(java.util.ArrayList) RassXmlFileParseResult(edu.cornell.kfs.rass.batch.RassXmlFileParseResult)

Example 2 with RassXmlFileParseResult

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);
    }
}
Also used : RassXmlDocumentWrapper(edu.cornell.kfs.rass.batch.xml.RassXmlDocumentWrapper) RassXmlFileParseResult(edu.cornell.kfs.rass.batch.RassXmlFileParseResult)

Example 3 with RassXmlFileParseResult

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());
        }
    }
}
Also used : RassXmlFileParseResult(edu.cornell.kfs.rass.batch.RassXmlFileParseResult)

Example 4 with RassXmlFileParseResult

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();
}
Also used : RassXmlFileParseResult(edu.cornell.kfs.rass.batch.RassXmlFileParseResult)

Example 5 with RassXmlFileParseResult

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;
}
Also used : RassBusinessObjectUpdateResult(edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult) RassBusinessObjectUpdateResultGrouping(edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResultGrouping) Agency(org.kuali.kfs.module.cg.businessobject.Agency) HashMap(java.util.HashMap) RassXmlDocumentWrapper(edu.cornell.kfs.rass.batch.xml.RassXmlDocumentWrapper) RassObjectGroupingUpdateResultCode(edu.cornell.kfs.rass.RassConstants.RassObjectGroupingUpdateResultCode) ArrayList(java.util.ArrayList) Date(java.util.Date) ArrayList(java.util.ArrayList) List(java.util.List) RassXmlObject(edu.cornell.kfs.rass.batch.xml.RassXmlObject) PersistableBusinessObject(org.kuali.kfs.krad.bo.PersistableBusinessObject) RassXmlFileParseResult(edu.cornell.kfs.rass.batch.RassXmlFileParseResult)

Aggregations

RassXmlFileParseResult (edu.cornell.kfs.rass.batch.RassXmlFileParseResult)5 RassXmlDocumentWrapper (edu.cornell.kfs.rass.batch.xml.RassXmlDocumentWrapper)2 ArrayList (java.util.ArrayList)2 RassObjectGroupingUpdateResultCode (edu.cornell.kfs.rass.RassConstants.RassObjectGroupingUpdateResultCode)1 RassBusinessObjectUpdateResult (edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult)1 RassBusinessObjectUpdateResultGrouping (edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResultGrouping)1 RassXmlFileProcessingResult (edu.cornell.kfs.rass.batch.RassXmlFileProcessingResult)1 RassXmlObject (edu.cornell.kfs.rass.batch.xml.RassXmlObject)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 List (java.util.List)1 PersistableBusinessObject (org.kuali.kfs.krad.bo.PersistableBusinessObject)1 Agency (org.kuali.kfs.module.cg.businessobject.Agency)1