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.
*