diff --git a/src/main/java/org/cbioportal/service/impl/StudyViewColumnarServiceImpl.java b/src/main/java/org/cbioportal/service/impl/StudyViewColumnarServiceImpl.java index b8f87346729..6ac5d96c943 100644 --- a/src/main/java/org/cbioportal/service/impl/StudyViewColumnarServiceImpl.java +++ b/src/main/java/org/cbioportal/service/impl/StudyViewColumnarServiceImpl.java @@ -113,8 +113,28 @@ public List getClinicalDataCounts(StudyViewFilter studyVi return item; }).toList(); - // This is postprocessing to adjust NA counts for multiple studies - for (ClinicalDataCountItem clinicalDataCountItem: clinicalDataCountItems) { + // This rest of the code is postprocessing to adjust NA counts for multiple studies + List combinedClinicalDataCountItems = new ArrayList<>(); + + Map clinicalDataCountItemMap = clinicalDataCountItems + .stream() + .collect(Collectors.toMap( + ClinicalDataCountItem::getAttributeId, + item -> item + )); + + // go over all filtered attributes, not just attributes found in clinicalDataCountItems + for (String attributeId: filteredAttributes) { + ClinicalDataCountItem clinicalDataCountItem = clinicalDataCountItemMap.get(attributeId); + boolean isItemMissing = false; + + if (clinicalDataCountItem == null) { + isItemMissing = true; + clinicalDataCountItem = new ClinicalDataCountItem(); + clinicalDataCountItem.setAttributeId(attributeId); + clinicalDataCountItem.setCounts(new ArrayList<>()); + } + Integer totalClinicalDataCount = clinicalDataCountItem .getCounts() .stream() @@ -126,6 +146,13 @@ public List getClinicalDataCounts(StudyViewFilter studyVi int casesWithoutClinicalData = filteredCount - totalClinicalDataCount; if (casesWithoutClinicalData > 0) { + // some of these attributes may be completely missing in combinedClinicalDataCountItems + // in case the only attribute value is NA. + // we need to manually add those missing items to make sure we have NA counts. + if (isItemMissing) { + combinedClinicalDataCountItems.add(clinicalDataCountItem); + } + // find "NA" ClinicalDataCount naClinicalDataCount = clinicalDataCountItem .getCounts() @@ -150,7 +177,9 @@ public List getClinicalDataCounts(StudyViewFilter studyVi } } - return clinicalDataCountItems; + combinedClinicalDataCountItems.addAll(clinicalDataCountItems); + + return combinedClinicalDataCountItems; } @Override