
001package org.hl7.fhir.r5.renderers; 002 003import org.hl7.fhir.r5.model.DomainResource; 004import org.hl7.fhir.r5.model.Resource; 005import org.hl7.fhir.r5.renderers.utils.RenderingContext; 006import org.hl7.fhir.r5.renderers.utils.ResourceWrapper; 007import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 008import org.hl7.fhir.utilities.Utilities; 009 010@MarkedToMoveToAdjunctPackage 011public class RendererFactory { 012 013 public static ResourceRenderer factory(String resourceName, RenderingContext context) { 014 015 if (context.getTemplateProvider() != null) { 016 String liquidTemplate = context.getTemplateProvider().findTemplate(context, resourceName); 017 if (liquidTemplate != null) { 018 return new LiquidRenderer(context, liquidTemplate); 019 } 020 } 021 switch (resourceName) { 022 case "ActorDefinition": return new ActorDefinitionRenderer(context); 023 case "Bundle": return new BundleRenderer(context); 024 case "CapabilityStatement": return new CapabilityStatementRenderer(context); 025 case "CodeSystem": return new CodeSystemRenderer(context); 026 case "CompartmentDefinition": return new CompartmentDefinitionRenderer(context); 027 case "ConceptMap": return new ConceptMapRenderer(context); 028 case "DiagnosticReport": return new DiagnosticReportRenderer(context); 029 case "ExampleScenario": return new ExampleScenarioRenderer(context); 030 case "ImplementationGuide": return new ImplementationGuideRenderer(context); 031 case "Library": return new LibraryRenderer(context); 032 case "List": return new ListRenderer(context); 033 case "NamingSystem": return new NamingSystemRenderer(context); 034 case "OperationDefinition": return new OperationDefinitionRenderer(context); 035 case "OperationOutcome": return new OperationOutcomeRenderer(context); 036 case "Parameters": return new ParametersRenderer(context); 037 case "Patient": return new PatientRenderer(context); 038 case "Provenance": return new ProvenanceRenderer(context); 039 case "Questionnaire": return new QuestionnaireRenderer(context); 040 case "QuestionnaireResponse": return new QuestionnaireResponseRenderer(context); 041 case "Requirements": return new RequirementsRenderer(context); 042 case "SearchParameter": return new SearchParameterRenderer(context); 043 case "StructureDefinition": return new StructureDefinitionRenderer(context); 044 case "StructureMap": return new StructureMapRenderer(context); 045 case "SubscriptionTopic": return new SubscriptionTopicRenderer(context); 046 case "TestPlan": return new TestPlanRenderer(context); 047 case "ValueSet": return new ValueSetRenderer(context); 048 case "ViewDefinition": return new ViewDefinitionRenderer(context); 049 case "WebTemplate": return new WebTemplateRenderer(context); 050 } 051 return new ProfileDrivenRenderer(context); 052 } 053 054 public static ResourceRenderer factory(Resource resource, RenderingContext context) { 055 056 if (context.getTemplateProvider() != null && resource instanceof DomainResource) { 057 String liquidTemplate = context.getTemplateProvider().findTemplate(context, (DomainResource) resource); 058 if (liquidTemplate != null) { 059 return new LiquidRenderer(context, liquidTemplate); 060 } 061 } 062 063 return factory(resource.fhirType(), context); 064 } 065 066 067 public static ResourceRenderer factory(ResourceWrapper resource, RenderingContext context) { 068 if (context.getTemplateProvider() != null) { 069 String liquidTemplate = context.getTemplateProvider().findTemplate(context, resource.fhirType()); 070 if (liquidTemplate != null) { 071 return new LiquidRenderer(context, liquidTemplate); 072 } 073 } 074 switch (resource.fhirType()) { 075 case "DiagnosticReport": return new DiagnosticReportRenderer(context); 076 case "Library": return new LibraryRenderer(context); 077 case "ViewDefinition": return new ViewDefinitionRenderer(context); 078 case "WebTemplate": return new WebTemplateRenderer(context); 079 case "FeatureDefinition": return new FeatureDefinitionRenderer(context); 080 case "List": return new ListRenderer(context); 081 case "Patient": return new PatientRenderer(context); 082 case "Provenance": return new ProvenanceRenderer(context); 083 case "Parameters": return new ParametersRenderer(context); 084 case "Questionnaire": return new QuestionnaireRenderer(context); 085 case "QuestionnaireResponse": return new QuestionnaireResponseRenderer(context); 086 } 087 if (resource.isDirect()) { 088 switch (resource.fhirType()) { 089 090 case "ActorDefinition": return new ActorDefinitionRenderer(context); 091 case "Bundle": return new BundleRenderer(context); 092 case "CapabilityStatement": return new CapabilityStatementRenderer(context); 093 case "CodeSystem": return new CodeSystemRenderer(context); 094 case "CompartmentDefinition": return new CompartmentDefinitionRenderer(context); 095 case "ConceptMap": return new ConceptMapRenderer(context); 096 case "ExampleScenario": return new ExampleScenarioRenderer(context); 097 case "ImplementationGuide": return new ImplementationGuideRenderer(context); 098 case "NamingSystem": return new NamingSystemRenderer(context); 099 case "OperationDefinition": return new OperationDefinitionRenderer(context); 100 case "OperationOutcome": return new OperationOutcomeRenderer(context); 101 case "Requirements": return new RequirementsRenderer(context); 102 case "SearchParameter": return new SearchParameterRenderer(context); 103 case "StructureDefinition": return new StructureDefinitionRenderer(context); 104 case "StructureMap": return new StructureMapRenderer(context); 105 case "SubscriptionTopic": return new SubscriptionTopicRenderer(context); 106 case "TestPlan": return new TestPlanRenderer(context); 107 case "ValueSet": return new ValueSetRenderer(context); 108 } 109 } 110 111 return new ProfileDrivenRenderer(context); 112 } 113 114 public static boolean hasSpecificRenderer(String rt) { 115 116 return Utilities.existsInList(rt, 117 "CodeSystem", "ValueSet", "ConceptMap", 118 "CapabilityStatement", "CompartmentDefinition", "ImplementationGuide", "Library", "NamingSystem", "OperationDefinition", 119 "Questionnaire", "SearchParameter", "StructureDefinition", "ActorDefinition", "Requirements", "TestPlan", "ExampleScenario"); 120 } 121 122 /** 123 * This is a list of renderers that return something different in IG mode, and the implementation guide 124 * publisher will regenerate the narrative for the IG mode 125 * @param rt 126 * @return 127 */ 128 public static boolean hasIGSpecificRenderer(String rt) { 129 130 return Utilities.existsInList(rt, "ValueSet", "CapabilityStatement", "Questionnaire"); 131 } 132 133 134}