Skip to content

Commit

Permalink
Add method to construct custom library
Browse files Browse the repository at this point in the history
  • Loading branch information
barhodes committed Sep 17, 2024
1 parent d09287f commit 5b1495b
Showing 1 changed file with 37 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.fhirpath.IFhirPath;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.opencds.cqf.fhir.cql.engine.parameters.CqlParameterDefinition;
import org.opencds.cqf.fhir.utility.FhirPathCache;
Expand All @@ -31,10 +32,11 @@ public String constructCqlLibrary(

StringBuilder sb = new StringBuilder();

constructHeader(sb);
constructHeader(sb, "expression", "1.0.0");
constructUsings(sb);
constructIncludes(sb, libraries);
constructParameters(sb, parameters);
constructContext(sb, null);
constructExpression(sb, expression);

String cql = sb.toString();
Expand All @@ -43,6 +45,31 @@ public String constructCqlLibrary(
return cql;
}

public String constructCqlLibrary(
String name,
String version,
List<String> expressions,
List<Pair<String, String>> libraries,
List<CqlParameterDefinition> parameters) {
logger.debug("Constructing library {} for expression set", name);

StringBuilder sb = new StringBuilder();

constructHeader(sb, name, version);
constructUsings(sb);
constructIncludes(sb, libraries);
constructParameters(sb, parameters);
constructContext(sb, null);
for (var expression : expressions) {
sb.append(String.format("%s%n%n", expression));
}

String cql = sb.toString();

logger.debug(cql);
return cql;
}

private void constructExpression(StringBuilder sb, String expression) {
sb.append(String.format("%ndefine \"return\":%n %s", expression));
}
Expand Down Expand Up @@ -70,6 +97,7 @@ private void constructIncludes(StringBuilder sb, List<Pair<String, String>> libr
sb.append("\n");
}
}
sb.append("\n");
}

private void constructParameters(StringBuilder sb, List<CqlParameterDefinition> parameters) {
Expand Down Expand Up @@ -98,11 +126,16 @@ private String getTypeDeclaration(String type, Boolean isList) {

private void constructUsings(StringBuilder sb) {
sb.append(String.format(
"using FHIR version '%s'%n",
"using FHIR version '%s'%n%n",
getFhirVersionString(fhirContext.getVersion().getVersion())));
}

private void constructHeader(StringBuilder sb) {
sb.append(String.format("library expression version '1.0.0'%n%n"));
private void constructHeader(StringBuilder sb, String name, String version) {
sb.append(String.format("library %s version '%s'%n%n", name, version));
}

private void constructContext(StringBuilder sb, String contextType) {
sb.append(String.format(
String.format("context %s%n%n", StringUtils.isBlank(contextType) ? "Patient" : contextType)));
}
}

0 comments on commit 5b1495b

Please sign in to comment.