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