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.BaseWrappers.ResourceWrapper; 006import org.hl7.fhir.r5.renderers.utils.RenderingContext; 007import org.hl7.fhir.r5.renderers.utils.Resolver.ResourceContext; 008import org.hl7.fhir.utilities.Utilities; 009 010public class RendererFactory { 011 012 public static ResourceRenderer factory(String resourceName, RenderingContext context) { 013 014 if (context.getTemplateProvider() != null) { 015 String liquidTemplate = context.getTemplateProvider().findTemplate(context, resourceName); 016 if (liquidTemplate != null) { 017 return new LiquidRenderer(context, liquidTemplate); 018 } 019 } 020 021 if ("CodeSystem".equals(resourceName)) { 022 return new CodeSystemRenderer(context); 023 } 024 if ("ValueSet".equals(resourceName)) { 025 return new ValueSetRenderer(context); 026 } 027 if ("ConceptMap".equals(resourceName)) { 028 return new ConceptMapRenderer(context); 029 } 030 031 if ("CapabilityStatement".equals(resourceName)) { 032 return new CapabilityStatementRenderer(context); 033 } 034 if ("StructureDefinition".equals(resourceName)) { 035 return new StructureDefinitionRenderer(context); 036 } 037 if ("OperationDefinition".equals(resourceName)) { 038 return new OperationDefinitionRenderer(context); 039 } 040 if ("SearchParameter".equals(resourceName)) { 041 return new SearchParameterRenderer(context); 042 } 043 if ("CompartmentDefinition".equals(resourceName)) { 044 return new CompartmentDefinitionRenderer(context); 045 } 046 if ("ImplementationGuide".equals(resourceName)) { 047 return new ImplementationGuideRenderer(context); 048 } 049 if ("NamingSystem".equals(resourceName)) { 050 return new NamingSystemRenderer(context); 051 } 052 if ("Questionnaire".equals(resourceName)) { 053 return new QuestionnaireRenderer(context); 054 } 055 056 if ("QuestionnaireResponse".equals(resourceName)) { 057 return new QuestionnaireResponseRenderer(context); 058 } 059 060 if ("Patient".equals(resourceName)) { 061 return new PatientRenderer(context); 062 } 063 if ("Encounter".equals(resourceName)) { 064 return new EncounterRenderer(context); 065 } 066 if ("Library".equals(resourceName)) { 067 return new LibraryRenderer(context); 068 } 069 if ("List".equals(resourceName)) { 070 return new ListRenderer(context); 071 } 072 if ("DiagnosticReport".equals(resourceName)) { 073 return new DiagnosticReportRenderer(context); 074 } 075 076 if ("Provenance".equals(resourceName)) { 077 return new ProvenanceRenderer(context); 078 } 079 if ("OperationOutcome".equals(resourceName)) { 080 return new OperationOutcomeRenderer(context); 081 } 082 if ("Parameters".equals(resourceName)) { 083 return new ParametersRenderer(context); 084 } 085 if ("Bundle".equals(resourceName)) { 086 return new BundleRenderer(context); 087 } 088 if ("ActorDefinition".equals(resourceName)) { 089 return new ActorDefinitionRenderer(context); 090 } 091 if ("Requirements".equals(resourceName)) { 092 return new RequirementsRenderer(context); 093 } 094 return new ProfileDrivenRenderer(context); 095 } 096 097 public static ResourceRenderer factory(Resource resource, RenderingContext context) { 098 099 if (context.getTemplateProvider() != null && resource instanceof DomainResource) { 100 String liquidTemplate = context.getTemplateProvider().findTemplate(context, (DomainResource) resource); 101 if (liquidTemplate != null) { 102 return new LiquidRenderer(context, liquidTemplate); 103 } 104 } 105 106 return factory(resource.fhirType(), context); 107 } 108 109 110 public static ResourceRenderer factory(ResourceWrapper resource, RenderingContext context, ResourceContext resourceContext) { 111 if (context.getTemplateProvider() != null) { 112 String liquidTemplate = context.getTemplateProvider().findTemplate(context, resource.getName()); 113 if (liquidTemplate != null) { 114 return new LiquidRenderer(context, liquidTemplate); 115 } 116 } 117 118 if ("List".equals(resource.getName())) { 119 return new ListRenderer(context); 120 } 121 if ("Library".equals(resource.getName())) { 122 return new LibraryRenderer(context); 123 } 124 if ("Patient".equals(resource.getName())) { 125 return new PatientRenderer(context); 126 } 127 if ("DiagnosticReport".equals(resource.getName())) { 128 return new DiagnosticReportRenderer(context); 129 } 130 if ("QuestionnaireResponse".equals(resource.getName())) { 131 return new QuestionnaireResponseRenderer(context); 132 } 133 134 return new ProfileDrivenRenderer(context, resourceContext); 135 } 136 137 public static ResourceRenderer factory(ResourceWrapper rw, RenderingContext lrc) { 138 return factory(rw, lrc, null); 139 } 140 141 public static boolean hasSpecificRenderer(String rt) { 142 143 return Utilities.existsInList(rt, 144 "CodeSystem", "ValueSet", "ConceptMap", 145 "CapabilityStatement", "CompartmentDefinition", "ImplementationGuide", "Library", "NamingSystem", "OperationDefinition", 146 "Questionnaire", "SearchParameter", "StructureDefinition", "ActorDefinition", "Requirements"); 147 } 148 149 /** 150 * This is a list of renderers that return something different in IG mode, and the implementation guide 151 * publisher will regenerate the narrative for the IG mode 152 * @param rt 153 * @return 154 */ 155 public static boolean hasIGSpecificRenderer(String rt) { 156 157 return Utilities.existsInList(rt, "ValueSet", "CapabilityStatement", "Questionnaire"); 158 } 159 160 161}