Skip to content

Commit

Permalink
Merge branch 'release/0005' into ALS-5000
Browse files Browse the repository at this point in the history
  • Loading branch information
Gcolon021 authored Oct 30, 2023
2 parents ffeac44 + 47b827b commit 4d08479
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 24 deletions.
16 changes: 12 additions & 4 deletions data/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
<version>1.0-SNAPSHOT</version>
</parent>

<properties>
<jackson.version>2.15.2</jackson.version>
</properties>

<artifactId>data</artifactId>

<name>data</name>
Expand All @@ -26,12 +30,16 @@
<artifactId>commons-csv</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>edu.harvard.hms.dbmi.avillach</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import java.io.Serializable;
import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class ColumnMeta implements Serializable{
Expand Down
1 change: 1 addition & 0 deletions docker/pic-sure-hpds/server.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<Host name="localhost" appBase="/.extract/webapps" unpackWARs="true"
autoDeploy="true">
<Context path="/" reloadable="true" />
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>
</Host>
</Engine>
</Service>
Expand Down
19 changes: 12 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<module>client-api</module>
</modules>
<properties>
<jackson.version>1.8.6</jackson.version>
<jackson.version>2.15.2</jackson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dockerfile-maven-version>1.4.10</dockerfile-maven-version>
</properties>
Expand Down Expand Up @@ -245,13 +245,18 @@
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
Expand All @@ -275,8 +280,8 @@
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,12 @@ private void addIdSetsForAnyRecordOf(List<String> anyRecordOfFilters, ArrayList<
addIdSetsForVariantSpecCategoryFilters(new String[]{"0/1", "1/1"}, path, patientsInScope, bucketCache);
return patientsInScope.stream();
} else {
return (Stream<Integer>) getCube(path).keyBasedIndex().stream();
try {
return (Stream<Integer>) getCube(path).keyBasedIndex().stream();
} catch (InvalidCacheLoadException e) {
// return an empty stream if this concept doesn't exist
return Stream.empty();
}
}
}).collect(Collectors.toSet());
filteredIdSets.add(anyRecordOfPatientSet);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package edu.harvard.hms.dbmi.avillach.hpds.processing;


import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import edu.harvard.hms.dbmi.avillach.hpds.data.genotype.FileBackedByteIndexedInfoStore;
import edu.harvard.hms.dbmi.avillach.hpds.data.phenotype.PhenoCube;
import edu.harvard.hms.dbmi.avillach.hpds.data.query.Query;
import edu.harvard.hms.dbmi.avillach.hpds.storage.FileBackedByteIndexedStorage;
import org.junit.Before;
Expand All @@ -12,6 +15,7 @@
import org.mockito.junit.MockitoJUnitRunner;

import java.util.*;
import java.util.concurrent.ExecutionException;

import static org.mockito.ArgumentMatchers.any;
import static org.junit.Assert.*;
Expand All @@ -33,6 +37,9 @@ public class AbstractProcessorTest {
@Mock
private PatientVariantJoinHandler patientVariantJoinHandler;

@Mock
private LoadingCache<String, PhenoCube<?>> mockLoadingCache;

public static final String GENE_WITH_VARIANT_KEY = "Gene_with_variant";
private static final String VARIANT_SEVERITY_KEY = "Variant_severity";
public static final List<String> EXAMPLE_GENES_WITH_VARIANT = List.of("CDH8", "CDH9", "CDH10");
Expand Down Expand Up @@ -61,7 +68,7 @@ public void setup() {
new TreeMap<>(),
new TreeSet<>()
),
null,
mockLoadingCache,
infoStores,
null,
variantService,
Expand Down Expand Up @@ -125,20 +132,87 @@ public void getPatientSubsetForQuery_twoVariantCategoryFilters_intersectFilters(
when(patientVariantJoinHandler.getPatientIdsForIntersectionOfVariantSets(any(), argumentCaptor.capture())).thenReturn(List.of(Set.of(42)));

Map<String, String[]> categoryVariantInfoFilters = Map.of(
GENE_WITH_VARIANT_KEY, new String[] {EXAMPLE_GENES_WITH_VARIANT.get(0)},
VARIANT_SEVERITY_KEY, new String[] {EXAMPLE_VARIANT_SEVERITIES.get(0)}
GENE_WITH_VARIANT_KEY, new String[] {EXAMPLE_GENES_WITH_VARIANT.get(0)},
VARIANT_SEVERITY_KEY, new String[] {EXAMPLE_VARIANT_SEVERITIES.get(0)}
);
Query.VariantInfoFilter variantInfoFilter = new Query.VariantInfoFilter();
variantInfoFilter.categoryVariantInfoFilters = categoryVariantInfoFilters;

List<Query.VariantInfoFilter> variantInfoFilters = List.of(variantInfoFilter);

Query query = new Query();
query.setVariantInfoFilters(variantInfoFilters);

TreeSet<Integer> patientSubsetForQuery = abstractProcessor.getPatientSubsetForQuery(query);
assertFalse(patientSubsetForQuery.isEmpty());
// Expected result is the intersection of the two filters
assertEquals(argumentCaptor.getValue(), new SparseVariantIndex(Set.of(4, 6)));
}

@Test
public void getPatientSubsetForQuery_anyRecordOf_applyOrLogic() throws ExecutionException {
when(variantIndexCache.get(GENE_WITH_VARIANT_KEY, EXAMPLE_GENES_WITH_VARIANT.get(0))).thenReturn(new SparseVariantIndex(Set.of(2, 4, 6)));
when(variantIndexCache.get(VARIANT_SEVERITY_KEY, EXAMPLE_VARIANT_SEVERITIES.get(0))).thenReturn(new SparseVariantIndex(Set.of(4, 5, 6, 7)));

ArgumentCaptor<VariantIndex> argumentCaptor = ArgumentCaptor.forClass(VariantIndex.class);
ArgumentCaptor<List<Set<Integer>>> listArgumentCaptor = ArgumentCaptor.forClass(List.class);
when(patientVariantJoinHandler.getPatientIdsForIntersectionOfVariantSets(listArgumentCaptor.capture(), argumentCaptor.capture())).thenReturn(List.of(Set.of(42)));

Map<String, String[]> categoryVariantInfoFilters = Map.of(
GENE_WITH_VARIANT_KEY, new String[] {EXAMPLE_GENES_WITH_VARIANT.get(0)},
VARIANT_SEVERITY_KEY, new String[] {EXAMPLE_VARIANT_SEVERITIES.get(0)}
);
Query.VariantInfoFilter variantInfoFilter = new Query.VariantInfoFilter();
variantInfoFilter.categoryVariantInfoFilters = categoryVariantInfoFilters;

List<Query.VariantInfoFilter> variantInfoFilters = List.of(variantInfoFilter);

PhenoCube mockPhenoCube = mock(PhenoCube.class);
when(mockPhenoCube.keyBasedIndex()).thenReturn(List.of(42, 101));
when(mockLoadingCache.get("good concept")).thenReturn(mockPhenoCube);
when(mockLoadingCache.get("bad concept")).thenThrow(CacheLoader.InvalidCacheLoadException.class);

Query query = new Query();
query.setVariantInfoFilters(variantInfoFilters);
query.setAnyRecordOf(List.of("good concept", "bad concept"));

TreeSet<Integer> patientSubsetForQuery = abstractProcessor.getPatientSubsetForQuery(query);
assertFalse(patientSubsetForQuery.isEmpty());
// Expected result is the intersection of the two filters
assertEquals(argumentCaptor.getValue(), new SparseVariantIndex(Set.of(4, 6)));
assertEquals(listArgumentCaptor.getValue().get(0), Set.of(42, 101));
}



@Test
public void getPatientSubsetForQuery_anyRecordOfInvalidKey_returnEmpty() throws ExecutionException {
when(variantIndexCache.get(GENE_WITH_VARIANT_KEY, EXAMPLE_GENES_WITH_VARIANT.get(0))).thenReturn(new SparseVariantIndex(Set.of(2, 4, 6)));
when(variantIndexCache.get(VARIANT_SEVERITY_KEY, EXAMPLE_VARIANT_SEVERITIES.get(0))).thenReturn(new SparseVariantIndex(Set.of(4, 5, 6, 7)));

ArgumentCaptor<VariantIndex> argumentCaptor = ArgumentCaptor.forClass(VariantIndex.class);
ArgumentCaptor<List<Set<Integer>>> listArgumentCaptor = ArgumentCaptor.forClass(List.class);
when(patientVariantJoinHandler.getPatientIdsForIntersectionOfVariantSets(listArgumentCaptor.capture(), argumentCaptor.capture())).thenReturn(List.of(Set.of(42)));

Map<String, String[]> categoryVariantInfoFilters = Map.of(
GENE_WITH_VARIANT_KEY, new String[] {EXAMPLE_GENES_WITH_VARIANT.get(0)},
VARIANT_SEVERITY_KEY, new String[] {EXAMPLE_VARIANT_SEVERITIES.get(0)}
);
Query.VariantInfoFilter variantInfoFilter = new Query.VariantInfoFilter();
variantInfoFilter.categoryVariantInfoFilters = categoryVariantInfoFilters;

List<Query.VariantInfoFilter> variantInfoFilters = List.of(variantInfoFilter);

when(mockLoadingCache.get("bad concept")).thenThrow(CacheLoader.InvalidCacheLoadException.class);

Query query = new Query();
query.setVariantInfoFilters(variantInfoFilters);
query.setAnyRecordOf(List.of("bad concept"));

TreeSet<Integer> patientSubsetForQuery = abstractProcessor.getPatientSubsetForQuery(query);
assertFalse(patientSubsetForQuery.isEmpty());
// Expected result is the intersection of the two filters
assertEquals(argumentCaptor.getValue(), new SparseVariantIndex(Set.of(4, 6)));
assertEquals(listArgumentCaptor.getValue().get(0), Set.of());
}
}
16 changes: 10 additions & 6 deletions service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,16 @@
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
Expand All @@ -69,8 +73,8 @@
<artifactId>activation</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
Expand Down
2 changes: 1 addition & 1 deletion service/src/main/resources/jaxrs-context.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<bean class="org.apache.cxf.transport.common.gzip.GZIPOutInterceptor" />
</jaxrs:outInterceptors>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
</jaxrs:providers>
</jaxrs:server>
</beans>
8 changes: 8 additions & 0 deletions war/src/main/webapp/WEB-INF/web.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,12 @@
<http-only>true</http-only>
</cookie-config>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/error-404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error-500.html</location>
</error-page>
</web-app>

0 comments on commit 4d08479

Please sign in to comment.