From 06517c8d99d9b379d238ccfb4902c4cc27f6b69f Mon Sep 17 00:00:00 2001 From: Riley Date: Mon, 17 Dec 2018 13:25:34 -0500 Subject: [PATCH 1/6] fixed null pointer check on parameters. Added better exsitence check using context.resolveParameterRef. --- .../java/org/opencds/cqf/cql/execution/Executor.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opencds/cqf/cql/execution/Executor.java b/src/main/java/org/opencds/cqf/cql/execution/Executor.java index 1fd3855..eb2200f 100644 --- a/src/main/java/org/opencds/cqf/cql/execution/Executor.java +++ b/src/main/java/org/opencds/cqf/cql/execution/Executor.java @@ -252,9 +252,12 @@ public String evaluateCql(String requestData) throws JAXBException, IOException, registerProviders(context, terminologyServiceUri, terminologyUser, terminologyPass, dataServiceUri, dataUser, dataPass); JSONArray resultArr = new JSONArray(); - for(ParameterDef def : library.getParameters().getDef()) { - library.getParameters().evaluate(context); - context.setParameter(library.getLocalId(), def.getName(), json.get(def.getName())); + if(library.getParameters() != null) { + for(ParameterDef def:library.getParameters().getDef()) { + if(context.resolveParameterRef(library.getLocalId(), def.getName()) == null) { + context.setParameter(library.getLocalId(), def.getName(), json.get(def.getName())); + } + } } for (ExpressionDef def : library.getStatements().getDef()) { context.enterContext(def.getContext()); From 014bfa0bad7e0ee53a57ace2a9246f8182371d50 Mon Sep 17 00:00:00 2001 From: Riley Date: Mon, 17 Dec 2018 18:20:08 -0500 Subject: [PATCH 2/6] Fixed a bad resolveParameterRef --- src/main/java/org/opencds/cqf/cql/execution/Executor.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opencds/cqf/cql/execution/Executor.java b/src/main/java/org/opencds/cqf/cql/execution/Executor.java index 30cbe5e..588b7cd 100644 --- a/src/main/java/org/opencds/cqf/cql/execution/Executor.java +++ b/src/main/java/org/opencds/cqf/cql/execution/Executor.java @@ -22,6 +22,8 @@ import org.opencds.cqf.cql.data.fhir.FhirBundleCursorStu3; import org.opencds.cqf.cql.data.fhir.FhirDataProviderStu3; import org.opencds.cqf.cql.terminology.fhir.FhirTerminologyProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -40,7 +42,7 @@ */ @Path("evaluate") public class Executor { - + private Map> locations = new HashMap<>(); // for future use @@ -220,6 +222,7 @@ public String evaluateCql(String requestData) throws JAXBException, IOException, String patientId = (String) json.get("patientId"); json.remove("patientId"); + CqlTranslator translator; try { translator = getTranslator(code, getLibraryManager(), getModelManager()); @@ -254,7 +257,7 @@ public String evaluateCql(String requestData) throws JAXBException, IOException, JSONArray resultArr = new JSONArray(); if(library.getParameters() != null) { for(ParameterDef def:library.getParameters().getDef()) { - if(context.resolveParameterRef(library.getLocalId(), def.getName()) == null) { + if(context.resolveParameterRef(library.getLocalId(), def.getName()) != null) { context.setParameter(library.getLocalId(), def.getName(), json.get(def.getName())); } } From 21e4f1b59aeb21f4643dc8c24e86a0934dee139f Mon Sep 17 00:00:00 2001 From: Riley Date: Thu, 20 Dec 2018 12:28:52 -0500 Subject: [PATCH 3/6] Fixed an issue with parameter parsing. Only handling number,datetime,time,code, and quantity. --- .../opencds/cqf/cql/execution/Executor.java | 39 +++++++++++-------- .../execution/ExecutorParameterParser.java | 37 ++++++++++++++++++ 2 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java diff --git a/src/main/java/org/opencds/cqf/cql/execution/Executor.java b/src/main/java/org/opencds/cqf/cql/execution/Executor.java index 588b7cd..af3d5d7 100644 --- a/src/main/java/org/opencds/cqf/cql/execution/Executor.java +++ b/src/main/java/org/opencds/cqf/cql/execution/Executor.java @@ -1,8 +1,23 @@ package org.opencds.cqf.cql.execution; -import ca.uhn.fhir.context.FhirContext; -import ca.uhn.fhir.rest.api.EncodingEnum; -import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.xml.bind.JAXBException; + import org.cqframework.cql.cql2elm.CqlTranslator; import org.cqframework.cql.cql2elm.CqlTranslatorException; import org.cqframework.cql.cql2elm.LibraryManager; @@ -12,7 +27,6 @@ import org.cqframework.cql.elm.execution.Library; import org.cqframework.cql.elm.execution.ParameterDef; import org.cqframework.cql.elm.tracking.TrackBack; -import org.hl7.fhir.instance.model.api.IAnyResource; import org.hl7.fhir.instance.model.api.IBaseResource; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -22,20 +36,10 @@ import org.opencds.cqf.cql.data.fhir.FhirBundleCursorStu3; import org.opencds.cqf.cql.data.fhir.FhirDataProviderStu3; import org.opencds.cqf.cql.terminology.fhir.FhirTerminologyProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBException; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.*; +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.rest.api.EncodingEnum; +import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum; /** * Created by Christopher on 1/13/2017. @@ -228,6 +232,7 @@ public String evaluateCql(String requestData) throws JAXBException, IOException, translator = getTranslator(code, getLibraryManager(), getModelManager()); } catch (IllegalArgumentException iae) { + iae.printStackTrace(); JSONObject result = new JSONObject(); JSONArray resultArr = new JSONArray(); result.put("translation-error", iae.getMessage()); diff --git a/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java b/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java new file mode 100644 index 0000000..5af2741 --- /dev/null +++ b/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java @@ -0,0 +1,37 @@ +package org.opencds.cqf.cql.execution; + +import org.cqframework.cql.elm.execution.ParameterDef; + +public class ExecutorParameterParser { + public Object parseParameter(String parameterText, ParameterDef paramDef) { + + switch(paramDef.getParameterType().getLocalPart()) { + case "Boolean": + case "Integer": + case "Decimal": + case "String": + break; + case "DateTime": + break; + case "Time": + break; + case "Code": + break; + case "Concept": + break; + case "Quantity": + break; + case "ValueSet": + break; + case "Ratio": + break; + case "Tuple": + break; + case "List": + break; + case "Interval": + break; + } + return new Object(); + } +} From d85803e9d7bbe2eea46fcbf28448ef25d5905b04 Mon Sep 17 00:00:00 2001 From: Riley Date: Thu, 20 Dec 2018 12:29:55 -0500 Subject: [PATCH 4/6] Removed extraneous parameter parser. --- .../execution/ExecutorParameterParser.java | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java diff --git a/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java b/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java deleted file mode 100644 index 5af2741..0000000 --- a/src/main/java/org/opencds/cqf/cql/execution/ExecutorParameterParser.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.opencds.cqf.cql.execution; - -import org.cqframework.cql.elm.execution.ParameterDef; - -public class ExecutorParameterParser { - public Object parseParameter(String parameterText, ParameterDef paramDef) { - - switch(paramDef.getParameterType().getLocalPart()) { - case "Boolean": - case "Integer": - case "Decimal": - case "String": - break; - case "DateTime": - break; - case "Time": - break; - case "Code": - break; - case "Concept": - break; - case "Quantity": - break; - case "ValueSet": - break; - case "Ratio": - break; - case "Tuple": - break; - case "List": - break; - case "Interval": - break; - } - return new Object(); - } -} From 85cfb82a6e8a3ba56556836cc5a8cb0eb24aa786 Mon Sep 17 00:00:00 2001 From: Riley Date: Tue, 19 Feb 2019 11:35:24 -0500 Subject: [PATCH 5/6] Reworked dockerfile. Added a generic cqlVersion for cql dependencies and updated it to 1.2.52 --- Dockerfile | 13 +++++++++---- pom.xml | 10 ++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 87034db..2574dc5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,11 @@ -#Use the tomcat image as a base -FROM tomcat:8.5.13-jre8 +FROM maven:3.6.0-jdk-8 AS builder +WORKDIR /usr/src/cql_src +ADD . . +RUN git clone https://github.com/DBCG/cql_engine.git +RUN mvn clean install -DskipTests -f /usr/src/cql_src/cql_engine/cql-engine +RUN mvn clean install -DskipTests -f /usr/src/cql_src +FROM tomcat:latest #move the WAR for contesa to the webapps directory -COPY ./target/CQLExecSvc-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/CQLExecSvc-1.0-SNAPSHOT.war -COPY ./src/main/resources/* /usr/local/tomcat/src/main/resources/ +COPY --from=builder /usr/src/cql_src/target/CQLExecSvc-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/CQLExecSvc-1.0-SNAPSHOT.war +COPY --from=builder /usr/src/cql_src/src/main/resources/* /usr/local/tomcat/src/main/resources/ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2025d64..fae1156 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ UTF-8 + 1.2.52-SNAPSHOT @@ -32,12 +33,12 @@ org.opencds.cqf cql-engine - 1.2.50-SNAPSHOT + ${cqlVersion} org.opencds.cqf cql-engine-fhir - 1.2.50-SNAPSHOT + ${cqlVersion} org.glassfish.jersey.containers @@ -94,6 +95,11 @@ jersey-hk2 2.26 + + org.slf4j + slf4j-jdk14 + 1.7.25 + From f725f6d6471739278d64250709c43fc9e4334fc1 Mon Sep 17 00:00:00 2001 From: Riley Date: Tue, 19 Feb 2019 12:01:24 -0500 Subject: [PATCH 6/6] Added Jenkinsfile --- Jenkinsfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..e69de29