use of edu.cornell.kfs.rass.batch.xml.RassXmlObject 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;
}
use of edu.cornell.kfs.rass.batch.xml.RassXmlObject in project cu-kfs by CU-CommunityApps.
the class RassUpdateServiceImpl method buildAndPopulateBusinessObjectFromPojo.
protected <T extends RassXmlObject, R extends PersistableBusinessObject> R buildAndPopulateBusinessObjectFromPojo(T xmlObject, Supplier<R> businessObjectSupplier, RassObjectTranslationDefinition<T, R> objectDefinition, String maintenanceAction) {
Class<R> businessObjectClass = objectDefinition.getBusinessObjectClass();
R businessObject = businessObjectSupplier.get();
List<String> missingRequiredFields = new ArrayList<>();
for (RassPropertyDefinition propertyMapping : objectDefinition.getPropertyMappingsApplicableForAction(maintenanceAction)) {
Object xmlPropertyValue = ObjectPropertyUtils.getPropertyValue(xmlObject, propertyMapping.getXmlPropertyName());
RassValueConverter valueConverter = propertyMapping.getValueConverter();
Object convertedValue = valueConverter.convert(businessObjectClass, propertyMapping, xmlPropertyValue);
if (convertedValue == null && propertyMapping.isRequired()) {
missingRequiredFields.add(propertyMapping.getXmlPropertyName());
} else if (propertyMapping instanceof RassListPropertyDefinition) {
RassListPropertyDefinition listPropertyMapping = (RassListPropertyDefinition) propertyMapping;
List<?> newSubObjects = (List<?>) convertedValue;
copyForeignKeyValuesToNewSubObjects(businessObject, listPropertyMapping, newSubObjects);
mergeBusinessObjectListProperty(businessObject, (RassListPropertyDefinition) propertyMapping, (List<?>) convertedValue);
} else {
ObjectPropertyUtils.setPropertyValue(businessObject, propertyMapping.getBoPropertyName(), convertedValue);
}
}
if (!missingRequiredFields.isEmpty()) {
throw new RuntimeException(objectDefinition.printObjectLabelAndKeys(xmlObject) + " is missing values for the following required fields: " + missingRequiredFields.toString());
}
if (StringUtils.equalsIgnoreCase(maintenanceAction, KRADConstants.MAINTENANCE_NEW_ACTION)) {
objectDefinition.makeBusinessObjectActiveIfApplicable(xmlObject, businessObject);
}
return businessObject;
}
Aggregations