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 @Override 033 public boolean render(XhtmlNode x, Resource r) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 034 x.h2().tx("Parameters"); 035 XhtmlNode tbl = x.table("grid"); 036 params(tbl, ((Parameters) r).getParameter(), 0); 037 return false; 038 } 039 040 @Override 041 public String display(Resource r) throws UnsupportedEncodingException, IOException { 042 return null; 043 } 044 045 @Override 046 public String display(ResourceWrapper r) throws UnsupportedEncodingException, IOException { 047 return null; 048 } 049 050 @Override 051 public boolean render(XhtmlNode x, ResourceWrapper params) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 052 x.h2().tx("Parameters"); 053 XhtmlNode tbl = x.table("grid"); 054 PropertyWrapper pw = getProperty(params, "parameter"); 055 if (valued(pw)) { 056 paramsW(tbl, pw.getValues(), 0); 057 } 058 return false; 059 } 060 061 private void paramsW(XhtmlNode tbl, List<BaseWrapper> list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome { 062 for (BaseWrapper p : list) { 063 XhtmlNode tr = tbl.tr(); 064 XhtmlNode td = tr.td(); 065 for (int i = 0; i < indent; i++) { 066 td.tx(XhtmlNode.NBSP); 067 } 068 if (p.has("name")) { 069 td.tx(p.get("name").primitiveValue()); 070 } else { 071 td.tx("???"); 072 } 073 if (p.has("value")) { 074 renderBase(tr.td(), p.get("value")); 075 } else if (p.has("resource")) { 076 ResourceWrapper rw = p.getChildByName("resource").getAsResource(); 077 td = tr.td(); 078 XhtmlNode para = td.para(); 079 para.tx(rw.fhirType()+"/"+rw.getId()); 080 para.an(rw.fhirType()+"_"+rw.getId()).tx(" "); 081 XhtmlNode x = rw.getNarrative(); 082 if (x != null) { 083 td.addChildren(x); 084 } else { 085 ResourceRenderer rr = RendererFactory.factory(rw, context, rcontext); 086 rr.render(td, rw); 087 } 088 } else if (p.has("part")) { 089 tr.td(); 090 PropertyWrapper pw = getProperty(p, "part"); 091 paramsW(tbl, pw.getValues(), 1); 092 } 093 } 094 } 095 096 public XhtmlNode render(Parameters params) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 097 XhtmlNode div = new XhtmlNode(NodeType.Element, "div"); 098 div.h2().tx("Parameters"); 099 XhtmlNode tbl = div.table("grid"); 100 params(tbl, params.getParameter(), 0); 101 return div; 102 } 103 104 private void params(XhtmlNode tbl, List<ParametersParameterComponent> list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome { 105 for (ParametersParameterComponent p : list) { 106 XhtmlNode tr = tbl.tr(); 107 XhtmlNode td = tr.td(); 108 for (int i = 0; i < indent; i++) { 109 td.tx(XhtmlNode.NBSP); 110 } 111 td.tx(p.getName()); 112 if (p.hasValue()) { 113 render(tr.td(), p.getValue()); 114 } else if (p.hasResource()) { 115 Resource r = p.getResource(); 116 td = tr.td(); 117 XhtmlNode para = td.para(); 118 para.tx(r.fhirType()+"/"+r.getId()); 119 para.an(r.fhirType()+"_"+r.getId()).tx(" "); 120 ResourceRenderer rr = RendererFactory.factory(r, context); 121 rr.render(td, r); 122 } else if (p.hasPart()) { 123 tr.td(); 124 params(tbl, p.getPart(), 1); 125 } 126 } 127 } 128 129}