Search in sources :

Example 1 with RassBusinessObjectUpdateResult

use of edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult 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)

Example 2 with RassBusinessObjectUpdateResult

use of edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult in project cu-kfs by CU-CommunityApps.

the class RassUpdateServiceImpl method updateObject.

protected <T extends RassXmlObject, R extends PersistableBusinessObject> RassBusinessObjectUpdateResult<R> updateObject(T xmlObject, R oldBusinessObject, RassObjectTranslationDefinition<T, R> objectDefinition) {
    LOG.info("updateObject, Updating " + objectDefinition.printObjectLabelAndKeys(xmlObject));
    if (!objectDefinition.businessObjectEditIsPermitted(xmlObject, oldBusinessObject)) {
        LOG.info("updateObject, Updates are not permitted for " + objectDefinition.printObjectLabelAndKeys(xmlObject) + " so any changes to it will be skipped");
        return new RassBusinessObjectUpdateResult<>(objectDefinition.getBusinessObjectClass(), objectDefinition.printPrimaryKeyValues(xmlObject), RassObjectUpdateResultCode.SKIPPED);
    }
    Supplier<R> businessObjectCopier = () -> deepCopyObject(oldBusinessObject);
    R newBusinessObject = buildAndPopulateBusinessObjectFromPojo(xmlObject, businessObjectCopier, objectDefinition, KRADConstants.MAINTENANCE_EDIT_ACTION);
    updateOldBusinessObjectForMaintenanceDocumentCompatibility(oldBusinessObject, newBusinessObject, objectDefinition);
    objectDefinition.processCustomTranslationForBusinessObjectEdit(xmlObject, oldBusinessObject, newBusinessObject);
    if (businessObjectWasUpdatedByXml(oldBusinessObject, newBusinessObject, objectDefinition)) {
        Pair<R, R> oldAndNewBos = Pair.of(oldBusinessObject, newBusinessObject);
        MaintenanceDocument maintenanceDocument = createAndRouteMaintenanceDocument(oldAndNewBos, KRADConstants.MAINTENANCE_EDIT_ACTION, objectDefinition);
        LOG.info("updateObject, Successfully routed document " + maintenanceDocument.getDocumentNumber() + " to edit " + objectDefinition.printObjectLabelAndKeys(xmlObject));
        return new RassBusinessObjectUpdateResult<>(objectDefinition.getBusinessObjectClass(), objectDefinition.printPrimaryKeyValues(newBusinessObject), maintenanceDocument.getDocumentNumber(), RassObjectUpdateResultCode.SUCCESS_EDIT, StringUtils.EMPTY);
    } else {
        LOG.info("updateObject, Skipping updates for " + objectDefinition.printObjectLabelAndKeys(xmlObject) + " because either no changes were made or changes were only made to the truncated data portions");
        return new RassBusinessObjectUpdateResult<>(objectDefinition.getBusinessObjectClass(), objectDefinition.printPrimaryKeyValues(newBusinessObject), RassObjectUpdateResultCode.SKIPPED);
    }
}
Also used : RassBusinessObjectUpdateResult(edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult) MaintenanceDocument(org.kuali.kfs.kns.document.MaintenanceDocument)

Example 3 with RassBusinessObjectUpdateResult

use of edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult in project cu-kfs by CU-CommunityApps.

the class RassUpdateServiceImpl method createObjectAndMaintenanceDocument.

protected <T extends RassXmlObject, R extends PersistableBusinessObject> RassBusinessObjectUpdateResult<R> createObjectAndMaintenanceDocument(T xmlObject, RassObjectTranslationDefinition<T, R> objectDefinition) {
    LOG.info("createObjectAndMaintenanceDocument, Creating " + objectDefinition.printObjectLabelAndKeys(xmlObject));
    if (!objectDefinition.businessObjectCreateIsPermitted(xmlObject)) {
        LOG.info("createObjectAndMaintenanceDocument, Create not permitted for " + objectDefinition.printObjectLabelAndKeys(xmlObject) + " so any changes to it will be skipped");
        return new RassBusinessObjectUpdateResult<>(objectDefinition.getBusinessObjectClass(), objectDefinition.printPrimaryKeyValues(xmlObject), RassObjectUpdateResultCode.SKIPPED);
    }
    R businessObject = createObject(xmlObject, objectDefinition);
    Pair<R, R> pairWithNewObjectOnly = Pair.of(null, businessObject);
    MaintenanceDocument maintenanceDocument = createAndRouteMaintenanceDocument(pairWithNewObjectOnly, KRADConstants.MAINTENANCE_NEW_ACTION, objectDefinition);
    LOG.info("createObjectAndMaintenanceDocument, Successfully routed document " + maintenanceDocument.getDocumentNumber() + " to create " + objectDefinition.printObjectLabelAndKeys(xmlObject));
    return new RassBusinessObjectUpdateResult<>(objectDefinition.getBusinessObjectClass(), objectDefinition.printPrimaryKeyValues(businessObject), maintenanceDocument.getDocumentNumber(), RassObjectUpdateResultCode.SUCCESS_NEW, StringUtils.EMPTY);
}
Also used : RassBusinessObjectUpdateResult(edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult) MaintenanceDocument(org.kuali.kfs.kns.document.MaintenanceDocument)

Aggregations

RassBusinessObjectUpdateResult (edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResult)3 MaintenanceDocument (org.kuali.kfs.kns.document.MaintenanceDocument)2 RassObjectGroupingUpdateResultCode (edu.cornell.kfs.rass.RassConstants.RassObjectGroupingUpdateResultCode)1 RassBusinessObjectUpdateResultGrouping (edu.cornell.kfs.rass.batch.RassBusinessObjectUpdateResultGrouping)1 RassXmlFileParseResult (edu.cornell.kfs.rass.batch.RassXmlFileParseResult)1 RassXmlDocumentWrapper (edu.cornell.kfs.rass.batch.xml.RassXmlDocumentWrapper)1 RassXmlObject (edu.cornell.kfs.rass.batch.xml.RassXmlObject)1 ArrayList (java.util.ArrayList)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