Skip to content

Commit

Permalink
PR review change
Browse files Browse the repository at this point in the history
  • Loading branch information
pvannierop committed Nov 6, 2023
1 parent 60fe380 commit 2a35baa
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 29 deletions.
4 changes: 4 additions & 0 deletions model/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.cbioportal.model;

import org.apache.commons.lang3.tuple.ImmutablePair;

public class ClinicalDataTableResult {

private final ImmutablePair<SampleClinicalDataCollection, Integer> pair;

public ClinicalDataTableResult(SampleClinicalDataCollection pagedCollectionFragment, Integer totalCount) {
this.pair = new ImmutablePair<>(pagedCollectionFragment, totalCount);
}

public ClinicalDataTableResult() {
this.pair = new ImmutablePair<>(new SampleClinicalDataCollection(), 0);
}

public SampleClinicalDataCollection getSampleClinicalDataCollection() {
return pair.getLeft();
}
public Integer getTotalCount() {
return pair.getRight();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,5 @@ public void testLastIndex() {
Assert.assertEquals(6, (int) paginationCalculator.lastIndex(3, 3, 26));
Assert.assertEquals(26, (int) paginationCalculator.lastIndex(25, 3, 26));
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package org.cbioportal.service;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.cbioportal.model.ClinicalData;
import org.cbioportal.model.ClinicalDataCountItem;
import org.cbioportal.model.SampleClinicalDataCollection;
import org.cbioportal.model.ClinicalDataTableResult;
import org.cbioportal.model.meta.BaseMeta;
import org.cbioportal.service.exception.PatientNotFoundException;
import org.cbioportal.service.exception.SampleNotFoundException;
Expand Down Expand Up @@ -54,7 +53,7 @@ BaseMeta fetchMetaClinicalData(List<String> studyIds, List<String> ids, List<Str
List<ClinicalData> getPatientClinicalDataDetailedToSample(List<String> studyIds, List<String> patientIds,
List<String> attributeIds);

ImmutablePair<SampleClinicalDataCollection, Integer> fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize,
Integer pageNumber, String searchTerm, String sortBy, String direction);
ClinicalDataTableResult fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize,
Integer pageNumber, String searchTerm, String sortBy, String direction);

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.cbioportal.service.impl;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.cbioportal.model.*;
import org.cbioportal.model.meta.BaseMeta;
import org.cbioportal.persistence.ClinicalDataRepository;
Expand Down Expand Up @@ -234,11 +233,11 @@ public List<ClinicalData> getPatientClinicalDataDetailedToSample(List<String> st
}

@Override
public ImmutablePair<SampleClinicalDataCollection, Integer> fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize, Integer pageNumber, String searchTerm, String sortBy, String direction) {
public ClinicalDataTableResult fetchSampleClinicalTable(List<String> studyIds, List<String> sampleIds, Integer pageSize, Integer pageNumber, String searchTerm, String sortBy, String direction) {

SampleClinicalDataCollection sampleClinicalDataCollection = new SampleClinicalDataCollection();
if (studyIds == null || studyIds.isEmpty() || sampleIds == null || sampleIds.isEmpty()) {
return new ImmutablePair<>(sampleClinicalDataCollection, 0);
return new ClinicalDataTableResult();
}

// Request un-paginated data.
Expand All @@ -250,7 +249,7 @@ public ImmutablePair<SampleClinicalDataCollection, Integer> fetchSampleClinicalT
Integer offset = paginationCalculator.offset(pageSize, pageNumber);

if (allSampleInternalIds.isEmpty() || offset >= allSampleInternalIds.size()) {
return new ImmutablePair<>(sampleClinicalDataCollection, 0);
return new ClinicalDataTableResult();
}

// Apply pagination to the sampleId list.
Expand All @@ -271,7 +270,7 @@ public ImmutablePair<SampleClinicalDataCollection, Integer> fetchSampleClinicalT
calculateBase64(clinicalDatum.getSampleId(), clinicalDatum.getStudyId())
)));

return new ImmutablePair<>(sampleClinicalDataCollection, allSampleInternalIds.size());
return new ClinicalDataTableResult(sampleClinicalDataCollection, allSampleInternalIds.size());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.cbioportal.service.impl;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.cbioportal.model.*;
import org.cbioportal.model.meta.BaseMeta;
import org.cbioportal.persistence.ClinicalDataRepository;
Expand All @@ -15,14 +14,11 @@
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.test.context.ContextConfiguration;

import java.util.*;

import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
Expand Down Expand Up @@ -392,12 +388,12 @@ public void fetchSampleClinicalTableHappyCase() {
when(clinicalDataRepository.getPatientClinicalDataBySampleInternalIds(sampleInternalIds)).thenReturn(
List.of(datum1, datum2)
);

ImmutablePair<SampleClinicalDataCollection, Integer> result = clinicalDataService.fetchSampleClinicalTable(
ClinicalDataTableResult result = clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
);
SampleClinicalDataCollection clinicalDataCollection = result.getLeft();
Integer itemCount = result.getRight();
SampleClinicalDataCollection clinicalDataCollection = result.getSampleClinicalDataCollection();
Integer itemCount = result.getTotalCount();

Assert.assertEquals(4, (int) itemCount);
Assert.assertEquals(2, clinicalDataCollection.getByUniqueSampleKey().size());
Expand All @@ -415,16 +411,16 @@ public void fetchSampleClinicalTableHappyCase() {
public void fetchSampleClinicalTableEmptyIdLists() {
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
null, sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
).getLeft().getByUniqueSampleKey().size());
).getSampleClinicalDataCollection().getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, null, pageSize, pageNumber, searchTerm, sortBy, direction
).getLeft().getByUniqueSampleKey().size());
).getSampleClinicalDataCollection().getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
new ArrayList<>(), sampleIds, pageSize, pageNumber, searchTerm, sortBy, direction
).getLeft().getByUniqueSampleKey().size());
).getSampleClinicalDataCollection().getByUniqueSampleKey().size());
Assert.assertEquals(0, clinicalDataService.fetchSampleClinicalTable(
sampleStudyIds, new ArrayList<>(), pageSize, pageNumber, searchTerm, sortBy, direction
).getLeft().getByUniqueSampleKey().size());
).getSampleClinicalDataCollection().getByUniqueSampleKey().size());
}

}
10 changes: 4 additions & 6 deletions web/src/main/java/org/cbioportal/web/StudyViewController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.math3.stat.correlation.PearsonsCorrelation;
import org.apache.commons.math3.stat.correlation.SpearmansCorrelation;
import org.apache.commons.math3.util.Pair;
Expand All @@ -17,7 +16,6 @@
import org.cbioportal.web.config.annotation.InternalApi;
import org.cbioportal.model.AlterationFilter;
import org.cbioportal.web.parameter.*;
import org.cbioportal.web.parameter.sort.ClinicalDataSortBy;
import org.cbioportal.web.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
Expand Down Expand Up @@ -991,13 +989,13 @@ public ResponseEntity<SampleClinicalDataCollection> fetchClinicalDataClinicalTab
) {

boolean singleStudyUnfiltered = studyViewFilterUtil.isSingleStudyUnfiltered(interceptedStudyViewFilter);
ImmutablePair<SampleClinicalDataCollection, Integer> sampleClinicalData = cachedClinicalDataTableData(
ClinicalDataTableResult sampleClinicalData = cachedClinicalDataTableData(
interceptedStudyViewFilter, singleStudyUnfiltered, pageNumber, pageSize, sortBy, searchTerm, direction.name()
);

// Because of pagination, the total number of sample matches can be larger than the items in the requested page.
SampleClinicalDataCollection aggregatedClinicalDataByUniqueSampleKey = sampleClinicalData.getLeft();
Integer totalNumberOfResults = sampleClinicalData.getRight();
SampleClinicalDataCollection aggregatedClinicalDataByUniqueSampleKey = sampleClinicalData.getSampleClinicalDataCollection();
Integer totalNumberOfResults = sampleClinicalData.getTotalCount();

HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add(HeaderKeyConstants.TOTAL_COUNT, String.valueOf(totalNumberOfResults));
Expand All @@ -1012,7 +1010,7 @@ public ResponseEntity<SampleClinicalDataCollection> fetchClinicalDataClinicalTab
cacheResolver = "staticRepositoryCacheOneResolver",
condition = "@cacheEnabledConfig.getEnabled() && #singleStudyUnfiltered && (#sortBy == null || #sortBy.isEmpty()) && (#searchTerm == null || #searchTerm.isEmpty()) && #pageNumber == 0"
)
public ImmutablePair<SampleClinicalDataCollection, Integer> cachedClinicalDataTableData(
public ClinicalDataTableResult cachedClinicalDataTableData(
StudyViewFilter interceptedStudyViewFilter, boolean singleStudyUnfiltered, Integer pageNumber,
Integer pageSize, String sortBy, String searchTerm, String sortDirection
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.cbioportal.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.cbioportal.model.*;
import org.cbioportal.model.util.Select;
import org.cbioportal.persistence.AlterationRepository;
Expand Down Expand Up @@ -887,7 +886,7 @@ public void fetchClinicalDataClinicalTable() throws Exception {
// For this sake of this test the sample clinical data and patient clinical data are identical.
when(clinicalDataService.fetchSampleClinicalTable(anyList(), anyList(),
anyInt(), anyInt(), anyString(), any(), anyString())).thenReturn(
new ImmutablePair<>(tableClinicalData, 100)
new ClinicalDataTableResult(tableClinicalData, 100)
);

StudyViewFilter studyViewFilter = new StudyViewFilter();
Expand Down

0 comments on commit 2a35baa

Please sign in to comment.