diff --git a/core/metrics/pom.xml b/core/metrics/pom.xml index a11affb..d99faf9 100644 --- a/core/metrics/pom.xml +++ b/core/metrics/pom.xml @@ -62,6 +62,11 @@ matching-notification-api ${patientNetwork.version} + + ${project.groupId} + patient-data-default-impl + ${phenotips.version} + javax.ws.rs jsr311-api diff --git a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfGenesProvider.java b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfGenesProvider.java index eed1f9b..84ca2d6 100644 --- a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfGenesProvider.java +++ b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfGenesProvider.java @@ -49,6 +49,12 @@ public Object compute() Session session = null; try { session = this.sessionFactory.getSessionFactory().openSession(); + + String candidateStatuses = ""; + GENE_STATUS_VALUES.stream() + .filter(status -> status.startsWith("candidate")) + .forEach(status -> candidateStatuses.concat("'" + status + "',")); + Query q = session.createQuery("select count (geneObj.name) from " + HQL_BASE_MME_PATIENT_FILTER_FROM + ", BaseObject geneObj, StringProperty geneStatusProp" @@ -56,7 +62,7 @@ public Object compute() + HQL_BASE_MME_PATIENT_FILTER_WHERE + " and geneObj.name = doc.fullName and geneObj.className = 'PhenoTips.GeneClass'" + " and geneStatusProp.id.id = geneObj.id and geneStatusProp.id.name = 'status'" - + " and geneStatusProp.value in ('candidate', 'solved')"); + + " and geneStatusProp.value in (" + candidateStatuses + " 'solved')"); return q.uniqueResult(); } finally { if (session != null) { diff --git a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueGenesProvider.java b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueGenesProvider.java index 4723b52..70a939d 100644 --- a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueGenesProvider.java +++ b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueGenesProvider.java @@ -50,6 +50,11 @@ public Object compute() try { session = this.sessionFactory.getSessionFactory().openSession(); + String candidateStatuses = ""; + GENE_STATUS_VALUES.stream() + .filter(status -> status.startsWith("candidate")) + .forEach(status -> candidateStatuses.concat("'" + status + "',")); + Query q = session.createQuery( "select count (distinct geneIDProp.value) from " + HQL_BASE_MME_PATIENT_FILTER_FROM @@ -58,7 +63,7 @@ public Object compute() + HQL_BASE_MME_PATIENT_FILTER_WHERE + " and geneObj.name = doc.fullName and geneObj.className = 'PhenoTips.GeneClass'" + " and geneStatusProp.id.id = geneObj.id and geneStatusProp.id.name = 'status'" - + " and geneStatusProp.value in ('candidate', 'solved')" + + " and geneStatusProp.value in (" + candidateStatuses + " 'solved')" + " and geneIDProp.id.id = geneObj.id and geneIDProp.id.name = 'gene'"); return q.uniqueResult(); } finally { diff --git a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueVariantsProvider.java b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueVariantsProvider.java index 438f126..0eb4f11 100644 --- a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueVariantsProvider.java +++ b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfUniqueVariantsProvider.java @@ -50,6 +50,12 @@ public Object compute() Session session = null; try { session = this.sessionFactory.getSessionFactory().openSession(); + + String candidateStatuses = ""; + GENE_STATUS_VALUES.stream() + .filter(status -> status.startsWith("candidate")) + .forEach(status -> candidateStatuses.concat("'" + status + "',")); + Query q = session.createQuery("select count (distinct variantIDProp.value) from " + HQL_BASE_MME_PATIENT_FILTER_FROM + ", BaseObject geneObj, BaseObject variantObj, StringProperty geneStatusProp" @@ -58,7 +64,7 @@ public Object compute() + " and geneObj.name = doc.fullName and geneObj.className = 'PhenoTips.GeneClass'" + " and variantObj.name = doc.fullName and variantObj.className = 'PhenoTips.GeneVariantClass'" + " and geneStatusProp.id.id = geneObj.id and geneStatusProp.id.name = 'status'" - + " and geneStatusProp.value in ('candidate', 'solved')" + + " and geneStatusProp.value in (" + candidateStatuses + " 'solved')" + " and variantIDProp.id.id = variantObj.id and variantIDProp.id.name = 'cdna'" + " and variantGeneProp.id.id = variantObj.id and variantGeneProp.id.name = 'gene'" + " and geneIDProp.id.id = geneObj.id and geneIDProp.id.name = 'gene'" diff --git a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfVariantsProvider.java b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfVariantsProvider.java index 0c608c4..8a9f89c 100644 --- a/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfVariantsProvider.java +++ b/core/metrics/src/main/java/org/phenotips/remote/metrics/internal/providers/NumberOfVariantsProvider.java @@ -50,6 +50,12 @@ public Object compute() Session session = null; try { session = this.sessionFactory.getSessionFactory().openSession(); + + String candidateStatuses = ""; + GENE_STATUS_VALUES.stream() + .filter(status -> status.startsWith("candidate")) + .forEach(status -> candidateStatuses.concat("'" + status + "',")); + Query q = session.createQuery("select count (variantObj.name) from " + HQL_BASE_MME_PATIENT_FILTER_FROM + ", BaseObject geneObj, BaseObject variantObj, StringProperty geneStatusProp" @@ -58,7 +64,7 @@ public Object compute() + " and geneObj.name = doc.fullName and geneObj.className = 'PhenoTips.GeneClass'" + " and variantObj.name = doc.fullName and variantObj.className = 'PhenoTips.GeneVariantClass'" + " and geneStatusProp.id.id = geneObj.id and geneStatusProp.id.name = 'status'" - + " and geneStatusProp.value in ('candidate', 'solved')" + + " and geneStatusProp.value in (" + candidateStatuses + " 'solved')" + " and variantGeneProp.id.id = variantObj.id and variantGeneProp.id.name = 'gene'" + " and geneIDProp.id.id = geneObj.id and geneIDProp.id.name = 'gene'" + " and geneIDProp.value = variantGeneProp.value"); diff --git a/core/metrics/src/main/java/org/phenotips/remote/metrics/spi/MetricProvider.java b/core/metrics/src/main/java/org/phenotips/remote/metrics/spi/MetricProvider.java index 9cf6f13..8a00200 100644 --- a/core/metrics/src/main/java/org/phenotips/remote/metrics/spi/MetricProvider.java +++ b/core/metrics/src/main/java/org/phenotips/remote/metrics/spi/MetricProvider.java @@ -17,10 +17,13 @@ */ package org.phenotips.remote.metrics.spi; +import org.phenotips.data.internal.PhenoTipsGene; import org.phenotips.remote.metrics.MetricsRequestHandler; import org.xwiki.component.annotation.Role; +import java.util.List; + /** * Provides a specific metric to be included in a {@link MetricsRequestHandler#getMetrics() metrics response}. The * produced metric value will be included in the response JSON, inside the {@code metrics} map, under the same name as @@ -50,6 +53,8 @@ public interface MetricProvider + " and visibilityProp.id.id = visibilityObj.id and visibilityProp.id.name = 'visibility'" + " and visibilityProp.value <> 'private'"; + List GENE_STATUS_VALUES = PhenoTipsGene.getStatusValues(); + /** * Compute and return a specific metric to be included in the response to a MME metrics query. *