diff --git a/src/main/java/org/cbioportal/web/util/StudyViewFilterApplier.java b/src/main/java/org/cbioportal/web/util/StudyViewFilterApplier.java index de4e5440e10..f7f5afd8595 100644 --- a/src/main/java/org/cbioportal/web/util/StudyViewFilterApplier.java +++ b/src/main/java/org/cbioportal/web/util/StudyViewFilterApplier.java @@ -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. @@ -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 sampleToSampleIdentifier = new Function() { public SampleIdentifier apply(Sample sample) { @@ -78,7 +135,7 @@ public SampleIdentifier apply(Sample sample) { }; public List apply(StudyViewFilter studyViewFilter) { - return this.cachedApply(studyViewFilter); + return this.getInstance().cachedApply(studyViewFilter); } @Cacheable( diff --git a/src/test/java/org/cbioportal/web/util/StudyViewFilterApplierTest.java b/src/test/java/org/cbioportal/web/util/StudyViewFilterApplierTest.java index ece4df04682..70275bccb53 100644 --- a/src/test/java/org/cbioportal/web/util/StudyViewFilterApplierTest.java +++ b/src/test/java/org/cbioportal/web/util/StudyViewFilterApplierTest.java @@ -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; @@ -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; @@ -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"; @@ -75,6 +98,9 @@ public class StudyViewFilterApplierTest { @InjectMocks private StudyViewFilterApplier studyViewFilterApplier; + + @Mock + private ApplicationContext applicationContext; @Mock private SampleService sampleService; @@ -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 studyIds = new ArrayList<>(); studyIds.add(STUDY_ID); studyIds.add(STUDY_ID);