001package org.hl7.fhir.r5.renderers; 002 003import java.io.IOException; 004import java.io.UnsupportedEncodingException; 005import java.util.List; 006 007import org.hl7.fhir.exceptions.DefinitionException; 008import org.hl7.fhir.exceptions.FHIRException; 009import org.hl7.fhir.exceptions.FHIRFormatError; 010import org.hl7.fhir.r5.model.Parameters; 011import org.hl7.fhir.r5.model.Parameters.ParametersParameterComponent; 012import org.hl7.fhir.r5.model.Resource; 013import org.hl7.fhir.r5.renderers.utils.BaseWrappers.BaseWrapper; 014import org.hl7.fhir.r5.renderers.utils.BaseWrappers.PropertyWrapper; 015import org.hl7.fhir.r5.renderers.utils.BaseWrappers.ResourceWrapper; 016import org.hl7.fhir.r5.renderers.utils.RenderingContext; 017import org.hl7.fhir.r5.renderers.utils.Resolver.ResourceContext; 018import org.hl7.fhir.r5.utils.EOperationOutcome; 019import org.hl7.fhir.utilities.xhtml.NodeType; 020import org.hl7.fhir.utilities.xhtml.XhtmlNode; 021 022public class ParametersRenderer extends ResourceRenderer { 023 024 public ParametersRenderer(RenderingContext context) { 025 super(context); 026 } 027 028 public ParametersRenderer(RenderingContext context, ResourceContext rcontext) { 029 super(context, rcontext); 030 } 031 032 033 public ParametersRenderer setMultiLangMode(boolean multiLangMode) { 034 this.multiLangMode = multiLangMode; 035 return this; 036 } 037 038 @Override 039 public boolean render(XhtmlNode x, Resource r) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 040 x.h2().tx(context.formatPhrase(RenderingContext.GENERAL_PARS)); 041 XhtmlNode tbl = x.table("grid"); 042 params(tbl, ((Parameters) r).getParameter(), 0); 043 return false; 044 } 045 046 @Override 047 public String display(Resource r) throws UnsupportedEncodingException, IOException { 048 return null; 049 } 050 051 @Override 052 public String display(ResourceWrapper r) throws UnsupportedEncodingException, IOException { 053 return null; 054 } 055 056 @Override 057 public boolean render(XhtmlNode x, ResourceWrapper params) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 058 x.h2().tx(context.formatPhrase(RenderingContext.GENERAL_PARS)); 059 XhtmlNode tbl = x.table("grid"); 060 PropertyWrapper pw = getProperty(params, "parameter"); 061 if (valued(pw)) { 062 paramsW(tbl, pw.getValues(), 0); 063 } 064 return false; 065 } 066 067 private void paramsW(XhtmlNode tbl, List<BaseWrapper> list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome { 068 for (BaseWrapper p : list) { 069 XhtmlNode tr = tbl.tr(); 070 XhtmlNode td = tr.td(); 071 for (int i = 0; i < indent; i++) { 072 td.tx(XhtmlNode.NBSP); 073 } 074 if (p.has("name")) { 075 td.tx(p.get("name").primitiveValue()); 076 } else { 077 td.tx("???"); 078 } 079 if (p.has("value")) { 080 renderBase(tr.td(), p.get("value")); 081 } else if (p.has("resource")) { 082 ResourceWrapper rw = p.getChildByName("resource").getAsResource(); 083 td = tr.td(); 084 XhtmlNode para = td.para(); 085 para.tx(rw.fhirType()+"/"+rw.getId()); 086 para.an(rw.fhirType()+"_"+rw.getId()).tx(" "); 087 para.an("hc"+rw.fhirType()+"_"+rw.getId()).tx(" "); 088 XhtmlNode x = rw.getNarrative(); 089 if (x != null) { 090 td.addChildren(x); 091 } else { 092 ResourceRenderer rr = RendererFactory.factory(rw, context, rcontext); 093 rr.render(td, rw); 094 } 095 } else if (p.has("part")) { 096 tr.td(); 097 PropertyWrapper pw = getProperty(p, "part"); 098 paramsW(tbl, pw.getValues(), 1); 099 } 100 } 101 } 102 103 public XhtmlNode render(Parameters params) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 104 XhtmlNode div = new XhtmlNode(NodeType.Element, "div"); 105 div.h2().tx(context.formatPhrase(RenderingContext.GENERAL_PARS)); 106 XhtmlNode tbl = div.table("grid"); 107 params(tbl, params.getParameter(), 0); 108 return div; 109 } 110 111 private void params(XhtmlNode tbl, List<ParametersParameterComponent> list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome { 112 for (ParametersParameterComponent p : list) { 113 XhtmlNode tr = tbl.tr(); 114 XhtmlNode td = tr.td(); 115 for (int i = 0; i < indent; i++) { 116 td.tx(XhtmlNode.NBSP); 117 } 118 td.tx(p.getName()); 119 if (p.hasValue()) { 120 render(tr.td(), p.getValue()); 121 } else if (p.hasResource()) { 122 Resource r = p.getResource(); 123 td = tr.td(); 124 XhtmlNode para = td.para(); 125 para.tx(r.fhirType()+"/"+r.getId()); 126 para.an(r.fhirType()+"_"+r.getId()).tx(" "); 127 para.an("hc"+r.fhirType()+"_"+r.getId()).tx(" "); 128 ResourceRenderer rr = RendererFactory.factory(r, context); 129 rr.render(td, r); 130 } else if (p.hasPart()) { 131 tr.td(); 132 params(tbl, p.getPart(), 1); 133 } 134 } 135 } 136 137}