use of edu.cornell.kfs.rass.batch.RassSubObjectDefinition in project cu-kfs by CU-CommunityApps.
the class RassUpdateServiceImpl method addFillerSubObjectsToListOnOldBusinessObjectIfNeeded.
protected <R extends PersistableBusinessObject> void addFillerSubObjectsToListOnOldBusinessObjectIfNeeded(R oldBusinessObject, R newBusinessObject, RassListPropertyDefinition listPropertyDefinition) {
String listPropertyName = listPropertyDefinition.getBoPropertyName();
List<Object> oldList = ObjectPropertyUtils.getPropertyValue(oldBusinessObject, listPropertyName);
List<Object> newList = ObjectPropertyUtils.getPropertyValue(newBusinessObject, listPropertyName);
if (oldList.size() < newList.size()) {
RassSubObjectDefinition subObjectDefinition = listPropertyDefinition.getSubObjectDefinition();
Class<? extends PersistableBusinessObject> subObjectClass = subObjectDefinition.getSubObjectClass();
for (int i = oldList.size(); i < newList.size(); i++) {
PersistableBusinessObject minimalSubObject = createMinimalObject(subObjectClass);
oldList.add(minimalSubObject);
}
}
}
use of edu.cornell.kfs.rass.batch.RassSubObjectDefinition in project cu-kfs by CU-CommunityApps.
the class RassUpdateServiceImpl method mergeBusinessObjectListProperty.
protected void mergeBusinessObjectListProperty(Object businessObject, RassListPropertyDefinition listPropertyMapping, List<?> newSubObjects) {
RassSubObjectDefinition subObjectDefinition = listPropertyMapping.getSubObjectDefinition();
List<Object> existingList = ObjectPropertyUtils.getPropertyValue(businessObject, listPropertyMapping.getBoPropertyName());
Set<Integer> indexesOfSubObjectsToInactivate = IntStream.range(0, existingList.size()).mapToObj(Integer::valueOf).collect(Collectors.toCollection(HashSet::new));
for (Object newSubObject : newSubObjects) {
int i = 0;
while (i < existingList.size() && !subObjectPrimaryKeysMatch(subObjectDefinition, existingList.get(i), newSubObject)) {
i++;
}
if (i < existingList.size()) {
mergeNonPrimaryKeyUpdatesIntoExistingSubObject(subObjectDefinition, existingList.get(i), newSubObject);
indexesOfSubObjectsToInactivate.remove(i);
} else {
existingList.add(newSubObject);
}
}
for (Integer indexOfObjectToInactivate : indexesOfSubObjectsToInactivate) {
Object existingSubObject = existingList.get(indexOfObjectToInactivate);
if (existingSubObject instanceof MutableInactivatable) {
((MutableInactivatable) existingSubObject).setActive(false);
}
if (existingSubObject instanceof Primaryable && StringUtils.isNotBlank(subObjectDefinition.getPrimaryIndicatorPropertyName())) {
ObjectPropertyUtils.setPropertyValue(existingSubObject, subObjectDefinition.getPrimaryIndicatorPropertyName(), Boolean.FALSE);
}
}
}
Aggregations