diff --git a/engine.fhir/pom.xml b/engine.fhir/pom.xml
index a42197058..6fafd42f3 100644
--- a/engine.fhir/pom.xml
+++ b/engine.fhir/pom.xml
@@ -41,10 +41,6 @@
jakarta.xml.bind-api
-
- ca.uhn.hapi.fhir
- hapi-fhir-client
-
ca.uhn.hapi.fhir
hapi-fhir-structures-dstu2
@@ -86,7 +82,13 @@
org.eclipse.persistence.moxy
test
-
+
+
+ org.opencds.cqf.cql
+ engine.jackson
+ 2.0.0-SNAPSHOT
+ test
+
info.cqframework
cql-to-elm
@@ -112,6 +114,13 @@
elm-jackson
test
+
+
+ ca.uhn.hapi.fhir
+ hapi-fhir-client
+ test
+
+
diff --git a/engine.fhir/src/test/java/org/hl7/fhirpath/TestLibraryLoader.java b/engine.fhir/src/test/java/org/hl7/fhirpath/TestLibraryLoader.java
index 86d58176e..602599364 100644
--- a/engine.fhir/src/test/java/org/hl7/fhirpath/TestLibraryLoader.java
+++ b/engine.fhir/src/test/java/org/hl7/fhirpath/TestLibraryLoader.java
@@ -2,6 +2,7 @@
import java.io.IOException;
import java.io.StringReader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -13,19 +14,9 @@
import org.cqframework.cql.cql2elm.model.CompiledLibrary;
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.execution.VersionedIdentifier;
-import org.hl7.cql_annotations.r1.CqlToElmBase;
-import org.opencds.cqf.cql.engine.elm.serialization.CqlToElmBaseMixIn;
-import org.opencds.cqf.cql.engine.execution.JsonCqlLibraryReader;
+import org.cqframework.cql.elm.serializing.ElmLibraryWriterFactory;
import org.opencds.cqf.cql.engine.execution.LibraryLoader;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
public class TestLibraryLoader implements LibraryLoader {
@@ -73,25 +64,16 @@ private Library loadLibrary(VersionedIdentifier libraryIdentifier) {
CompiledLibrary compiledLibrary = libraryManager.resolveLibrary(identifier, CqlTranslatorOptions.defaultOptions(), errors);
String json;
try {
- ObjectMapper mapper = JsonMapper.builder()
- .defaultMergeable(true)
- .enable(SerializationFeature.WRAP_ROOT_VALUE)
- .enable(SerializationFeature.INDENT_OUTPUT)
- .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- .enable(MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL)
- .defaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.NON_NULL))
- .addModule(new JaxbAnnotationModule())
- .addMixIn(CqlToElmBase.class, CqlToElmBaseMixIn.class)
- .build();
-
- json = mapper.writeValueAsString(compiledLibrary.getLibrary());
- } catch (JsonProcessingException e) {
+ StringWriter writer = new StringWriter();
+ ElmLibraryWriterFactory.getWriter("application/elm+json").write(compiledLibrary.getLibrary(), writer);
+ json = writer.getBuffer().toString();
+ } catch (IOException e) {
throw new RuntimeException(String.format("Errors encountered while loading library %s: %s", libraryIdentifier.getId(), e.getMessage()));
}
Library library = null;
try {
- library = JsonCqlLibraryReader.read(new StringReader(json));
+ library = new JsonCqlLibraryReader().read(new StringReader(json));
} catch (IOException e) {
throw new RuntimeException(String.format("Errors encountered while loading library %s: %s", libraryIdentifier.getId(), e.getMessage()));
}
diff --git a/engine.fhir/src/test/java/org/hl7/fhirpath/TranslatorHelper.java b/engine.fhir/src/test/java/org/hl7/fhirpath/TranslatorHelper.java
index 0c2386386..0052b187b 100644
--- a/engine.fhir/src/test/java/org/hl7/fhirpath/TranslatorHelper.java
+++ b/engine.fhir/src/test/java/org/hl7/fhirpath/TranslatorHelper.java
@@ -7,7 +7,7 @@
import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
import org.fhir.ucum.UcumService;
-import org.opencds.cqf.cql.engine.execution.JsonCqlLibraryReader;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
import org.opencds.cqf.cql.engine.execution.LibraryLoader;
import java.io.IOException;
@@ -60,7 +60,7 @@ public Library translate(String cql) throws UcumException {
String json = translator.toJson();
try {
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new JsonCqlLibraryReader().read(new StringReader(json));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
diff --git a/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/FhirExecutionTestBase.java b/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/FhirExecutionTestBase.java
index 6a926c88f..32822f7cd 100644
--- a/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/FhirExecutionTestBase.java
+++ b/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/FhirExecutionTestBase.java
@@ -11,10 +11,10 @@
import org.fhir.ucum.UcumException;
import org.fhir.ucum.UcumService;
import org.opencds.cqf.cql.engine.data.CompositeDataProvider;
-import org.opencds.cqf.cql.engine.execution.JsonCqlLibraryReader;
import org.opencds.cqf.cql.engine.fhir.model.*;
import org.opencds.cqf.cql.engine.fhir.retrieve.RestFhirRetrieveProvider;
import org.opencds.cqf.cql.engine.fhir.searchparam.SearchParameterResolver;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
@@ -106,14 +106,14 @@ public void beforeEachTestMethod() throws JAXBException, IOException, UcumExcept
for (Map.Entry entry : libraryManager.getCompiledLibraries().entrySet()) {
String jsonContent = CqlTranslator.convertToJson(entry.getValue().getLibrary());
StringReader sr = new StringReader(jsonContent);
- libraries.put(entry.getKey(), JsonCqlLibraryReader.read(sr));
+ libraries.put(entry.getKey(), new JsonCqlLibraryReader().read(sr));
if (entry.getKey().equals(fileName)) {
library = libraries.get(entry.getKey());
}
}
if (library == null) {
- library = JsonCqlLibraryReader.read(new StringReader(translator.toJson()));
+ library = new JsonCqlLibraryReader().read(new StringReader(translator.toJson()));
libraries.put(fileName, library);
}
} catch (IOException e) {
diff --git a/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/TestLibraryLoader.java b/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/TestLibraryLoader.java
index 2d3d08609..1898b3196 100644
--- a/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/TestLibraryLoader.java
+++ b/engine.fhir/src/test/java/org/opencds/cqf/cql/engine/fhir/data/TestLibraryLoader.java
@@ -1,11 +1,11 @@
package org.opencds.cqf.cql.engine.fhir.data;
+import java.util.Map;
+
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.execution.VersionedIdentifier;
import org.opencds.cqf.cql.engine.execution.LibraryLoader;
-import java.util.Map;
-
public class TestLibraryLoader implements LibraryLoader {
private Map libraries;
diff --git a/engine.jackson/pom.xml b/engine.jackson/pom.xml
new file mode 100644
index 000000000..5f449d81d
--- /dev/null
+++ b/engine.jackson/pom.xml
@@ -0,0 +1,118 @@
+
+
+ 4.0.0
+
+
+ org.opencds.cqf.cql
+ engine.shared
+ 2.0.0-SNAPSHOT
+
+
+ engine.jackson
+ jar
+
+ engine.jackson
+ CQL Engine Jackson Readers
+ https://github.com/DBCG/cql_engine/tree/master/engine.jaxb
+
+
+
+ org.opencds.cqf.cql
+ engine
+ 2.0.0-SNAPSHOT
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jaxb-annotations
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+ ${jackson.version}
+
+
+
+
+ xpp3
+ xpp3
+ test
+
+
+ xpp3
+ xpp3_xpath
+ test
+
+
+
+ info.cqframework
+ cql-to-elm
+ test
+
+
+ info.cqframework
+ model-jackson
+ test
+
+
+ info.cqframework
+ elm-jackson
+ test
+
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ jacoco-check
+ verify
+
+ check
+
+
+
+
+
+
+ **/org/cqframework/**
+
+
+
+ BUNDLE
+
+
+ LINE
+ COVEREDRATIO
+ 0.40
+
+
+
+
+
+
+
+
+
+
diff --git a/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/CqlLibraryReaderProvider.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/CqlLibraryReaderProvider.java
new file mode 100644
index 000000000..90ff92d04
--- /dev/null
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/CqlLibraryReaderProvider.java
@@ -0,0 +1,18 @@
+package org.opencds.cqf.cql.engine.serializing.jackson;
+
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class CqlLibraryReaderProvider implements org.opencds.cqf.cql.engine.serializing.CqlLibraryReaderProvider {
+ @Override
+ public CqlLibraryReader create(String contentType) {
+ if (contentType == null) {
+ contentType = "application/elm+json";
+ }
+
+ switch (contentType) {
+ case "application/elm+xml": return new XmlCqlLibraryReader();
+ case "application/elm+json":
+ default: return new JsonCqlLibraryReader();
+ }
+ }
+}
diff --git a/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlLibraryReader.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlLibraryReader.java
new file mode 100644
index 000000000..e430355de
--- /dev/null
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlLibraryReader.java
@@ -0,0 +1,41 @@
+package org.opencds.cqf.cql.engine.serializing.jackson;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class JsonCqlLibraryReader implements CqlLibraryReader {
+
+ public JsonCqlLibraryReader() {
+ }
+
+ public Library read(File file) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(file, Library.class);
+ }
+
+ public Library read(URL url) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(url, Library.class);
+ }
+
+ public Library read(URI uri) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(uri.toURL(), Library.class);
+ }
+
+ public Library read(String string) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(string, Library.class);
+ }
+
+ public Library read(InputStream inputStream) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(inputStream, Library.class);
+ }
+
+ public Library read(Reader reader) throws IOException {
+ return JsonCqlMapper.getMapper().readValue(reader, Library.class);
+ }
+}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReader.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlMapper.java
similarity index 52%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReader.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlMapper.java
index 465e339ef..53e1012f9 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReader.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/JsonCqlMapper.java
@@ -1,12 +1,10 @@
-package org.opencds.cqf.cql.engine.execution;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URI;
-import java.net.URL;
+package org.opencds.cqf.cql.engine.serializing.jackson;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import org.cqframework.cql.elm.execution.CodeSystemRef;
import org.cqframework.cql.elm.execution.CqlToElmBase;
import org.cqframework.cql.elm.execution.Element;
@@ -15,22 +13,9 @@
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.execution.TypeSpecifier;
import org.opencds.cqf.cql.engine.elm.execution.Executable;
-import org.opencds.cqf.cql.engine.elm.serialization.CodeSystemRefMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.CqlToElmBaseMixIn;
-import org.opencds.cqf.cql.engine.elm.serialization.ElementMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.ExecutableMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.ExpressionDefMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.ExpressionMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.LibraryMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.TypeSpecifierMixin;
-
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.opencds.cqf.cql.engine.serializing.jackson.mixins.*;
-public class JsonCqlLibraryReader {
+public class JsonCqlMapper {
private static final JsonMapper mapper = JsonMapper.builder()
.defaultMergeable(true)
.enable(SerializationFeature.INDENT_OUTPUT)
@@ -50,30 +35,7 @@ public class JsonCqlLibraryReader {
.addMixIn(Executable.class, ExecutableMixin.class)
.build();
- private JsonCqlLibraryReader() {
- }
-
- public static Library read(File file) throws IOException {
- return mapper.readValue(file, Library.class);
- }
-
- public static Library read(URL url) throws IOException {
- return mapper.readValue(url, Library.class);
- }
-
- public static Library read(URI uri) throws IOException {
- return mapper.readValue(uri.toURL(), Library.class);
- }
-
- public static Library read(String string) throws IOException {
- return mapper.readValue(string, Library.class);
- }
-
- public static Library read(InputStream inputStream) throws IOException {
- return mapper.readValue(inputStream, Library.class);
- }
-
- public static Library read(Reader reader) throws IOException {
- return mapper.readValue(reader, Library.class);
+ public static JsonMapper getMapper() {
+ return mapper;
}
}
diff --git a/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlLibraryReader.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlLibraryReader.java
new file mode 100644
index 000000000..9ae2c90ac
--- /dev/null
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlLibraryReader.java
@@ -0,0 +1,41 @@
+package org.opencds.cqf.cql.engine.serializing.jackson;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class XmlCqlLibraryReader implements CqlLibraryReader {
+
+ public XmlCqlLibraryReader() {
+ }
+
+ public Library read(File file) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(file, Library.class);
+ }
+
+ public Library read(URL url) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(url, Library.class);
+ }
+
+ public Library read(URI uri) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(uri.toURL(), Library.class);
+ }
+
+ public Library read(String string) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(string, Library.class);
+ }
+
+ public Library read(InputStream inputStream) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(inputStream, Library.class);
+ }
+
+ public Library read(Reader reader) throws IOException {
+ return XmlCqlMapper.getMapper().readValue(reader, Library.class);
+ }
+}
diff --git a/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlMapper.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlMapper.java
new file mode 100644
index 000000000..e23310c61
--- /dev/null
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/XmlCqlMapper.java
@@ -0,0 +1,46 @@
+package org.opencds.cqf.cql.engine.serializing.jackson;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.cqframework.cql.elm.execution.CodeSystemRef;
+import org.cqframework.cql.elm.execution.CqlToElmBase;
+import org.cqframework.cql.elm.execution.Element;
+import org.cqframework.cql.elm.execution.Expression;
+import org.cqframework.cql.elm.execution.ExpressionDef;
+import org.cqframework.cql.elm.execution.TypeSpecifier;
+import org.opencds.cqf.cql.engine.elm.execution.Executable;
+import org.opencds.cqf.cql.engine.serializing.jackson.mixins.*;
+
+public class XmlCqlMapper {
+ private static final XmlMapper mapper = XmlMapper.builder()
+ .defaultUseWrapper(true)
+ .defaultMergeable(true)
+ .enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION)
+ .enable(ToXmlGenerator.Feature.WRITE_XML_1_1)
+ .enable(SerializationFeature.INDENT_OUTPUT)
+ .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+ .enable(MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL)
+ .defaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.NON_NULL))
+ .addModule(new JaxbAnnotationModule())
+ //.addMixIn(Library.class, LibraryMixin.class) // Some case sensitivity issue in the name [L]ibrary
+ // The ordering here of the mix ins for
+ // ExpressionDef -> CodeSystemRef -> Expression -> Element matters,
+ // so the mix-ins match most specific to least
+ .addMixIn(ExpressionDef.class, ExpressionDefMixin.class)
+ .addMixIn(CodeSystemRef.class, CodeSystemRefMixin.class)
+ .addMixIn(Expression.class, ExpressionMixin.class)
+ .addMixIn(TypeSpecifier.class, TypeSpecifierMixin.class)
+ .addMixIn(CqlToElmBase.class, CqlToElmBaseMixIn.class)
+ .addMixIn(Element.class, ElementMixin.class)
+ .addMixIn(Executable.class, ExecutableMixin.class)
+ .build();
+
+ public static XmlMapper getMapper() {
+ return mapper;
+ }
+}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CodeSystemRefMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CodeSystemRefMixin.java
similarity index 89%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CodeSystemRefMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CodeSystemRefMixin.java
index 18e79570e..502201dd5 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CodeSystemRefMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CodeSystemRefMixin.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import org.opencds.cqf.cql.engine.elm.execution.CodeSystemRefEvaluator;
diff --git a/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CqlToElmBaseMixIn.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CqlToElmBaseMixIn.java
new file mode 100644
index 000000000..a2b302660
--- /dev/null
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/CqlToElmBaseMixIn.java
@@ -0,0 +1,18 @@
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.cqframework.cql.elm.execution.Annotation;
+import org.cqframework.cql.elm.execution.CqlToElmError;
+import org.cqframework.cql.elm.execution.CqlToElmInfo;
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type")
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = CqlToElmInfo.class, name = "a:CqlToElmInfo"),
+ @JsonSubTypes.Type(value = CqlToElmError.class, name = "a:CqlToElmError"),
+ @JsonSubTypes.Type(value = Annotation.class, name = "a:Annotation")
+})
+public interface CqlToElmBaseMixIn {}
\ No newline at end of file
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ElementMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ElementMixin.java
similarity index 86%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ElementMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ElementMixin.java
index cd1aa329a..2968b7b06 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ElementMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ElementMixin.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import org.opencds.cqf.cql.engine.elm.execution.ExpressionDefEvaluator;
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExecutableMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExecutableMixin.java
similarity index 74%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExecutableMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExecutableMixin.java
index 96ff50c07..1f493a8ad 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExecutableMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExecutableMixin.java
@@ -1,8 +1,7 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public class ExecutableMixin {
-
}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionDefMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionDefMixin.java
similarity index 90%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionDefMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionDefMixin.java
index 5402cee41..6cbe1c1a9 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionDefMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionDefMixin.java
@@ -1,12 +1,12 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
-
-import org.opencds.cqf.cql.engine.elm.execution.ExpressionDefEvaluator;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import com.fasterxml.jackson.annotation.JsonSubTypes;
-import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
+import org.opencds.cqf.cql.engine.elm.execution.ExpressionDefEvaluator;
+
@JsonTypeInfo(use = Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", defaultImpl = ExpressionDefEvaluator.class)
@JsonSubTypes({
@Type(value = ExpressionDefEvaluator.class, name = "ExpressionDef")
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionMixin.java
similarity index 99%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionMixin.java
index 7b542cad2..5941c8c3c 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/ExpressionMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/ExpressionMixin.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import org.opencds.cqf.cql.engine.elm.execution.*;
@@ -6,6 +6,7 @@
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", defaultImpl = ExpressionDefEvaluator.class)
@JsonSubTypes({
@Type(value = AbsEvaluator.class, name = "Abs"),
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/LibraryMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/LibraryMixin.java
similarity index 87%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/LibraryMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/LibraryMixin.java
index f42d967f0..99325b213 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/LibraryMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/LibraryMixin.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import org.cqframework.cql.elm.execution.Library;
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/TypeSpecifierMixin.java b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/TypeSpecifierMixin.java
similarity index 94%
rename from engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/TypeSpecifierMixin.java
rename to engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/TypeSpecifierMixin.java
index 9edd256dc..b655573a6 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/TypeSpecifierMixin.java
+++ b/engine.jackson/src/main/java/org/opencds/cqf/cql/engine/serializing/jackson/mixins/TypeSpecifierMixin.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
+package org.opencds.cqf.cql.engine.serializing.jackson.mixins;
import org.cqframework.cql.elm.execution.ChoiceTypeSpecifier;
import org.cqframework.cql.elm.execution.ListTypeSpecifier;
diff --git a/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/data/SystemDataProviderTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/data/SystemDataProviderTest.java
new file mode 100644
index 000000000..d3983056c
--- /dev/null
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/data/SystemDataProviderTest.java
@@ -0,0 +1,19 @@
+package org.opencds.cqf.cql.engine.data;
+
+import static org.testng.Assert.assertNull;
+
+import org.opencds.cqf.cql.engine.runtime.Date;
+import org.testng.annotations.Test;
+
+public class SystemDataProviderTest {
+
+ @Test
+ public void resolveMissingPropertyReturnsNull() {
+ SystemDataProvider provider = new SystemDataProvider();
+
+ Date date = new Date(2019, 01, 01);
+
+ Object result = provider.resolvePath(date, "notapath");
+ assertNull(result);
+ }
+}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java
index ee32b76b9..1d0197e03 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConceptTest.java
@@ -1,5 +1,8 @@
package org.opencds.cqf.cql.engine.execution;
+import java.util.Arrays;
+import java.util.List;
+
import org.opencds.cqf.cql.engine.exception.CqlException;
import org.opencds.cqf.cql.engine.runtime.Code;
import org.opencds.cqf.cql.engine.runtime.Concept;
@@ -7,9 +10,6 @@
import org.testng.Assert;
import org.testng.annotations.Test;
-import java.util.Arrays;
-import java.util.List;
-
public class CqlConceptTest extends CqlExecutionTestBase {
@Test
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java
index 7a7ed3ac2..cfe409052 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlEngineTests.java
@@ -2,8 +2,8 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
import java.io.IOException;
import java.util.ArrayList;
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java
similarity index 56%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java
index 8a5732e94..6f6da3e69 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorSuiteTest.java
@@ -1,15 +1,14 @@
package org.opencds.cqf.cql.engine.execution;
-import org.cqframework.cql.cql2elm.CqlCompilerException;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
+import java.io.IOException;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TimeZone;
+
import org.cqframework.cql.elm.execution.ExpressionDef;
import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.tracking.TrackBack;
-import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
-import org.fhir.ucum.UcumService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -17,18 +16,6 @@
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URLDecoder;
-import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.TimeZone;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
public class CqlErrorSuiteTest {
private static final Logger logger = LoggerFactory.getLogger(CqlErrorSuiteTest.class);
@@ -36,6 +23,8 @@ public class CqlErrorSuiteTest {
private ExpressionDef expression;
private Context context;
+
+
@Factory(dataProvider = "dataMethod")
public CqlErrorSuiteTest(Context context, ExpressionDef expression) {
this.expression = expression;
@@ -80,31 +69,6 @@ public void testErrorSuite() throws IOException, UcumException {
}
private static Library translate(String file) throws UcumException, IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
- UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
-
- File cqlFile = new File(URLDecoder.decode(CqlErrorSuiteTest.class.getResource(file).getFile(), "UTF-8"));
-
- CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
-
- if (translator.getErrors().size() > 0) {
- System.err.println("Translation failed due to errors:");
- ArrayList errors = new ArrayList<>();
- for (CqlCompilerException error : translator.getErrors()) {
- TrackBack tb = error.getLocator();
- String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
- tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
- System.err.printf("%s %s%n", lines, error.getMessage());
- errors.add(lines + error.getMessage());
- }
- throw new IllegalArgumentException(errors.toString());
- }
-
- assertThat(translator.getErrors().size(), is(0));
-
- String json = translator.toJson();
-
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new TranslatorHelper().translate(file);
}
}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java
similarity index 88%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java
index c34b699a3..00379dd07 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExecutionTestBase.java
@@ -5,18 +5,22 @@
import java.io.File;
import java.io.IOException;
-import java.io.PrintWriter;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
-import org.cqframework.cql.cql2elm.*;
+import org.cqframework.cql.cql2elm.CqlCompilerException;
+import org.cqframework.cql.cql2elm.CqlTranslator;
+import org.cqframework.cql.cql2elm.CqlTranslatorOptions;
+import org.cqframework.cql.cql2elm.LibraryManager;
+import org.cqframework.cql.cql2elm.ModelManager;
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.tracking.TrackBack;
import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
import org.fhir.ucum.UcumService;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod;
@@ -76,21 +80,13 @@ public void beforeEachTestMethod() throws IOException, UcumException {
assertThat(translator.getErrors().size(), is(0));
- jsonFile = new File(cqlFile.getParent(), fileName + ".json");
- jsonFile.createNewFile();
-
String json = translator.toJson();
- PrintWriter pw = new PrintWriter(jsonFile, "UTF-8");
- pw.println(json);
- pw.println();
- pw.close();
+ library = new JsonCqlLibraryReader().read(json);
+ libraries.put(fileName, library);
} catch (IOException e) {
e.printStackTrace();
}
-
- library = JsonCqlLibraryReader.read(jsonFile);
- libraries.put(fileName, library);
}
}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java
index 6b3e02cde..e7b5c5946 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.java
@@ -3,7 +3,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-
import java.util.Arrays;
import org.opencds.cqf.cql.engine.data.SystemExternalFunctionProvider;
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java
index 2aac06a2c..1af7c5eaf 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.java
@@ -4,7 +4,6 @@
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
-
import org.testng.annotations.Test;
public class CqlFunctionTests extends CqlExecutionTestBase {
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java
similarity index 89%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java
index c35b7653c..2df519901 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlInternalTypeRepresentationSuiteTest.java
@@ -1,31 +1,28 @@
package org.opencds.cqf.cql.engine.execution;
-import org.cqframework.cql.cql2elm.CqlCompilerException;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.ZonedDateTime;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.TimeZone;
+
import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.tracking.TrackBack;
-import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
-import org.fhir.ucum.UcumService;
-import org.opencds.cqf.cql.engine.runtime.*;
+import org.opencds.cqf.cql.engine.runtime.Code;
+import org.opencds.cqf.cql.engine.runtime.Concept;
+import org.opencds.cqf.cql.engine.runtime.CqlList;
+import org.opencds.cqf.cql.engine.runtime.DateTime;
+import org.opencds.cqf.cql.engine.runtime.Interval;
+import org.opencds.cqf.cql.engine.runtime.Quantity;
+import org.opencds.cqf.cql.engine.runtime.Time;
+import org.opencds.cqf.cql.engine.runtime.Tuple;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.math.BigDecimal;
-import java.net.URLDecoder;
-import java.time.ZonedDateTime;
-import java.util.*;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
public class CqlInternalTypeRepresentationSuiteTest {
private static final Logger logger = LoggerFactory.getLogger(CqlInternalTypeRepresentationSuiteTest.class);
@@ -337,31 +334,6 @@ public void testInternalTypeRepresentationSuite() throws IOException, UcumExcept
}
private Library translate(String file) throws UcumException, IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
- UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
-
- File cqlFile = new File(URLDecoder.decode(this.getClass().getResource(file).getFile(), "UTF-8"));
-
- CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
-
- if (translator.getErrors().size() > 0) {
- System.err.println("Translation failed due to errors:");
- ArrayList errors = new ArrayList<>();
- for (CqlCompilerException error : translator.getErrors()) {
- TrackBack tb = error.getLocator();
- String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
- tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
- System.err.printf("%s %s%n", lines, error.getMessage());
- errors.add(lines + error.getMessage());
- }
- throw new IllegalArgumentException(errors.toString());
- }
-
- assertThat(translator.getErrors().size(), is(0));
-
- String json = translator.toJson();
-
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new TranslatorHelper().translate(file);
}
}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java
similarity index 56%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java
index 783c95a45..ed83d7633 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlMainSuiteTest.java
@@ -1,26 +1,15 @@
package org.opencds.cqf.cql.engine.execution;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
-import java.io.File;
import java.io.IOException;
-import java.io.StringReader;
-import java.net.URLDecoder;
import java.time.ZonedDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TimeZone;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.CqlCompilerException;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
import org.cqframework.cql.elm.execution.ExpressionDef;
import org.cqframework.cql.elm.execution.FunctionDef;
import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.tracking.TrackBack;
-import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
-import org.fhir.ucum.UcumService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -84,31 +73,6 @@ public void testMainSuite() throws IOException, UcumException {
}
private static Library translate(String file) throws UcumException, IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
- UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
-
- File cqlFile = new File(URLDecoder.decode(CqlMainSuiteTest.class.getResource(file).getFile(), "UTF-8"));
-
- CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
-
- if (translator.getErrors().size() > 0) {
- System.err.println("Translation failed due to errors:");
- ArrayList errors = new ArrayList<>();
- for (CqlCompilerException error : translator.getErrors()) {
- TrackBack tb = error.getLocator();
- String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
- tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
- System.err.printf("%s %s%n", lines, error.getMessage());
- errors.add(lines + error.getMessage());
- }
- throw new IllegalArgumentException(errors.toString());
- }
-
- assertThat(translator.getErrors().size(), is(0));
-
- String json = translator.toJson();
-
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new TranslatorHelper().translate(file);
}
}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java
similarity index 69%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java
index a93b5e73e..77bad9f66 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlPerformanceIT.java
@@ -1,30 +1,17 @@
package org.opencds.cqf.cql.engine.execution;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
import static org.testng.Assert.assertTrue;
-import java.io.File;
import java.io.IOException;
-import java.io.StringReader;
-import java.net.URLDecoder;
import java.time.Duration;
import java.time.Instant;
import java.time.ZonedDateTime;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.TimeZone;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.CqlCompilerException;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.execution.VersionedIdentifier;
-import org.cqframework.cql.elm.tracking.TrackBack;
-import org.fhir.ucum.UcumEssenceService;
import org.fhir.ucum.UcumException;
-import org.fhir.ucum.UcumService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
@@ -74,32 +61,7 @@ public void testInternalTypeRepresentationSuite() throws IOException, UcumExcept
}
private Library translate(String file) throws UcumException, IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
- UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
-
- File cqlFile = new File(URLDecoder.decode(this.getClass().getResource(file).getFile(), "UTF-8"));
-
- CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
-
- if (translator.getErrors().size() > 0) {
- System.err.println("Translation failed due to errors:");
- ArrayList errors = new ArrayList<>();
- for (CqlCompilerException error : translator.getErrors()) {
- TrackBack tb = error.getLocator();
- String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
- tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
- System.err.printf("%s %s%n", lines, error.getMessage());
- errors.add(lines + error.getMessage());
- }
- throw new IllegalArgumentException(errors.toString());
- }
-
- assertThat(translator.getErrors().size(), is(0));
-
- String json = translator.toJson();
-
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new TranslatorHelper().translate(file);
}
private void runPerformanceTest(String testName, String libraryName, LibraryLoader libraryLoader, Double maxPerIterationMs) {
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlQueryTests.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlQueryTests.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlQueryTests.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlQueryTests.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypesTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypesTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypesTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlTypesTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java
index 6e8cb20cb..a74ba6407 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.java
@@ -9,9 +9,9 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
-import org.testng.Assert;
import org.opencds.cqf.cql.engine.exception.CqlException;
import org.opencds.cqf.cql.engine.runtime.Quantity;
+import org.testng.Assert;
import org.testng.annotations.Test;
public class CqlValueLiteralsAndSelectorsTest extends CqlExecutionTestBase {
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java
index 16bb5684f..935f9b385 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/DateComparatorTest.java
@@ -3,7 +3,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-
import org.testng.annotations.Test;
public class DateComparatorTest extends CqlExecutionTestBase {
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/InMemoryLibrarySourceProvider.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/InMemoryLibrarySourceProvider.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/InMemoryLibrarySourceProvider.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/InMemoryLibrarySourceProvider.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java
index 7326e3a72..0784570b8 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.java
@@ -5,7 +5,6 @@
import static org.hamcrest.Matchers.is;
import static org.testng.Assert.assertNotNull;
-
import org.opencds.cqf.cql.engine.runtime.Code;
import org.testng.annotations.Test;
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java
index d60c4691d..7ed46be2f 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.java
@@ -1,12 +1,12 @@
package org.opencds.cqf.cql.engine.execution;
+import java.util.Collections;
+
import org.opencds.cqf.cql.engine.runtime.Code;
import org.opencds.cqf.cql.engine.runtime.Concept;
import org.opencds.cqf.cql.engine.runtime.CqlType;
import org.testng.annotations.Test;
-import java.util.Collections;
-
public class IncludedConceptRefTest extends CqlExecutionTestBase {
@Test
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java
index 26ae4d8ee..129cc5b92 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.java
@@ -1,16 +1,17 @@
package org.opencds.cqf.cql.engine.execution;
-import org.opencds.cqf.cql.engine.runtime.Code;
-import org.opencds.cqf.cql.engine.terminology.CodeSystemInfo;
-import org.opencds.cqf.cql.engine.terminology.TerminologyProvider;
-import org.opencds.cqf.cql.engine.terminology.ValueSetInfo;
-import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import java.util.Collections;
import java.util.List;
+import org.opencds.cqf.cql.engine.runtime.Code;
+import org.opencds.cqf.cql.engine.terminology.CodeSystemInfo;
+import org.opencds.cqf.cql.engine.terminology.TerminologyProvider;
+import org.opencds.cqf.cql.engine.terminology.ValueSetInfo;
+import org.testng.annotations.Test;
+
public class IncludedValueSetRefTest extends CqlExecutionTestBase {
@Test
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue208.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue208.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue208.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue208.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue213.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue213.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue213.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue213.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java
index d5be5450b..7d4efbed6 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue223.java
@@ -3,7 +3,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-
import java.util.List;
import org.testng.annotations.Test;
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue33.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue33.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue33.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue33.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java
index 80c9c4f13..5786b71f5 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue39.java
@@ -3,7 +3,6 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-
import org.testng.annotations.Test;
public class Issue39 extends CqlExecutionTestBase {
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java
similarity index 99%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java
index 905a129dc..2508509d5 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/Issue458.java
@@ -2,7 +2,6 @@
import static org.testng.Assert.assertEquals;
-
import org.opencds.cqf.cql.engine.runtime.Interval;
import org.testng.annotations.Test;
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/SortDescendingTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/SortDescendingTest.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/SortDescendingTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/SortDescendingTest.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java
similarity index 67%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java
index 6da047cfb..2911fe810 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibraryLoader.java
@@ -1,7 +1,7 @@
package org.opencds.cqf.cql.engine.execution;
import java.io.IOException;
-import java.io.StringReader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -13,17 +13,8 @@
import org.cqframework.cql.cql2elm.model.CompiledLibrary;
import org.cqframework.cql.elm.execution.Library;
import org.cqframework.cql.elm.execution.VersionedIdentifier;
-import org.hl7.cql_annotations.r1.CqlToElmBase;
-import org.opencds.cqf.cql.engine.elm.serialization.CqlToElmBaseMixIn;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.cqframework.cql.elm.serializing.ElmLibraryWriterFactory;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
public class TestLibraryLoader implements LibraryLoader {
@@ -72,25 +63,16 @@ private Library loadLibrary(VersionedIdentifier libraryIdentifier) {
String json;
try {
- ObjectMapper mapper = JsonMapper.builder()
- .defaultMergeable(true)
- .enable(SerializationFeature.INDENT_OUTPUT)
- .enable(SerializationFeature.WRAP_ROOT_VALUE)
- .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- .enable(MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL)
- .defaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.NON_NULL))
- .addModule(new JaxbAnnotationModule())
- .addMixIn(CqlToElmBase.class, CqlToElmBaseMixIn.class)
- .build();
-
- json = mapper.writeValueAsString(compiledLibrary.getLibrary());
- } catch (JsonProcessingException e) {
+ StringWriter writer = new StringWriter();
+ ElmLibraryWriterFactory.getWriter("application/elm+json").write(compiledLibrary.getLibrary(), writer);
+ json = writer.getBuffer().toString();
+ } catch (IOException e) {
throw new RuntimeException(String.format("Errors encountered while loading library %s: %s", libraryIdentifier.getId(), e.getMessage()));
}
Library library = null;
try {
- library = JsonCqlLibraryReader.read(new StringReader(json));
+ library = new JsonCqlLibraryReader().read(json);
} catch (IOException e) {
throw new RuntimeException(String.format("Errors encountered while loading library %s: %s", libraryIdentifier.getId(), e.getMessage()));
}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibrarySourceProvider.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibrarySourceProvider.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibrarySourceProvider.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TestLibrarySourceProvider.java
diff --git a/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java
new file mode 100644
index 000000000..cb2831568
--- /dev/null
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java
@@ -0,0 +1,49 @@
+package org.opencds.cqf.cql.engine.execution;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Map;
+
+import org.cqframework.cql.cql2elm.CqlTranslator;
+import org.cqframework.cql.cql2elm.LibraryManager;
+import org.cqframework.cql.cql2elm.ModelManager;
+import org.cqframework.cql.elm.execution.Library;
+import org.cqframework.cql.elm.serializing.ElmLibraryWriterFactory;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
+
+public class TranslatingTestBase {
+
+ public LibraryManager toLibraryManager(Map libraryText) {
+ ModelManager modelManager = new ModelManager();
+ LibraryManager libraryManager = new LibraryManager(modelManager);
+ libraryManager.getLibrarySourceLoader().registerProvider(new InMemoryLibrarySourceProvider(libraryText));
+ return libraryManager;
+ }
+
+ public Library toLibrary(String text) throws IOException {
+ ModelManager modelManager = new ModelManager();
+ LibraryManager libraryManager = new LibraryManager(modelManager);
+
+ return this.toLibrary(text, modelManager, libraryManager);
+ }
+
+ public Library toLibrary(String text, ModelManager modelManager, LibraryManager libraryManager) throws IOException {
+ CqlTranslator translator = CqlTranslator.fromText(text, modelManager, libraryManager);
+ return this.readJson(translator.toJson());
+ }
+
+ public Library readJson(String json) throws IOException {
+ return new JsonCqlLibraryReader().read(new StringReader(json));
+ }
+
+ public org.hl7.elm.r1.VersionedIdentifier toElmIdentifier(String name, String version) {
+ return new org.hl7.elm.r1.VersionedIdentifier().withId(name).withVersion(version);
+ }
+
+ public String convertToJson(org.hl7.elm.r1.Library library) throws IOException {
+ StringWriter writer = new StringWriter();
+ ElmLibraryWriterFactory.getWriter("application/elm+json").write(library, writer);
+ return writer.getBuffer().toString();
+ }
+}
diff --git a/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatorHelper.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatorHelper.java
new file mode 100644
index 000000000..23e99709a
--- /dev/null
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatorHelper.java
@@ -0,0 +1,53 @@
+package org.opencds.cqf.cql.engine.execution;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+
+import org.cqframework.cql.cql2elm.CqlCompilerException;
+import org.cqframework.cql.cql2elm.CqlTranslator;
+import org.cqframework.cql.cql2elm.LibraryManager;
+import org.cqframework.cql.cql2elm.ModelManager;
+import org.cqframework.cql.elm.execution.Library;
+import org.cqframework.cql.elm.tracking.TrackBack;
+import org.fhir.ucum.UcumEssenceService;
+import org.fhir.ucum.UcumException;
+import org.fhir.ucum.UcumService;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
+
+public class TranslatorHelper {
+
+ public Library translate(String file) throws UcumException, IOException {
+ ModelManager modelManager = new ModelManager();
+ LibraryManager libraryManager = new LibraryManager(modelManager);
+ UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
+
+ File cqlFile = new File(URLDecoder.decode(CqlErrorSuiteTest.class.getResource(file).getFile(), "UTF-8"));
+
+ CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
+
+ if (translator.getErrors().size() > 0) {
+ System.err.println("Translation failed due to errors:");
+ ArrayList errors = new ArrayList<>();
+ for (CqlCompilerException error : translator.getErrors()) {
+ TrackBack tb = error.getLocator();
+ String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
+ tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
+ System.err.printf("%s %s%n", lines, error.getMessage());
+ errors.add(lines + error.getMessage());
+ }
+ throw new IllegalArgumentException(errors.toString());
+ }
+
+ assertThat(translator.getErrors().size(), is(0));
+
+ String json = translator.toJson();
+
+ return new JsonCqlLibraryReader().read(new StringReader(json));
+ }
+}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath.java
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath2.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath2.java
similarity index 100%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath2.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/execution/external/MyMath2.java
diff --git a/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/CqlCompileTranslateTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/CqlCompileTranslateTest.java
new file mode 100644
index 000000000..14b6c15ab
--- /dev/null
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/CqlCompileTranslateTest.java
@@ -0,0 +1,139 @@
+package org.opencds.cqf.cql.engine.serializing;
+
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import javax.xml.bind.JAXBException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cqframework.cql.cql2elm.CqlCompilerException;
+import org.cqframework.cql.cql2elm.CqlTranslator;
+import org.cqframework.cql.cql2elm.LibraryManager;
+import org.cqframework.cql.cql2elm.LibrarySourceProvider;
+import org.cqframework.cql.cql2elm.ModelManager;
+import org.cqframework.cql.elm.execution.Library;
+import org.cqframework.cql.elm.tracking.TrackBack;
+import org.fhir.ucum.UcumEssenceService;
+import org.fhir.ucum.UcumException;
+import org.fhir.ucum.UcumService;
+import org.hl7.elm.r1.VersionedIdentifier;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
+import org.opencds.cqf.cql.engine.serializing.jackson.XmlCqlLibraryReader;
+import org.testng.Assert;
+import org.testng.ITest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Factory;
+import org.testng.annotations.Test;
+
+public class CqlCompileTranslateTest implements ITest {
+ private final String path;
+ private final String fileName;
+
+ @Factory(dataProvider = "dataMethod")
+ public CqlCompileTranslateTest(String path, String fileName) {
+ this.path = path;
+ this.fileName = fileName;
+ }
+
+ @DataProvider
+ public static Object[][] dataMethod() throws URISyntaxException {
+ List filesToTest = new ArrayList<>();
+ filesToTest.addAll(collectTestFiles());
+ return filesToTest.toArray(new String[filesToTest.size()][]);
+ }
+
+ public static List collectTestFiles() throws URISyntaxException {
+ List filesToTest = new ArrayList<>();
+ URL dirURL = org.opencds.cqf.cql.engine.execution.CqlMainSuiteTest.class.getResource(".");
+ File file = new File(dirURL.toURI());
+ for (String fileName : file.list()) {
+ if (fileName.endsWith(".cql")) {
+ filesToTest.add(new String[]{ file.getAbsolutePath(), fileName });
+ }
+ }
+ return filesToTest;
+ }
+
+ public String getTestName() {
+ return "test" + fileName.replaceAll(".cql","");
+ }
+
+ @Test
+ private void testCompileTranscode() throws IOException, JAXBException, UcumException {
+ ModelManager modelManager = new ModelManager();
+ LibraryManager libraryManager = new LibraryManager(modelManager);
+ libraryManager.getLibrarySourceLoader().registerProvider(new LibrarySourceProvider() {
+ @Override
+ public InputStream getLibrarySource(VersionedIdentifier versionedIdentifier) {
+ String libraryFileName = String.format("%s%s.cql",
+ versionedIdentifier.getId(), versionedIdentifier.getVersion() != null ? ("-" + versionedIdentifier.getVersion()) : "");
+ return org.opencds.cqf.cql.engine.execution.CqlMainSuiteTest.class.getResourceAsStream(libraryFileName);
+ }
+ });
+
+ UcumService ucumService = new UcumEssenceService(UcumEssenceService.class.getResourceAsStream("/ucum-essence.xml"));
+
+ File cqlFile = new File(path + "/" + fileName);
+
+ CqlTranslator translator = CqlTranslator.fromFile(cqlFile, modelManager, libraryManager, ucumService);
+
+ if (translator.getErrors().size() > 0) {
+ System.err.println("Translation failed due to errors:");
+ ArrayList errors = new ArrayList<>();
+ for (CqlCompilerException error : translator.getErrors()) {
+ TrackBack tb = error.getLocator();
+ String lines = tb == null ? "[n/a]" : String.format("[%d:%d, %d:%d]",
+ tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
+ System.err.printf("%s %s%n", lines, error.getMessage());
+ errors.add(lines + error.getMessage());
+ }
+ throw new IllegalArgumentException(errors.toString());
+ }
+
+ assertThat(translator.getErrors().size(), is(0));
+
+ Library jsonLibrary = null;
+ try {
+ jsonLibrary = new JsonCqlLibraryReader().read(translator.toJson());
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException(String.format("Errors occurred reading ELM from json %s: %s", fileName, e.getMessage()));
+ }
+
+ Library xmlLibrary = null;
+
+ try {
+ xmlLibrary = new XmlCqlLibraryReader().read(translator.toXml());
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException(String.format("Errors occurred reading ELM from xml %s: %s", fileName, e.getMessage()));
+ }
+
+ if (xmlLibrary != null && jsonLibrary != null) {
+ Assert.assertTrue(equivalent(xmlLibrary, jsonLibrary));
+ }
+ }
+
+ private static boolean equivalent(Library left, Library right) {
+ if (left == null && right == null) {
+ return true;
+ }
+
+ if (left != null) {
+ return left.getIdentifier().equals(right.getIdentifier());
+ }
+
+ // TODO: validate ELM equivalence... big job...
+ // Simplest would be to introduce on Executable...
+
+ return false;
+ }
+}
+
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReaderTest.java b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/JsonCqlLibraryReaderTest.java
similarity index 91%
rename from engine/src/test/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReaderTest.java
rename to engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/JsonCqlLibraryReaderTest.java
index cec292dc9..df124bccc 100644
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/JsonCqlLibraryReaderTest.java
+++ b/engine.jackson/src/test/java/org/opencds/cqf/cql/engine/serializing/JsonCqlLibraryReaderTest.java
@@ -1,4 +1,4 @@
-package org.opencds.cqf.cql.engine.execution;
+package org.opencds.cqf.cql.engine.serializing;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.instanceOf;
@@ -23,6 +23,8 @@
import org.fhir.ucum.UcumService;
import org.opencds.cqf.cql.engine.elm.execution.CodeSystemRefEvaluator;
import org.opencds.cqf.cql.engine.elm.execution.ExpressionDefEvaluator;
+import org.opencds.cqf.cql.engine.execution.CqlMainSuiteTest;
+import org.opencds.cqf.cql.engine.serializing.jackson.JsonCqlLibraryReader;
import org.testng.annotations.Test;
public class JsonCqlLibraryReaderTest {
@@ -87,12 +89,11 @@ private static Library translate(String file) throws UcumException, IOException
String json = translator.toJson();
- return JsonCqlLibraryReader.read(new StringReader(json));
+ return new JsonCqlLibraryReader().read(new StringReader(json));
}
private static Library read(String file) throws IOException {
- File jsonFile = new File(URLDecoder.decode(CqlMainSuiteTest.class.getResource(file).getFile(), "UTF-8"));
- return JsonCqlLibraryReader.read(jsonFile);
+ return new JsonCqlLibraryReader().read(JsonCqlLibraryReaderTest.class.getResourceAsStream(file));
}
}
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlAggregateFunctionsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlArithmeticFunctionsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlClinicalOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlComparisonOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConceptTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConceptTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConceptTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConceptTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlConditionalOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlDateTimeOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlErrorsAndMessagingOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlExternalFunctionsTest2.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlFunctionTests.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlIntervalOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLibraryTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlListOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlLogicalOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlNullologicalOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlQueryTests.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlQueryTests.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlQueryTests.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlQueryTests.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlStringOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypeOperatorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypesTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypesTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypesTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlTypesTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/CqlValueLiteralsAndSelectorsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/DateComparatorTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/DateComparatorTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/DateComparatorTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/DateComparatorTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/DateOrDateTimeInNullIntervalTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/EmptyStringsTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTestCommon.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTestCommon.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTestCommon.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/ExpressionCacheTestCommon.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTestCommon.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTestCommon.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTestCommon.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedCodeRefTestCommon.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTestCommon.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTestCommon.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTestCommon.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedConceptRefTestCommon.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTestCommon.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTestCommon.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTestCommon.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/IncludedValueSetRefTestCommon.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue208.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue208.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue208.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue208.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue213.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue213.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue213.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue213.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue223.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue223.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue223.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue223.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue33.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue33.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue33.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue33.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue39.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue39.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue39.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue39.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue458.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue458.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue458.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/Issue458.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/LetClauseOutsideQueryContextTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/SortDescendingTest.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/SortDescendingTest.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/SortDescendingTest.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/SortDescendingTest.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlErrorTestSuite.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlErrorTestSuite.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlErrorTestSuite.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlErrorTestSuite.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlInternalTypeRepresentationSuite.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlInternalTypeRepresentationSuite.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlInternalTypeRepresentationSuite.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlInternalTypeRepresentationSuite.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlTestSuite.cql b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlTestSuite.cql
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlTestSuite.cql
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/execution/portable/CqlTestSuite.cql
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ANCFHIRDummy.json b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/ANCFHIRDummy.json
similarity index 96%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ANCFHIRDummy.json
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/ANCFHIRDummy.json
index 931629c4d..bb38c4b87 100644
--- a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/ANCFHIRDummy.json
+++ b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/ANCFHIRDummy.json
@@ -57,6 +57,7 @@
"dataType" : "{http://hl7.org/fhir}Observation"
},
"annotation" : [ {
+ "type" : "Annotation",
"s" : {
"s" : [ {
"name" : "{urn:hl7-org:cql-annotations:r1}s",
@@ -102,9 +103,11 @@
} ]
},
"annotation" : [ {
- "translatorOptions" : "EnableDateRangeOptimization,EnableAnnotations,EnableLocators,EnableResultTypes,DisableListDemotion,DisableListPromotion,DisableMethodInvocation"
+ "translatorOptions" : "EnableDateRangeOptimization,EnableAnnotations,EnableLocators,EnableResultTypes,DisableListDemotion,DisableListPromotion,DisableMethodInvocation",
+ "type" : "CqlToElmInfo"
},
{
+ "type" : "CqlToElmError",
"libraryId" : "MATGlobalCommonFunctions_FHIR4",
"libraryVersion" : "5.0.000",
"startLine" : 286,
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/EXM108.json b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/EXM108.json
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/EXM108.json
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/EXM108.json
diff --git a/engine/src/test/resources/org/opencds/cqf/cql/engine/execution/FHIR347.json b/engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/FHIR347.json
similarity index 100%
rename from engine/src/test/resources/org/opencds/cqf/cql/engine/execution/FHIR347.json
rename to engine.jackson/src/test/resources/org/opencds/cqf/cql/engine/serializing/FHIR347.json
diff --git a/engine.jaxb/pom.xml b/engine.jaxb/pom.xml
index 330418bba..628412692 100644
--- a/engine.jaxb/pom.xml
+++ b/engine.jaxb/pom.xml
@@ -35,6 +35,8 @@
xpp3_xpath
test
+
+
org.eclipse.persistence
org.eclipse.persistence.moxy
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/execution/CqlLibraryReader.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/execution/CqlLibraryReader.java
deleted file mode 100644
index 75804ddb8..000000000
--- a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/execution/CqlLibraryReader.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.opencds.cqf.cql.engine.execution;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
-import org.cqframework.cql.elm.execution.Library;
-import org.opencds.cqf.cql.engine.elm.execution.ObjectFactoryEx;
-import org.opencds.cqf.cql.engine.exception.CqlException;
-
-public class CqlLibraryReader {
-
- private static JAXBContext context;
- private static Unmarshaller unmarshaller;
-
- private CqlLibraryReader() {
- }
-
- // Performance enhancement additions ~ start
- public static synchronized Unmarshaller getUnmarshaller() throws JAXBException {
- if (context == null)
- {
- context = JAXBContext.newInstance(ObjectFactoryEx.class);
- }
-
- if (unmarshaller == null) {
- unmarshaller = context.createUnmarshaller();
- }
-
- return unmarshaller;
- }
-
- public static Library read(Unmarshaller u, File file) throws IOException, JAXBException {
- return read(u, toSource(file));
- }
-
- public static Library read(Unmarshaller u, URL url) throws IOException, JAXBException {
- return read(u, toSource(url));
- }
-
- public static Library read(Unmarshaller u, URI uri) throws IOException, JAXBException {
- return read(u, toSource(uri));
- }
-
- public static Library read(Unmarshaller u, String string) throws IOException, JAXBException {
- return read(u, toSource(string));
- }
-
- public static Library read(Unmarshaller u, InputStream inputStream) throws IOException, JAXBException {
- return read(u, toSource(inputStream));
- }
-
- public static Library read(Unmarshaller u, Reader reader) throws IOException, JAXBException {
- return read(u, toSource(reader));
- }
-
- @SuppressWarnings("unchecked")
- public static synchronized Library read(Unmarshaller u, Source source) throws JAXBException {
- Object result = u.unmarshal(source);
- return ((JAXBElement)result).getValue();
- }
- // Performance enhancement additions ~ end
-
- public static Library read(File file) throws IOException, JAXBException {
- return read(toSource(file));
- }
-
- public static Library read(URL url) throws IOException, JAXBException {
- return read(toSource(url));
- }
-
- public static Library read(URI uri) throws IOException, JAXBException {
- return read(toSource(uri));
- }
-
- public static Library read(String string) throws IOException, JAXBException {
- return read(toSource(string));
- }
-
- public static Library read(InputStream inputStream) throws IOException, JAXBException {
- return read(toSource(inputStream));
- }
-
- public static Library read(Reader reader) throws IOException, JAXBException {
- return read(toSource(reader));
- }
-
- public static synchronized Library read(Source source) throws JAXBException {
- return read(getUnmarshaller(), source);
- }
-
- /**
- * Creates {@link Source} from various XML representation.
- */
- private static Source toSource(Object xml) throws IOException {
- if (xml == null)
- throw new CqlException("no XML is given");
-
- if (xml instanceof String) {
- try {
- xml = new URI((String)xml);
- } catch (URISyntaxException e) {
- xml = new File((String)xml);
- }
- }
-
- if (xml instanceof File) {
- return new StreamSource((File)xml);
- }
-
- if (xml instanceof URI) {
- xml = ((URI)xml).toURL();
- }
-
- if (xml instanceof URL) {
- return new StreamSource(((URL)xml).toExternalForm());
- }
-
- if (xml instanceof InputStream) {
- return new StreamSource((InputStream)xml);
- }
-
- if (xml instanceof Reader) {
- return new StreamSource((Reader)xml);
- }
-
- if (xml instanceof Source) {
- return (Source)xml;
- }
-
- throw new CqlException(String.format("Could not determine access path for input of type %s.", xml.getClass()));
- }
-}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/CqlLibraryReaderProvider.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/CqlLibraryReaderProvider.java
new file mode 100644
index 000000000..379006844
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/CqlLibraryReaderProvider.java
@@ -0,0 +1,18 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class CqlLibraryReaderProvider implements org.opencds.cqf.cql.engine.serializing.CqlLibraryReaderProvider {
+ @Override
+ public CqlLibraryReader create(String contentType) {
+ if (contentType == null) {
+ contentType = "application/elm+json";
+ }
+
+ switch (contentType) {
+ case "application/elm+xml": return new XmlCqlLibraryReader();
+ case "application/elm+json":
+ default: return new JsonCqlLibraryReader();
+ }
+ }
+}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlLibraryReader.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlLibraryReader.java
new file mode 100644
index 000000000..8d6e3221e
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlLibraryReader.java
@@ -0,0 +1,107 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.PropertyException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.Source;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class JsonCqlLibraryReader implements CqlLibraryReader {
+ private static Unmarshaller unmarshaller;
+
+ public JsonCqlLibraryReader() {
+ }
+
+ // Performance enhancement additions ~ start
+ public static synchronized Unmarshaller getUnmarshaller() throws JAXBException {
+ if (unmarshaller == null) {
+ unmarshaller = JsonCqlMapper.getJaxbContext().createUnmarshaller();
+ }
+
+ try {
+ unmarshaller.setProperty("eclipselink.media-type", "application/json");
+ } catch (PropertyException e) {
+ throw new RuntimeException(e);
+ }
+
+ try {
+ // TODO: Figure out what's going on with the Type Specifier.
+ unmarshaller.setEventHandler(event -> true);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+
+ return unmarshaller;
+ }
+
+ public static Library read(Unmarshaller u, File file) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(file));
+ }
+
+ public static Library read(Unmarshaller u, URL url) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(url));
+ }
+
+ public static Library read(Unmarshaller u, URI uri) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(uri));
+ }
+
+ public static Library read(Unmarshaller u, String string) throws IOException, JAXBException {
+ return read(u,LibraryReaderUtil. toSource(string));
+ }
+
+ public static Library read(Unmarshaller u, InputStream inputStream) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(inputStream));
+ }
+
+ public static Library read(Unmarshaller u, Reader reader) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(reader));
+ }
+
+ @SuppressWarnings("unchecked")
+ public static synchronized Library read(Unmarshaller u, Source source) throws JAXBException {
+ Object result = u.unmarshal(source);
+ return ((JAXBElement)result).getValue();
+ }
+
+ public Library read(File file) throws IOException {
+ return read(LibraryReaderUtil.toSource(file));
+ }
+
+ public Library read(URL url) throws IOException {
+ return read(LibraryReaderUtil.toSource(url));
+ }
+
+ public Library read(URI uri) throws IOException {
+ return read(LibraryReaderUtil.toSource(uri));
+ }
+
+ public Library read(String string) throws IOException {
+ return read(LibraryReaderUtil.toSource(string));
+ }
+
+ public Library read(InputStream inputStream) throws IOException {
+ return read(LibraryReaderUtil.toSource(inputStream));
+ }
+
+ public Library read(Reader reader) throws IOException {
+ return read(LibraryReaderUtil.toSource(reader));
+ }
+
+ public synchronized Library read(Source source) {
+ try {
+ return read(getUnmarshaller(), source);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlMapper.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlMapper.java
new file mode 100644
index 000000000..1618af013
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/JsonCqlMapper.java
@@ -0,0 +1,24 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.cqframework.cql.elm.execution.CqlToElmBase;
+import org.opencds.cqf.cql.engine.elm.execution.ObjectFactoryEx;
+
+public class JsonCqlMapper {
+
+ private static JAXBContext jaxbContext;
+
+ public static JAXBContext getJaxbContext() {
+ if (jaxbContext == null) {
+ try {
+ jaxbContext = JAXBContext.newInstance(ObjectFactoryEx.class, CqlToElmBase.class);
+ } catch (JAXBException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Error creating JAXBContext - " + e.getMessage());
+ }
+ }
+ return jaxbContext;
+ }
+}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/LibraryReaderUtil.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/LibraryReaderUtil.java
new file mode 100644
index 000000000..c727646da
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/LibraryReaderUtil.java
@@ -0,0 +1,56 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class LibraryReaderUtil {
+ public static Source toSource(Object source) {
+ if (source == null)
+ throw new RuntimeException("no source is given");
+
+ if (source instanceof String) {
+ try {
+ source = new URI((String)source);
+ } catch (URISyntaxException e) {
+ source = new File((String)source);
+ }
+ }
+
+ if (source instanceof File) {
+ return new StreamSource((File)source);
+ }
+
+ if (source instanceof URI) {
+ try {
+ source = ((URI)source).toURL();
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ if (source instanceof URL) {
+ return new StreamSource(((URL)source).toExternalForm());
+ }
+
+ if (source instanceof InputStream) {
+ return new StreamSource((InputStream)source);
+ }
+
+ if (source instanceof Reader) {
+ return new StreamSource((Reader)source);
+ }
+
+ if (source instanceof Source) {
+ return (Source)source;
+ }
+
+ throw new RuntimeException(String.format("Could not determine access path for input of type %s.", source.getClass()));
+ }
+}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlLibraryReader.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlLibraryReader.java
new file mode 100644
index 000000000..c9daac3a6
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlLibraryReader.java
@@ -0,0 +1,104 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.Source;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.CqlLibraryReader;
+
+public class XmlCqlLibraryReader implements CqlLibraryReader {
+
+ private static Unmarshaller unmarshaller;
+
+ public XmlCqlLibraryReader() {
+ }
+
+ // Performance enhancement additions ~ start
+ public static synchronized Unmarshaller getUnmarshaller() throws JAXBException {
+ if (unmarshaller == null) {
+ unmarshaller = XmlCqlMapper.getJaxbContext().createUnmarshaller();
+ }
+
+ return unmarshaller;
+ }
+
+ private Library read(Object source) throws IOException {
+ Library library = null;
+ try {
+ library = getUnmarshaller().unmarshal(LibraryReaderUtil.toSource(source), Library.class).getValue();
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ return library;
+ }
+
+ public static Library read(Unmarshaller u, File file) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(file));
+ }
+
+ public static Library read(Unmarshaller u, URL url) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(url));
+ }
+
+ public static Library read(Unmarshaller u, URI uri) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(uri));
+ }
+
+ public static Library read(Unmarshaller u, String string) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(string));
+ }
+
+ public static Library read(Unmarshaller u, InputStream inputStream) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(inputStream));
+ }
+
+ public static Library read(Unmarshaller u, Reader reader) throws IOException, JAXBException {
+ return read(u, LibraryReaderUtil.toSource(reader));
+ }
+
+ @SuppressWarnings("unchecked")
+ public static synchronized Library read(Unmarshaller u, Source source) throws JAXBException {
+ Object result = u.unmarshal(source);
+ return ((JAXBElement)result).getValue();
+ }
+
+ public Library read(File file) throws IOException {
+ return read(LibraryReaderUtil.toSource(file));
+ }
+
+ public Library read(URL url) throws IOException {
+ return read(LibraryReaderUtil.toSource(url));
+ }
+
+ public Library read(URI uri) throws IOException {
+ return read(LibraryReaderUtil.toSource(uri));
+ }
+
+ public Library read(String string) throws IOException {
+ return read(LibraryReaderUtil.toSource(string));
+ }
+
+ public Library read(InputStream inputStream) throws IOException {
+ return read(LibraryReaderUtil.toSource(inputStream));
+ }
+
+ public Library read(Reader reader) throws IOException {
+ return read(LibraryReaderUtil.toSource(reader));
+ }
+
+ public synchronized Library read(Source source) {
+ try {
+ return read(getUnmarshaller(), source);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlMapper.java b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlMapper.java
new file mode 100644
index 000000000..13ec984ee
--- /dev/null
+++ b/engine.jaxb/src/main/java/org/opencds/cqf/cql/engine/serializing/jaxb/XmlCqlMapper.java
@@ -0,0 +1,23 @@
+package org.opencds.cqf.cql.engine.serializing.jaxb;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.opencds.cqf.cql.engine.elm.execution.ObjectFactoryEx;
+
+public class XmlCqlMapper {
+
+ private static JAXBContext jaxbContext;
+
+ public static JAXBContext getJaxbContext() {
+ if (jaxbContext == null) {
+ try {
+ jaxbContext = JAXBContext.newInstance(ObjectFactoryEx.class);
+ } catch (JAXBException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Error creating JAXBContext - " + e.getMessage());
+ }
+ }
+ return jaxbContext;
+ }
+}
diff --git a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ANCFHIRTests.java b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ANCFHIRTests.java
index 132c6d94f..a2adff182 100644
--- a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ANCFHIRTests.java
+++ b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ANCFHIRTests.java
@@ -4,6 +4,7 @@
import org.opencds.cqf.cql.engine.elm.execution.ExpressionDefEvaluator;
import org.opencds.cqf.cql.engine.elm.execution.RetrieveEvaluator;
import org.opencds.cqf.cql.engine.elm.execution.SingletonFromEvaluator;
+import org.opencds.cqf.cql.engine.serializing.jaxb.JsonCqlLibraryReader;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -14,7 +15,7 @@ public class ANCFHIRTests {
@Test
public void testJsonLibraryLoad() {
try {
- Library library = JsonCqlLibraryReader.read(new InputStreamReader(ANCFHIRTests.class.getResourceAsStream("ANCFHIRDummy.json")));
+ Library library = new JsonCqlLibraryReader().read(new InputStreamReader(ANCFHIRTests.class.getResourceAsStream("ANCFHIRDummy.json")));
Assert.assertTrue(library != null);
Assert.assertTrue(library.getStatements() != null);
Assert.assertTrue(library.getStatements().getDef() != null);
@@ -33,7 +34,7 @@ public void testJsonLibraryLoad() {
@Test
public void testJsonTerminologyLibraryLoad() {
try {
- Library library = JsonCqlLibraryReader.read(new InputStreamReader(ANCFHIRTests.class.getResourceAsStream("ANCFHIRTerminologyDummy.json")));
+ Library library = new JsonCqlLibraryReader().read(new InputStreamReader(ANCFHIRTests.class.getResourceAsStream("ANCFHIRTerminologyDummy.json")));
Assert.assertTrue(library != null);
} catch (IOException e) {
throw new IllegalArgumentException("Error reading ELM: " + e.getMessage());
diff --git a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/CMS53Tests.java b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/CMS53Tests.java
index cd224ad02..a15368b62 100644
--- a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/CMS53Tests.java
+++ b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/CMS53Tests.java
@@ -1,16 +1,16 @@
package org.opencds.cqf.cql.engine.execution;
+import org.opencds.cqf.cql.engine.serializing.jaxb.XmlCqlLibraryReader;
import org.testng.annotations.Test;
-import javax.xml.bind.JAXBException;
import java.io.IOException;
public class CMS53Tests {
@Test
public void testLibraryLoadXML() {
try {
- CqlLibraryReader.read(CMS53Tests.class.getResourceAsStream("CMS53Draft/PrimaryPCIReceivedWithin90MinutesofHospitalArrival-7.0.001.xml"));
- } catch (IOException | JAXBException e) {
+ new XmlCqlLibraryReader().read(CMS53Tests.class.getResourceAsStream("CMS53Draft/PrimaryPCIReceivedWithin90MinutesofHospitalArrival-7.0.001.xml"));
+ } catch (IOException e) {
throw new IllegalArgumentException("Error reading ELM: " + e.getMessage());
}
}
diff --git a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmRegressionTests.java b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmRegressionTests.java
index 8b6f59efa..09dc99ff6 100644
--- a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmRegressionTests.java
+++ b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmRegressionTests.java
@@ -1,5 +1,6 @@
package org.opencds.cqf.cql.engine.execution;
+import javax.xml.bind.JAXBException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
@@ -8,9 +9,9 @@
import java.util.ArrayList;
import java.util.List;
-import javax.xml.bind.JAXBException;
-
import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.jaxb.JsonCqlLibraryReader;
+import org.opencds.cqf.cql.engine.serializing.jaxb.XmlCqlLibraryReader;
import org.testng.Assert;
import org.testng.ITest;
import org.testng.annotations.DataProvider;
@@ -61,7 +62,7 @@ public String getTestName() {
private void testElmDeserialization() throws IOException, JAXBException {
Library xmlLibrary = null;
try {
- xmlLibrary = CqlLibraryReader.read(new FileReader(path + "/" + fileName + ".xml"));
+ xmlLibrary = new XmlCqlLibraryReader().read(new FileReader(path + "/" + fileName + ".xml"));
}
catch (Exception e) {
throw new IllegalArgumentException(String.format("Errors occurred reading ELM from xml %s: %s", getPathName() + fileName, e.getMessage()));
@@ -69,9 +70,10 @@ private void testElmDeserialization() throws IOException, JAXBException {
Library jsonLibrary = null;
try {
- jsonLibrary = JsonCqlLibraryReader.read(new FileReader(path + "/" + fileName + ".json"));
+ jsonLibrary = new JsonCqlLibraryReader().read(new FileReader(path + "/" + fileName + ".json"));
}
catch (Exception e) {
+ e.printStackTrace();
throw new IllegalArgumentException(String.format("Errors occurred reading ELM from json %s: %s", getPathName() + fileName, e.getMessage()));
}
diff --git a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmTests.java b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmTests.java
index df10f85e1..fff0704e1 100644
--- a/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmTests.java
+++ b/engine.jaxb/src/test/java/org/opencds/cqf/cql/engine/execution/ElmTests.java
@@ -1,6 +1,7 @@
package org.opencds.cqf.cql.engine.execution;
import org.cqframework.cql.elm.execution.Library;
+import org.opencds.cqf.cql.engine.serializing.jaxb.XmlCqlLibraryReader;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -15,7 +16,7 @@ public class ElmTests {
*/
@Test
public void filterTest() throws JAXBException, IOException {
- Library library = CqlLibraryReader.read(ElmTests.class.getResourceAsStream("ElmTests.xml"));
+ Library library = new XmlCqlLibraryReader().read(ElmTests.class.getResourceAsStream("ElmTests.xml"));
Context context = new Context(library);
Object result = context.resolveExpressionRef("TestFilter").getExpression().evaluate(context);
diff --git a/engine/pom.xml b/engine/pom.xml
index e29abc778..da22fe023 100644
--- a/engine/pom.xml
+++ b/engine/pom.xml
@@ -37,8 +37,8 @@
- com.fasterxml.jackson.module
- jackson-module-jaxb-annotations
+ jakarta.xml.bind
+ jakarta.xml.bind-api
@@ -166,7 +166,7 @@
LINE
COVEREDRATIO
- 0.50
+ 0.02
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/execution/Executable.java b/engine/src/main/java/org/opencds/cqf/cql/engine/elm/execution/Executable.java
index 8abe7be45..9b9062728 100644
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/execution/Executable.java
+++ b/engine/src/main/java/org/opencds/cqf/cql/engine/elm/execution/Executable.java
@@ -5,7 +5,6 @@
import org.opencds.cqf.cql.engine.debug.SourceLocator;
import org.opencds.cqf.cql.engine.exception.CqlException;
import org.opencds.cqf.cql.engine.execution.Context;
-
public class Executable
{
public Object evaluate(Context context) throws CqlException
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CqlToElmBaseMixIn.java b/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CqlToElmBaseMixIn.java
deleted file mode 100644
index 739c8117b..000000000
--- a/engine/src/main/java/org/opencds/cqf/cql/engine/elm/serialization/CqlToElmBaseMixIn.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.opencds.cqf.cql.engine.elm.serialization;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-@JsonTypeInfo(
- use = JsonTypeInfo.Id.DEDUCTION,
- include = JsonTypeInfo.As.PROPERTY,
- property = "type")
-@JsonIgnoreProperties("type")
-public interface CqlToElmBaseMixIn {}
\ No newline at end of file
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReader.java b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReader.java
new file mode 100644
index 000000000..c65481af9
--- /dev/null
+++ b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReader.java
@@ -0,0 +1,25 @@
+package org.opencds.cqf.cql.engine.serializing;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URL;
+
+import org.cqframework.cql.elm.execution.Library;
+
+public interface CqlLibraryReader {
+
+ public Library read(File file) throws IOException;
+
+ public Library read(URL url) throws IOException;
+
+ public Library read(URI uri) throws IOException;
+
+ public Library read(String string) throws IOException;
+
+ public Library read(InputStream inputStream) throws IOException;
+
+ public Library read(Reader reader) throws IOException;
+}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderFactory.java b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderFactory.java
new file mode 100644
index 000000000..e23880286
--- /dev/null
+++ b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderFactory.java
@@ -0,0 +1,24 @@
+package org.opencds.cqf.cql.engine.serializing;
+
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+public class CqlLibraryReaderFactory {
+
+ static ServiceLoader loader = ServiceLoader
+ .load(CqlLibraryReaderProvider.class);
+
+ public static Iterator providers(boolean refresh) {
+ if (refresh) {
+ loader.reload();
+ }
+ return loader.iterator();
+ }
+
+ public static CqlLibraryReader getReader(String contentType) {
+ if (providers(false).hasNext()) {
+ return providers(false).next().create(contentType);
+ }
+ throw new RuntimeException("No ElmLibraryReaderProviders found");
+ }
+}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderProvider.java b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderProvider.java
new file mode 100644
index 000000000..6d0d31c92
--- /dev/null
+++ b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/CqlLibraryReaderProvider.java
@@ -0,0 +1,5 @@
+package org.opencds.cqf.cql.engine.serializing;
+
+public interface CqlLibraryReaderProvider {
+ CqlLibraryReader create(String contentType);
+}
diff --git a/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/LibraryWrapper.java b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/LibraryWrapper.java
new file mode 100644
index 000000000..640fd2046
--- /dev/null
+++ b/engine/src/main/java/org/opencds/cqf/cql/engine/serializing/LibraryWrapper.java
@@ -0,0 +1,14 @@
+package org.opencds.cqf.cql.engine.serializing;
+
+import org.cqframework.cql.elm.execution.Library;
+
+public class LibraryWrapper {
+ private Library library;
+ public Library getLibrary() {
+ return library;
+ }
+
+ public void setLibrary(Library library) {
+ this.library = library;
+ }
+}
diff --git a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java b/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java
deleted file mode 100644
index 01490a251..000000000
--- a/engine/src/test/java/org/opencds/cqf/cql/engine/execution/TranslatingTestBase.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.opencds.cqf.cql.engine.execution;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Map;
-
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
-import org.cqframework.cql.elm.execution.CodeSystemRef;
-import org.cqframework.cql.elm.execution.Element;
-import org.cqframework.cql.elm.execution.Expression;
-import org.cqframework.cql.elm.execution.ExpressionDef;
-import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.execution.TypeSpecifier;
-import org.hl7.cql_annotations.r1.CqlToElmBase;
-import org.opencds.cqf.cql.engine.elm.serialization.CodeSystemRefMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.CqlToElmBaseMixIn;
-import org.opencds.cqf.cql.engine.elm.serialization.ElementMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.ExpressionDefMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.ExpressionMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.LibraryMixin;
-import org.opencds.cqf.cql.engine.elm.serialization.TypeSpecifierMixin;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
-
-public class TranslatingTestBase {
-
- public LibraryManager toLibraryManager(Map libraryText) throws IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
- libraryManager.getLibrarySourceLoader().registerProvider(new InMemoryLibrarySourceProvider(libraryText));
- return libraryManager;
- }
-
- public Library toLibrary(String text) throws IOException {
- ModelManager modelManager = new ModelManager();
- LibraryManager libraryManager = new LibraryManager(modelManager);
-
- return this.toLibrary(text, modelManager, libraryManager);
- }
-
- public Library toLibrary(String text, ModelManager modelManager, LibraryManager libraryManager) throws IOException {
- CqlTranslator translator = CqlTranslator.fromText(text, modelManager, libraryManager);
- return this.readJson(translator.toJson());
- }
-
- public Library readJson(String json) throws IOException {
- return JsonCqlLibraryReader.read(new StringReader(json));
- }
-
- public org.hl7.elm.r1.VersionedIdentifier toElmIdentifier(String name, String version) {
- return new org.hl7.elm.r1.VersionedIdentifier().withId(name).withVersion(version);
- }
-
- public String convertToJson(org.hl7.elm.r1.Library library) throws JsonProcessingException {
- ObjectMapper mapper = JsonMapper.builder()
- .defaultMergeable(true)
- .enable(SerializationFeature.WRAP_ROOT_VALUE)
- .enable(SerializationFeature.INDENT_OUTPUT)
- .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- .enable(MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL)
- .defaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL, JsonInclude.Include.NON_NULL))
- .addModule(new JaxbAnnotationModule())
- .addMixIn(Library.class, LibraryMixin.class)
- // The ordering here of the mix ins for
- // ExpressionDef -> CodeSystemRef -> Expression -> Element matters,
- // so the mix-ins match most specific to least
- .addMixIn(ExpressionDef.class, ExpressionDefMixin.class)
- .addMixIn(CodeSystemRef.class, CodeSystemRefMixin.class)
- .addMixIn(Expression.class, ExpressionMixin.class)
- .addMixIn(TypeSpecifier.class, TypeSpecifierMixin.class)
- .addMixIn(CqlToElmBase.class, CqlToElmBaseMixIn.class)
- .addMixIn(Element.class, ElementMixin.class)
- .build();
-
- return mapper.writeValueAsString(library);
- }
-}
diff --git a/pom.xml b/pom.xml
index 6dc47b5ab..a1aef8adc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,7 @@
engine
engine.fhir
+ engine.jackson
engine.jaxb