evaluate(EvaluationContext context) throws IOException {
}
// Remote data retriever
- TerminologyAwareRetrieveProvider remoteRetriever = new RestFhirRetrieveProvider(
+ RestFhirRetrieveProvider remoteRetriever = new RestFhirRetrieveProvider(
new SearchParameterResolver(context.getFhirContext()), context.getHookFhirClient());
remoteRetriever.setTerminologyProvider(context.getContext().resolveTerminologyProvider());
+ remoteRetriever.setExpandValueSets(context.getProviderConfiguration().getExpandValueSets());
+ remoteRetriever.setMaxCodesPerQuery(context.getProviderConfiguration().getMaxCodesPerQuery());
+ remoteRetriever.setSearchStyle(context.getProviderConfiguration().getSearchStyle());
TerminologyAwareRetrieveProvider prefetchRetriever;
ModelResolver resolver;
if (context.getFhirVersion() == FhirVersionEnum.DSTU3) {
- prefetchRetriever = new PrefetchDataProviderStu3(context.getPrefetchResources(), remoteRetriever);
+ prefetchRetriever = new PrefetchDataProviderStu3(context.getPrefetchResources());
resolver = new Dstu3FhirModelResolver();
} else if (context.getFhirVersion() == FhirVersionEnum.DSTU2) {
- prefetchRetriever = new PrefetchDataProviderDstu2(context.getPrefetchResources(), remoteRetriever);
+ prefetchRetriever = new PrefetchDataProviderDstu2(context.getPrefetchResources());
resolver = new Dstu2FhirModelResolver();
}
else {
- prefetchRetriever = new PrefetchDataProviderR4(context.getPrefetchResources(), remoteRetriever);
+ prefetchRetriever = new PrefetchDataProviderR4(context.getPrefetchResources());
resolver = new R4FhirModelResolver();
}
// TODO: Get the "system" terminology provider.
prefetchRetriever.setTerminologyProvider(context.getContext().resolveTerminologyProvider());
+
+ PriorityRetrieveProvider priorityRetrieveProvider = new PriorityRetrieveProvider(prefetchRetriever, remoteRetriever);
context.getContext().registerDataProvider("http://hl7.org/fhir",
- new CompositeDataProvider(resolver, prefetchRetriever));
+ new CompositeDataProvider(resolver, priorityRetrieveProvider));
context.getContext().registerTerminologyProvider(prefetchRetriever.getTerminologyProvider());
return evaluateCdsHooksPlanDefinition(context.getContext(), context.getPlanDefinition(),
diff --git a/src/main/java/org/opencds/cqf/cds/providers/PrefetchDataProviderDstu2.java b/src/main/java/org/opencds/cqf/cds/providers/PrefetchDataProviderDstu2.java
index 7fbd888..1738266 100644
--- a/src/main/java/org/opencds/cqf/cds/providers/PrefetchDataProviderDstu2.java
+++ b/src/main/java/org/opencds/cqf/cds/providers/PrefetchDataProviderDstu2.java
@@ -1,8 +1,11 @@
package org.opencds.cqf.cds.providers;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.FhirVersionEnum;
import org.opencds.cqf.cql.engine.elm.execution.InEvaluator;
import org.opencds.cqf.cql.engine.elm.execution.IncludesEvaluator;
import org.opencds.cqf.cql.engine.fhir.model.Dstu2FhirModelResolver;
+import org.opencds.cqf.cql.engine.fhir.model.FhirModelResolver;
import org.opencds.cqf.cql.engine.model.ModelResolver;
import org.opencds.cqf.cql.engine.retrieve.RetrieveProvider;
import org.opencds.cqf.cql.engine.retrieve.TerminologyAwareRetrieveProvider;
@@ -10,25 +13,28 @@
import org.opencds.cqf.cql.engine.runtime.DateTime;
import org.opencds.cqf.cql.engine.runtime.Interval;
import org.opencds.cqf.cql.engine.terminology.ValueSetInfo;
+import org.opencds.cqf.cql.evaluator.execution.util.CodeUtil;
import java.util.*;
public class PrefetchDataProviderDstu2 extends TerminologyAwareRetrieveProvider {
private Map> prefetchResources;
- private ModelResolver resolver;
- private RetrieveProvider remoteProvider;
-
- public PrefetchDataProviderDstu2(List