Skip to content

Commit

Permalink
Fix Cache for StudyViewApplier
Browse files Browse the repository at this point in the history
  • Loading branch information
haynescd committed Feb 1, 2024
1 parent f0d06e1 commit 648d61a
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 17 deletions.
75 changes: 66 additions & 9 deletions src/main/java/org/cbioportal/web/util/StudyViewFilterApplier.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,79 @@
package org.cbioportal.web.util;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.map.MultiKeyMap;
import org.cbioportal.model.*;
import org.cbioportal.model.Binnable;
import org.cbioportal.model.ClinicalAttribute;
import org.cbioportal.model.ClinicalData;
import org.cbioportal.model.DataBin;
import org.cbioportal.model.DiscreteCopyNumberData;
import org.cbioportal.model.Gene;
import org.cbioportal.model.GeneFilter;
import org.cbioportal.model.GeneFilterQuery;
import org.cbioportal.model.GenePanelData;
import org.cbioportal.model.GenericAssayDataBin;
import org.cbioportal.model.GenomicDataBin;
import org.cbioportal.model.MolecularProfile;
import org.cbioportal.model.MolecularProfile.MolecularAlterationType;
import org.cbioportal.service.*;
import org.cbioportal.model.MolecularProfileCaseIdentifier;
import org.cbioportal.model.Sample;
import org.cbioportal.model.SampleList;
import org.cbioportal.service.ClinicalAttributeService;
import org.cbioportal.service.DiscreteCopyNumberService;
import org.cbioportal.service.GenePanelService;
import org.cbioportal.service.GeneService;
import org.cbioportal.service.GenericAssayService;
import org.cbioportal.service.MolecularDataService;
import org.cbioportal.service.MolecularProfileService;
import org.cbioportal.service.MutationService;
import org.cbioportal.service.SampleListService;
import org.cbioportal.service.SampleService;
import org.cbioportal.service.StructuralVariantService;
import org.cbioportal.service.exception.MolecularProfileNotFoundException;
import org.cbioportal.service.util.MolecularProfileUtil;
import org.cbioportal.web.parameter.*;
import org.cbioportal.web.util.appliers.*;
import org.cbioportal.web.parameter.ClinicalDataFilter;
import org.cbioportal.web.parameter.ClinicalDataType;
import org.cbioportal.web.parameter.DataBinCountFilter;
import org.cbioportal.web.parameter.DataBinFilter;
import org.cbioportal.web.parameter.DataBinMethod;
import org.cbioportal.web.parameter.DataFilter;
import org.cbioportal.web.parameter.DiscreteCopyNumberEventType;
import org.cbioportal.web.parameter.GeneIdType;
import org.cbioportal.web.parameter.GenericAssayDataBinCountFilter;
import org.cbioportal.web.parameter.GenericAssayDataBinFilter;
import org.cbioportal.web.parameter.GenericAssayDataFilter;
import org.cbioportal.web.parameter.GenomicDataBinCountFilter;
import org.cbioportal.web.parameter.GenomicDataBinFilter;
import org.cbioportal.web.parameter.GenomicDataFilter;
import org.cbioportal.web.parameter.Projection;
import org.cbioportal.web.parameter.SampleIdentifier;
import org.cbioportal.web.parameter.StudyViewFilter;
import org.cbioportal.web.util.appliers.StudyViewSubFilterApplier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;


@Component
public class StudyViewFilterApplier {
@Autowired
private ApplicationContext applicationContext;

private StudyViewFilterApplier instance;

// This gets initialized and overwritten. We do this because Spring's unit tests
// don't know how to autowire this, even though production Spring does. If we
// don't give this an initial value, we get NPEs.
Expand Down Expand Up @@ -67,6 +116,14 @@ public class StudyViewFilterApplier {
@Autowired
private MolecularProfileUtil molecularProfileUtil;


private StudyViewFilterApplier getInstance() {
if (Objects.isNull(instance)) {
instance = applicationContext.getBean(StudyViewFilterApplier.class);
}
return instance;
}

Function<Sample, SampleIdentifier> sampleToSampleIdentifier = new Function<Sample, SampleIdentifier>() {

public SampleIdentifier apply(Sample sample) {
Expand All @@ -78,7 +135,7 @@ public SampleIdentifier apply(Sample sample) {
};

public List<SampleIdentifier> apply(StudyViewFilter studyViewFilter) {
return this.cachedApply(studyViewFilter);
return this.getInstance().cachedApply(studyViewFilter);
}

@Cacheable(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
package org.cbioportal.web.util;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.cbioportal.model.*;
import org.cbioportal.model.CNA;
import org.cbioportal.model.ClinicalAttribute;
import org.cbioportal.model.ClinicalData;
import org.cbioportal.model.DiscreteCopyNumberData;
import org.cbioportal.model.Gene;
import org.cbioportal.model.GeneFilter;
import org.cbioportal.model.GeneFilterQuery;
import org.cbioportal.model.GenericAssayData;
import org.cbioportal.model.MolecularProfile;
import org.cbioportal.model.MolecularProfile.MolecularAlterationType;
import org.cbioportal.model.MolecularProfileCaseIdentifier;
import org.cbioportal.model.Mutation;
import org.cbioportal.model.Patient;
import org.cbioportal.model.Sample;
import org.cbioportal.model.util.Select;
import org.cbioportal.service.ClinicalAttributeService;
import org.cbioportal.service.ClinicalDataService;
Expand All @@ -20,6 +32,7 @@
import org.cbioportal.service.impl.CustomDataServiceImpl;
import org.cbioportal.service.util.MolecularProfileUtil;
import org.cbioportal.service.util.SessionServiceRequestHandler;
import org.cbioportal.web.config.TestConfig;
import org.cbioportal.web.parameter.ClinicalDataFilter;
import org.cbioportal.web.parameter.DataFilterValue;
import org.cbioportal.web.parameter.GeneIdType;
Expand All @@ -35,21 +48,31 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.ResourceUtils;

import java.io.IOException;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

import static com.google.common.collect.ImmutableList.of;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.stream.Collectors.*;
import static org.mockito.ArgumentMatchers.*;
import static java.util.stream.Collectors.toList;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.Silent.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
public class StudyViewFilterApplierTest {

public static final String STUDY_ID = "study_id";
Expand All @@ -75,6 +98,9 @@ public class StudyViewFilterApplierTest {

@InjectMocks
private StudyViewFilterApplier studyViewFilterApplier;

@Mock
private ApplicationContext applicationContext;

@Mock
private SampleService sampleService;
Expand Down Expand Up @@ -138,11 +164,12 @@ public class StudyViewFilterApplierTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
when(applicationContext.getBean(StudyViewFilterApplier.class)).thenReturn(studyViewFilterApplier);
}

@Test
public void apply() throws Exception {

List<String> studyIds = new ArrayList<>();
studyIds.add(STUDY_ID);
studyIds.add(STUDY_ID);
Expand Down

0 comments on commit 648d61a

Please sign in to comment.