Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.opencds.cqf.fhir.benchmark;

import ca.uhn.fhir.repository.IRepository;
import org.opencds.cqf.fhir.cr.CrSettings;
import org.opencds.cqf.fhir.cr.activitydefinition.ActivityDefinitionProcessor;
import org.opencds.cqf.fhir.utility.repository.operations.IActivityDefinitionProcessor;
import org.opencds.cqf.fhir.utility.repository.operations.IActivityDefinitionProcessorFactory;
Expand All @@ -9,6 +10,7 @@ public class ActivityDefinitionProcessorFactory implements IActivityDefinitionPr

@Override
public IActivityDefinitionProcessor create(IRepository repository) {
return new ActivityDefinitionProcessor(repository);
return new ActivityDefinitionProcessor(
repository, CrSettings.getDefault(), null, null, new NoOpRepositoryProxyFactory());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.opencds.cqf.fhir.benchmark;

import ca.uhn.fhir.repository.IRepository;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.opencds.cqf.fhir.utility.repository.RepositoryProxyFactory;

/**
* A RepositoryProxyFactory that always returns the local Repository for tests only.
*/
public class NoOpRepositoryProxyFactory implements RepositoryProxyFactory {

@Override
public IRepository proxy(
IRepository localRepository,
Boolean useServerData,
IBaseResource dataEndpoint,
IBaseResource contentEndpoint,
IBaseResource terminologyEndpoint) {
return localRepository;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.MeasureReport;
import org.opencds.cqf.fhir.benchmark.NoOpRepositoryProxyFactory;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.SEARCH_FILTER_MODE;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.TERMINOLOGY_FILTER_MODE;
import org.opencds.cqf.fhir.cql.engine.terminology.TerminologySettings.VALUESET_EXPANSION_MODE;
Expand Down Expand Up @@ -85,7 +86,12 @@ public Given evaluationOptions(MeasureEvaluationOptions evaluationOptions) {
}

private R4MultiMeasureService buildMultiMeasureService() {
return new R4MultiMeasureService(repository, evaluationOptions, serverBase, measurePeriodValidator);
return new R4MultiMeasureService(
repository,
evaluationOptions,
serverBase,
measurePeriodValidator,
new NoOpRepositoryProxyFactory());
}

public When when() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,12 @@
import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.json.JSONException;
import org.opencds.cqf.cql.engine.model.ModelResolver;
import org.opencds.cqf.fhir.benchmark.NoOpRepositoryProxyFactory;
import org.opencds.cqf.fhir.benchmark.TestOperationProvider;
import org.opencds.cqf.fhir.benchmark.helpers.DataRequirementsLibrary;
import org.opencds.cqf.fhir.benchmark.helpers.GeneratedPackage;
import org.opencds.cqf.fhir.cql.EvaluationSettings;
import org.opencds.cqf.fhir.cql.LibraryEngine;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.SEARCH_FILTER_MODE;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.TERMINOLOGY_FILTER_MODE;
import org.opencds.cqf.fhir.cql.engine.terminology.TerminologySettings.VALUESET_EXPANSION_MODE;
Expand All @@ -53,6 +55,7 @@
import org.opencds.cqf.fhir.utility.model.FhirModelResolverCache;
import org.opencds.cqf.fhir.utility.monad.Eithers;
import org.opencds.cqf.fhir.utility.repository.InMemoryFhirRepository;
import org.opencds.cqf.fhir.utility.repository.Repositories;
import org.opencds.cqf.fhir.utility.repository.ig.IgRepository;
import org.skyscreamer.jsonassert.JSONAssert;

Expand Down Expand Up @@ -138,16 +141,17 @@ public PlanDefinitionProcessor buildProcessor(IRepository repository) {
.setValuesetExpansionMode(VALUESET_EXPANSION_MODE.PERFORM_NAIVE_EXPANSION);
}
var crSettings = CrSettings.getDefault().withEvaluationSettings(evaluationSettings);
return new PlanDefinitionProcessor(repository, crSettings);
return new PlanDefinitionProcessor(repository, crSettings, null, null, new NoOpRepositoryProxyFactory());
}

public When when() {
return new When(repository, buildProcessor(repository));
return new When(this, repository);
}
}

@SuppressWarnings("UnstableApiUsage")
public static class When {
private final Given given;
private final IRepository repository;
private final PlanDefinitionProcessor processor;
private final IParser jsonParser;
Expand All @@ -168,9 +172,10 @@ public static class When {
private IBaseParameters parameters;
private boolean isPackagePut;

public When(IRepository repository, PlanDefinitionProcessor processor) {
public When(Given given, IRepository repository) {
this.given = given;
this.repository = repository;
this.processor = processor;
this.processor = given.buildProcessor(repository);
jsonParser = repository.fhirContext().newJsonParser();
}

Expand Down Expand Up @@ -272,7 +277,10 @@ public IBaseBundle applyR5() {
if (additionalDataId != null) {
loadAdditionalData(readRepository(repository, additionalDataId));
}
var param = (IParametersAdapter) IAdapterFactory.createAdapterForResource(processor.applyR5(
var proxiedRepo = Repositories.proxy(
repository, useServerData, dataRepository, contentRepository, terminologyRepository);
var applyProcessor = given.buildProcessor(proxiedRepo);
var param = (IParametersAdapter) IAdapterFactory.createAdapterForResource(applyProcessor.applyR5(
Eithers.forMiddle3(Ids.newId(repository.fhirContext(), PLAN_DEFINITION, planDefinitionId)),
List.of(subjectId),
encounterId,
Expand All @@ -284,12 +292,9 @@ public IBaseBundle applyR5() {
null,
null,
parameters,
useServerData,
additionalData,
prefetchData,
dataRepository,
contentRepository,
terminologyRepository));
new LibraryEngine(proxiedRepo, applyProcessor.settings().getEvaluationSettings())));
return (IBaseBundle) param.getParameter().get(0).getResource();
}

Expand All @@ -301,9 +306,12 @@ public GeneratedCarePlan thenApply() {
if (additionalDataId != null) {
loadAdditionalData(readRepository(repository, additionalDataId));
}
var proxiedRepo = Repositories.proxy(
repository, useServerData, dataRepository, contentRepository, terminologyRepository);
var applyProcessor = given.buildProcessor(proxiedRepo);
return new GeneratedCarePlan(
repository,
processor.apply(
applyProcessor.apply(
Eithers.forMiddle3(Ids.newId(repository.fhirContext(), PLAN_DEFINITION, planDefinitionId)),
subjectId,
encounterId,
Expand All @@ -315,12 +323,10 @@ public GeneratedCarePlan thenApply() {
null,
null,
parameters,
useServerData,
additionalData,
prefetchData,
dataRepository,
contentRepository,
terminologyRepository));
new LibraryEngine(
proxiedRepo, applyProcessor.settings().getEvaluationSettings())));
}

public GeneratedPackage thenPackage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.opencds.cqf.fhir.benchmark.NoOpRepositoryProxyFactory;
import org.opencds.cqf.fhir.cql.EvaluationSettings;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.SEARCH_FILTER_MODE;
import org.opencds.cqf.fhir.cql.engine.retrieve.RetrieveSettings.TERMINOLOGY_FILTER_MODE;
Expand Down Expand Up @@ -53,7 +54,7 @@ public QuestionnaireProcessor buildProcessor(IRepository repository) {
.setValuesetExpansionMode(VALUESET_EXPANSION_MODE.PERFORM_NAIVE_EXPANSION);
}
var crSettings = CrSettings.getDefault().withEvaluationSettings(evaluationSettings);
return new QuestionnaireProcessor(repository, crSettings, null);
return new QuestionnaireProcessor(repository, crSettings, null, new NoOpRepositoryProxyFactory());
}

public When when() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@
import org.opencds.cqf.fhir.cr.hapi.common.StringTimePeriodHandler;
import org.opencds.cqf.fhir.cr.measure.common.MeasurePeriodValidator;
import org.opencds.cqf.fhir.utility.client.TerminologyServerClientSettings;
import org.opencds.cqf.fhir.utility.repository.DefaultRepositoryProxyFactory;
import org.opencds.cqf.fhir.utility.repository.RepositoryProxyFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CrBaseConfig {
@Bean
RepositoryProxyFactory repositoryProxyFactory() {
return new DefaultRepositoryProxyFactory();
}

@Bean
CrSettings settings(
EvaluationSettings evaluationSettings, TerminologyServerClientSettings terminologyServerClientSettings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.opencds.cqf.fhir.cr.questionnaire.QuestionnaireProcessor;
import org.opencds.cqf.fhir.cr.questionnaireresponse.QuestionnaireResponseProcessor;
import org.opencds.cqf.fhir.cr.valueset.ValueSetProcessor;
import org.opencds.cqf.fhir.utility.repository.RepositoryProxyFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
Expand All @@ -34,14 +35,20 @@
@Import({CrBaseConfig.class})
public class CrProcessorConfig {
@Bean
ICqlProcessorFactory cqlProcessorFactory(IRepositoryFactory repositoryFactory, CrSettings crSettings) {
return rd -> new CqlProcessor(repositoryFactory.create(rd), crSettings);
ICqlProcessorFactory cqlProcessorFactory(
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new CqlProcessor(repositoryFactory.create(rd), crSettings, null, repositoryProxyFactory);
}

@Bean
IActivityDefinitionProcessorFactory activityDefinitionProcessorFactory(
IRepositoryFactory repositoryFactory, CrSettings crSettings) {
return rd -> new ActivityDefinitionProcessor(repositoryFactory.create(rd), crSettings);
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new ActivityDefinitionProcessor(
repositoryFactory.create(rd), crSettings, null, null, repositoryProxyFactory);
}

@Bean
Expand All @@ -52,27 +59,39 @@ IImplementationGuideProcessorFactory implementationGuideProcessorFactory(

@Bean
IPlanDefinitionProcessorFactory planDefinitionProcessorFactory(
IRepositoryFactory repositoryFactory, CrSettings crSettings) {
return rd -> new PlanDefinitionProcessor(repositoryFactory.create(rd), crSettings);
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new PlanDefinitionProcessor(
repositoryFactory.create(rd), crSettings, null, null, repositoryProxyFactory);
}

@Bean
IQuestionnaireProcessorFactory questionnaireProcessorFactory(
IRepositoryFactory repositoryFactory, CrSettings crSettings) {
return rd -> new QuestionnaireProcessor(repositoryFactory.create(rd), crSettings);
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new QuestionnaireProcessor(repositoryFactory.create(rd), crSettings, null, repositoryProxyFactory);
}

@Bean
IQuestionnaireResponseProcessorFactory questionnaireResponseProcessorFactory(
IRepositoryFactory repositoryFactory, CrSettings crSettings) {
return rd -> new QuestionnaireResponseProcessor(repositoryFactory.create(rd), crSettings);
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new QuestionnaireResponseProcessor(
repositoryFactory.create(rd), crSettings, null, repositoryProxyFactory);
}

@Bean
ILibraryProcessorFactory libraryProcessorFactory(IRepositoryFactory repositoryFactory, CrSettings crSettings) {
ILibraryProcessorFactory libraryProcessorFactory(
IRepositoryFactory repositoryFactory,
CrSettings crSettings,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> {
var repository = repositoryFactory.create(rd);
return new LibraryProcessor(repository, crSettings, List.of(new HapiArtifactDiffProcessor(repository)));
return new LibraryProcessor(
repository, crSettings, List.of(new HapiArtifactDiffProcessor(repository)), repositoryProxyFactory);
};
}

Expand All @@ -89,8 +108,10 @@ IGraphDefinitionProcessorFactory graphDefinitionProcessorFactory(

@Bean
IGraphDefinitionApplyRequestBuilderFactory graphDefinitionApplyRequestBuilderFactory(
IRepositoryFactory repositoryFactory, EvaluationSettings evaluationSettings) {
IRepositoryFactory repositoryFactory,
EvaluationSettings evaluationSettings,
RepositoryProxyFactory repositoryProxyFactory) {

return rd -> new ApplyRequestBuilder(repositoryFactory.create(rd), evaluationSettings);
return rd -> new ApplyRequestBuilder(repositoryFactory.create(rd), evaluationSettings, repositoryProxyFactory);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.opencds.cqf.fhir.cr.measure.r4.R4MultiMeasureService;
import org.opencds.cqf.fhir.cr.measure.r4.R4SubmitDataService;
import org.opencds.cqf.fhir.cr.measure.r4.utils.R4MeasureServiceUtils;
import org.opencds.cqf.fhir.utility.repository.RepositoryProxyFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -73,22 +74,29 @@ public class CrR4Config {
R4MeasureEvaluatorSingleFactory r4MeasureServiceFactory(
IRepositoryFactory repositoryFactory,
MeasureEvaluationOptions evaluationOptions,
MeasurePeriodValidator measurePeriodValidator) {
MeasurePeriodValidator measurePeriodValidator,
RepositoryProxyFactory repositoryProxyFactory) {
// We are effectively returning an R4MeasureEvaluatorSingle her
return requestDetails -> new R4MultiMeasureService(
repositoryFactory.create(requestDetails),
evaluationOptions,
requestDetails.getFhirServerBase(),
measurePeriodValidator);
measurePeriodValidator,
repositoryProxyFactory);
}

@Bean
R4MeasureEvaluatorMultipleFactory r4MeasureEvaluatorMultipleFactory(
IRepositoryFactory repositoryFactory,
MeasureEvaluationOptions evaluationOptions,
MeasurePeriodValidator measurePeriodValidator) {
MeasurePeriodValidator measurePeriodValidator,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new R4MultiMeasureService(
repositoryFactory.create(rd), evaluationOptions, rd.getFhirServerBase(), measurePeriodValidator);
repositoryFactory.create(rd),
evaluationOptions,
rd.getFhirServerBase(),
measurePeriodValidator,
repositoryProxyFactory);
}

@Bean
Expand Down Expand Up @@ -132,13 +140,15 @@ ICareGapsServiceFactory careGapsServiceFactory(
IRepositoryFactory repositoryFactory,
CareGapsProperties careGapsProperties,
MeasureEvaluationOptions measureEvaluationOptions,
MeasurePeriodValidator measurePeriodValidator) {
MeasurePeriodValidator measurePeriodValidator,
RepositoryProxyFactory repositoryProxyFactory) {
return rd -> new R4CareGapsService(
careGapsProperties,
repositoryFactory.create(rd),
measureEvaluationOptions,
rd.getFhirServerBase(),
measurePeriodValidator);
measurePeriodValidator,
repositoryProxyFactory);
}

@Bean
Expand Down
Loading
Loading