diff --git a/pic-sure-resources/pic-sure-aggregate-data-sharing-resource/src/main/java/edu/harvard/hms/dbmi/avillach/AggregateDataSharingResourceRS.java b/pic-sure-resources/pic-sure-aggregate-data-sharing-resource/src/main/java/edu/harvard/hms/dbmi/avillach/AggregateDataSharingResourceRS.java index 22a5a47f..cbcc3c76 100644 --- a/pic-sure-resources/pic-sure-aggregate-data-sharing-resource/src/main/java/edu/harvard/hms/dbmi/avillach/AggregateDataSharingResourceRS.java +++ b/pic-sure-resources/pic-sure-aggregate-data-sharing-resource/src/main/java/edu/harvard/hms/dbmi/avillach/AggregateDataSharingResourceRS.java @@ -579,17 +579,7 @@ protected String processContinuousCrossCounts(String continuousCrossCountRespons return objectMapper.writeValueAsString(binnedContinuousCrossCounts); } - binnedContinuousCrossCounts.forEach((key, value) -> { - value.forEach((innerKey, innerValue) -> { - Optional aggregateCount = aggregateCountHelper(innerValue); - if (aggregateCount.isPresent()) { - value.put(innerKey, aggregateCount.get()); - } else { - value.put(innerKey, randomize(innerValue.toString(), generatedVariance)); - } - }); - }); - + obfuscatedCrossCount(generatedVariance, binnedContinuousCrossCounts); return objectMapper.writeValueAsString(binnedContinuousCrossCounts); } @@ -632,7 +622,19 @@ protected String processCategoricalCrossCounts(String categoricalEntityString, S } // Now we need to obfuscate our return data. The only consideration is do we apply < threshold or variance - categoricalCrossCount.forEach((key, value) -> { + obfuscatedCrossCount(generatedVariance, categoricalCrossCount); + return objectMapper.writeValueAsString(categoricalCrossCount); + } + + /** + * This method will obfuscate the cross counts based on the generated variance. We do not have a return because + * we are modifying the passed crossCount object. Java passes objects by reference value, so we do not need to return. + * + * @param generatedVariance The variance for the request + * @param crossCount The cross count that will be obfuscated + */ + private void obfuscatedCrossCount(int generatedVariance, Map> crossCount) { + crossCount.forEach((key, value) -> { value.forEach((innerKey, innerValue) -> { Optional aggregateCount = aggregateCountHelper(innerValue); if (aggregateCount.isPresent()) { @@ -642,8 +644,6 @@ protected String processCategoricalCrossCounts(String categoricalEntityString, S } }); }); - - return objectMapper.writeValueAsString(categoricalCrossCount); } private boolean isCrossCountObfuscated(Map crossCounts, int generatedVariance, String lessThanThresholdStr, String varianceStr) {