diff --git a/onfhir-path/src/main/scala/io/onfhir/path/FhirPathFunctionEvaluator.scala b/onfhir-path/src/main/scala/io/onfhir/path/FhirPathFunctionEvaluator.scala index d6e4a92f..6c25e9de 100644 --- a/onfhir-path/src/main/scala/io/onfhir/path/FhirPathFunctionEvaluator.scala +++ b/onfhir-path/src/main/scala/io/onfhir/path/FhirPathFunctionEvaluator.scala @@ -8,6 +8,7 @@ import org.json4s.JsonAST._ import java.time._ import java.time.temporal.Temporal +import java.util.Base64 import scala.concurrent.Await import scala.concurrent.duration.DurationInt import scala.language.postfixOps @@ -856,7 +857,7 @@ class FhirPathFunctionEvaluator(context: FhirPathEnvironment, current: Seq[FhirP /** - * String manipulation functions ttp://hl7.org/fhirpath/#string-manipulation + * String manipulation functions http://hl7.org/fhirpath/#string-manipulation * * @return */ @@ -1015,6 +1016,13 @@ class FhirPathFunctionEvaluator(context: FhirPathEnvironment, current: Seq[FhirP current.headOption.map(c => Seq(FhirPathNumber(c.asInstanceOf[FhirPathString].s.length))).getOrElse(Nil) } + @FhirPathFunction(documentation = "\uD83D\uDCDC Encodes the input string to a Base64-encoded binary.\n\n\uD83D\uDD19 _@return_\n```\nZmluYWw=\n``` \n\uD83D\uDCA1 **E.g.** 'final'.encode()", + insertText = "encode()", detail = "", label = "encode", kind = "Method", returnType = Seq("base64Binary"), inputType = Seq("string")) + def encode(): Seq[FhirPathResult] = { + checkSingleString() + current.headOption.map(c => Seq(FhirPathString(Base64.getEncoder.encodeToString(c.asInstanceOf[FhirPathString].s.getBytes("UTF-8"))))).getOrElse(Nil) + } + /** * Tree navigation function http://hl7.org/fhirpath/#tree-navigation */ diff --git a/onfhir-path/src/test/scala/io/onfhir/path/FhirPathEvaluatorTest.scala b/onfhir-path/src/test/scala/io/onfhir/path/FhirPathEvaluatorTest.scala index 8120b4f2..736c2cb5 100644 --- a/onfhir-path/src/test/scala/io/onfhir/path/FhirPathEvaluatorTest.scala +++ b/onfhir-path/src/test/scala/io/onfhir/path/FhirPathEvaluatorTest.scala @@ -577,6 +577,8 @@ class FhirPathEvaluatorTest extends Specification { //length FhirPathEvaluator().evaluateNumerical("Observation.performer.display.length()", observation) mustEqual Seq(12) FhirPathEvaluator().evaluate("{}", observation) must empty + //encode + FhirPathEvaluator().evaluateString("Observation.status.encode()", observation).head mustEqual "ZmluYWw=" } "evaluate paths with tree navigation functions" in { FhirPathEvaluator().evaluate("Questionnaire.children()", questionnaire).length mustEqual 12