Class OrchestrationEngine

java.lang.Object
org.techbd.orchestrate.fhir.OrchestrationEngine

public class OrchestrationEngine extends Object
The OrchestrationEngine class is responsible for managing and orchestrating FHIR validation sessions. It contains inner classes and interfaces that define the structure and behavior of the validation engines and the orchestration sessions.

This class also includes a cache for OrchestrationEngine.ValidationEngine instances to ensure that only one instance of each type is used for a given FHIR profile URL.

Usage example:


 OrchestrationEngine engine = new OrchestrationEngine();

 OrchestrationEngine.OrchestrationSession session1 = engine.session()
         .withPayloads(List.of("payload1", "payload2"))
         .withFhirProfileUrl("http://example.com/fhirProfile")
         .addHapiValidationEngine()
         .addHl7ValidationApiEngine()
         .addInfernoValidationEngine()
         .build();

 OrchestrationEngine.OrchestrationSession session2 = engine.session()
         .withPayloads(List.of("payload3", "payload4"))
         .withFhirProfileUrl("http://example.com/fhirProfile")
         .addHapiValidationEngine()
         .build();

 engine.orchestrate(session1, session2);

 for (OrchestrationEngine.OrchestrationSession session : engine.getSessions()) {
     for (OrchestrationEngine.ValidationResult result : session.getValidationResults()) {
         System.out.println("Is valid: " + result.isValid());
         for (OrchestrationEngine.ValidationIssue issue : result.getIssues()) {
             System.out.println("Issue: " + issue.getMessage());
         }
     }
 }
 

Key components:

  • ValidationEngineIdentifier: Enumeration to identify different validation engine types.
  • ValidationEngineKey: A composite key class used to uniquely identify each OrchestrationEngine.ValidationEngine instance by its type and FHIR profile URL.
  • session(): This method returns a new OrchestrationEngine.OrchestrationSession.Builder instance that is aware of the OrchestrationEngine instance.
  • ValidationResult Interface: Defines the methods isValid and getIssues for the validation result.
  • ValidationIssue Interface: Defines the getMessage method for validation issues.
  • ValidationEngine Interface: Defines the validate method which each validation engine must implement.
  • HapiValidationEngine, Hl7ValidationEngine, InfernoValidationEngine: Implement the ValidationEngine interface, each providing its own validation logic and holding the fhirProfileUrl as a member field. These classes return anonymous classes for ValidationResult and ValidationIssue.
  • OrchestrationSession: Holds a list of OrchestrationEngine.ValidationEngine instances, payloads, and validation results. The validate method performs validation and stores the results. The Builder class within OrchestrationSession allows setting the fhirProfileUrl and adding specific validation engine implementations that use this URL.