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;
008
009public class RendererFactory {
010
011  public static ResourceRenderer factory(String resourceName, RenderingContext context) {
012
013    if (context.getTemplateProvider() != null) {
014      String liquidTemplate = context.getTemplateProvider().findTemplate(context, resourceName);
015      if (liquidTemplate != null) {
016        return new LiquidRenderer(context, liquidTemplate);
017      }
018    }
019
020    if ("CodeSystem".equals(resourceName)) {
021      return new CodeSystemRenderer(context);
022    }
023    if ("ValueSet".equals(resourceName)) {
024      return new ValueSetRenderer(context);
025    }
026    if ("ConceptMap".equals(resourceName)) {
027      return new ConceptMapRenderer(context);
028    }
029
030    if ("CapabilityStatement".equals(resourceName)) {
031      return new CapabilityStatementRenderer(context);
032    }
033    if ("StructureDefinition".equals(resourceName)) {
034      return new StructureDefinitionRenderer(context);
035    }
036    if ("OperationDefinition".equals(resourceName)) {
037      return new OperationDefinitionRenderer(context);
038    }
039    if ("SearchParameter".equals(resourceName)) {
040      return new SearchParameterRenderer(context);
041    }
042    if ("CompartmentDefinition".equals(resourceName)) {
043      return new CompartmentDefinitionRenderer(context);
044    }
045    if ("ImplementationGuide".equals(resourceName)) {
046      return new ImplementationGuideRenderer(context);
047    }
048    if ("NamingSystem".equals(resourceName)) {
049      return new NamingSystemRenderer(context);
050    }
051    if ("Questionnaire".equals(resourceName)) {
052      return new QuestionnaireRenderer(context);
053    }
054
055    if ("QuestionnaireResponse".equals(resourceName)) {
056      return new QuestionnaireResponseRenderer(context);
057    }
058
059    if ("Patient".equals(resourceName)) {
060      return new PatientRenderer(context);
061    }
062    if ("Encounter".equals(resourceName)) {
063      return new EncounterRenderer(context);
064    }
065    if ("Library".equals(resourceName)) {
066      return new LibraryRenderer(context);
067    }
068    if ("List".equals(resourceName)) {
069      return new ListRenderer(context);
070    }
071    if ("DiagnosticReport".equals(resourceName)) {
072      return new DiagnosticReportRenderer(context);
073    }
074
075    if ("Provenance".equals(resourceName)) {
076      return new ProvenanceRenderer(context);
077    }
078    if ("OperationOutcome".equals(resourceName)) {
079      return new OperationOutcomeRenderer(context);
080    }
081    if ("Parameters".equals(resourceName)) {
082      return new ParametersRenderer(context);
083    }
084    if ("Bundle".equals(resourceName)) {
085      return new BundleRenderer(context);
086    }
087    return new ProfileDrivenRenderer(context);    
088  }
089
090  public static ResourceRenderer factory(Resource resource, RenderingContext context) {
091
092    if (context.getTemplateProvider() != null && resource instanceof DomainResource) {
093      String liquidTemplate = context.getTemplateProvider().findTemplate(context, (DomainResource) resource);
094      if (liquidTemplate != null) {
095        return new LiquidRenderer(context, liquidTemplate);
096      }
097    }
098
099    return factory(resource.fhirType(), context);
100  }
101
102
103  public static ResourceRenderer factory(ResourceWrapper resource, RenderingContext context, ResourceContext resourceContext) {
104    if (context.getTemplateProvider() != null) {
105      String liquidTemplate = context.getTemplateProvider().findTemplate(context, resource.getName());
106      if (liquidTemplate != null) {
107        return new LiquidRenderer(context, liquidTemplate);
108      }
109    }
110
111    if ("List".equals(resource.getName())) {
112      return new ListRenderer(context);
113    }
114    if ("Library".equals(resource.getName())) {
115      return new LibraryRenderer(context);
116    }
117    if ("Patient".equals(resource.getName())) {
118      return new PatientRenderer(context);
119    }
120    if ("DiagnosticReport".equals(resource.getName())) {
121      return new DiagnosticReportRenderer(context);
122    }
123    if ("QuestionnaireResponse".equals(resource.getName())) {
124      return new QuestionnaireResponseRenderer(context);
125    }
126
127    return new ProfileDrivenRenderer(context, resourceContext);    
128  }
129
130  public static ResourceRenderer factory(ResourceWrapper rw, RenderingContext lrc) {
131    return factory(rw, lrc, null);
132  }
133
134
135}