From 2740db8934bd31ad8dd7ab2d62ff88568e14979e Mon Sep 17 00:00:00 2001 From: Bryan Lai Date: Fri, 20 Sep 2024 17:24:40 -0400 Subject: [PATCH] refactor custom data filter util methods --- .../columnar/util/CustomDataFilterUtil.java | 109 ++++++++++-------- 1 file changed, 60 insertions(+), 49 deletions(-) diff --git a/src/main/java/org/cbioportal/web/columnar/util/CustomDataFilterUtil.java b/src/main/java/org/cbioportal/web/columnar/util/CustomDataFilterUtil.java index ff58ceb89fc..d9b9de6d0a1 100644 --- a/src/main/java/org/cbioportal/web/columnar/util/CustomDataFilterUtil.java +++ b/src/main/java/org/cbioportal/web/columnar/util/CustomDataFilterUtil.java @@ -37,66 +37,28 @@ public List extractCustomDataSamples(final StudyViewFilt return null; } - List customSampleIdentifiers = new ArrayList<>(); - if (CollectionUtils.isEmpty(studyViewFilter.getCustomDataFilters())) { return null; } - final List flattenedSamples = studyViewFilter.getCustomDataFilters().stream() + final List customSamplesFromProperty = studyViewFilter.getCustomDataFilters().stream() .flatMap(filter -> { List samples = filter.getSamples(); return (samples != null) ? samples.stream() : Stream.empty(); }) .collect(Collectors.toList()); - - if (!flattenedSamples.isEmpty()) { - customSampleIdentifiers.addAll(flattenedSamples); - - List equalityFilters = new ArrayList<>(); - List intervalFilters = new ArrayList<>(); - - studyViewFilter.getCustomDataFilters().forEach(filter -> { - if (filter.getDatatype() - .equals(CustomDatatype.STRING.name()) - ) { - equalityFilters.add(filter); - } else { - intervalFilters.add(filter); - } - }); - MultiKeyMap customDataByStudySampleName = new MultiKeyMap<>(); - - studyViewFilter.getCustomDataFilters().stream().forEach(filter -> { - filter.getSamples().forEach(datum -> { - String value = datum.getValue().toUpperCase(); - if (value.equals("NAN") || value.equals("N/A")) { - value = "NA"; - } - customDataByStudySampleName.put(datum.getStudyId(), datum.getSampleId(), filter.getDisplayName(), value); - }); - }); - - List filtered = new ArrayList<>(); - customSampleIdentifiers.forEach(customSampleIdentifier -> { - int equalityFilterCount = getFilteredCountByDataEqualityWithStudySampleNameMap(equalityFilters, customDataByStudySampleName, - customSampleIdentifier.getSampleId(), customSampleIdentifier.getStudyId(), false); - int intervalFilterCount = getFilteredCountByDataIntervalWithStudySampleNameMap(intervalFilters, customDataByStudySampleName, - customSampleIdentifier.getSampleId(), customSampleIdentifier.getStudyId()); - if (equalityFilterCount == equalityFilters.size() - && intervalFilterCount == intervalFilters.size() - ) { - filtered.add(customSampleIdentifier); - } - else { - customSampleIdentifier.setIsFilteredOut(true); - filtered.add(customSampleIdentifier); - } - }); - return filtered; + if (!customSamplesFromProperty.isEmpty()) { + return extractCustomDataSamplesWithoutSession(studyViewFilter, customSamplesFromProperty); } - + else { + return extractCustomDataSamplesWithSession(studyViewFilter); + } + } + + private List extractCustomDataSamplesWithSession(final StudyViewFilter studyViewFilter) { + List customSampleIdentifiers = new ArrayList<>(); + final List attributeIds = studyViewFilter.getCustomDataFilters().stream() .map(ClinicalDataFilter::getAttributeId) .collect(Collectors.toList()); @@ -169,6 +131,55 @@ public List extractCustomDataSamples(final StudyViewFilt return filtered; } + + private List extractCustomDataSamplesWithoutSession(final StudyViewFilter studyViewFilter, List customSamplesFromProperty) { + List customSampleIdentifiers = new ArrayList<>(); + + customSampleIdentifiers.addAll(customSamplesFromProperty); + + List equalityFilters = new ArrayList<>(); + List intervalFilters = new ArrayList<>(); + + studyViewFilter.getCustomDataFilters().forEach(filter -> { + if (filter.getDatatype() + .equals(CustomDatatype.STRING.name()) + ) { + equalityFilters.add(filter); + } else { + intervalFilters.add(filter); + } + }); + + MultiKeyMap customDataByStudySampleName = new MultiKeyMap<>(); + + studyViewFilter.getCustomDataFilters().stream().forEach(filter -> { + filter.getSamples().forEach(datum -> { + String value = datum.getValue().toUpperCase(); + if (value.equals("NAN") || value.equals("N/A")) { + value = "NA"; + } + customDataByStudySampleName.put(datum.getStudyId(), datum.getSampleId(), filter.getDisplayName(), value); + }); + }); + + List filtered = new ArrayList<>(); + customSampleIdentifiers.forEach(customSampleIdentifier -> { + int equalityFilterCount = getFilteredCountByDataEqualityWithStudySampleNameMap(equalityFilters, customDataByStudySampleName, + customSampleIdentifier.getSampleId(), customSampleIdentifier.getStudyId(), false); + int intervalFilterCount = getFilteredCountByDataIntervalWithStudySampleNameMap(intervalFilters, customDataByStudySampleName, + customSampleIdentifier.getSampleId(), customSampleIdentifier.getStudyId()); + if (equalityFilterCount == equalityFilters.size() + && intervalFilterCount == intervalFilters.size() + ) { + filtered.add(customSampleIdentifier); + } + else { + customSampleIdentifier.setIsFilteredOut(true); + filtered.add(customSampleIdentifier); + } + }); + return filtered; + } private Integer getFilteredCountByDataEqualityWithStudySampleNameMap(List attributes, MultiKeyMap clinicalDataMap, String entityId, String studyId, boolean negateFilters) {