
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.renderers.utils.RenderingContext; 011import org.hl7.fhir.r5.renderers.utils.ResourceWrapper; 012import org.hl7.fhir.r5.utils.EOperationOutcome; 013import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; 014import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 015import org.hl7.fhir.utilities.xhtml.XhtmlNode; 016 017@MarkedToMoveToAdjunctPackage 018public class ParametersRenderer extends ResourceRenderer { 019 020 public ParametersRenderer(RenderingContext context) { 021 super(context); 022 } 023 024 025 @Override 026 public String buildSummary(ResourceWrapper r) throws UnsupportedEncodingException, IOException { 027 List<ResourceWrapper> params = r.children("parameter"); 028 if (params.size() < 8) { 029 CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); 030 for (ResourceWrapper p : params) { 031 b.append(p.primitiveValue("name")); 032 } 033 return context.formatMessage(RenderingContext.PARS_SUMMARY_LIST, b.toString()); 034 } else { 035 return context.formatMessage(RenderingContext.PARS_SUMMARY_SIZE, params.size()); 036 } 037 } 038 039 public ParametersRenderer setMultiLangMode(boolean multiLangMode) { 040 this.multiLangMode = multiLangMode; 041 return this; 042 } 043 044 @Override 045 public void buildNarrative(RenderingStatus status, XhtmlNode x, ResourceWrapper r) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { 046 renderResourceTechDetails(r, x); 047 x.h2().tx(context.formatPhrase(RenderingContext.GENERAL_PARS)); 048 XhtmlNode tbl = x.table("grid", false); 049 params(status, tbl, r.children("parameter"), 0); 050 } 051 052 private void params(RenderingStatus status, XhtmlNode tbl, List<ResourceWrapper> list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome { 053 for (ResourceWrapper p : list) { 054 XhtmlNode tr = tbl.tr(); 055 XhtmlNode td = tr.td(); 056 for (int i = 0; i < indent; i++) { 057 td.tx(XhtmlNode.NBSP); 058 } 059 if (p.has("name")) { 060 td.tx(p.primitiveValue("name")); 061 } else { 062 td.tx("???"); 063 } 064 if (p.has("value")) { 065 renderDataType(status, tr.td(), p.child("value")); 066 } else if (p.has("resource")) { 067 ResourceWrapper rw = p.child("resource"); 068 td = tr.td(); 069 XhtmlNode para = td.para(); 070 para.tx(rw.fhirType()+"/"+rw.getId()); 071 checkAddLink(para, rw.fhirType()+"_"+rw.getId()); 072 checkAddLink(para, rw.fhirType()+"_"+rw.getScopedId()); 073 checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getId()); 074 checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getScopedId()); 075 if (rw.has("meta")) { 076 ResourceWrapper m = rw.child("meta"); 077 String ver = m.primitiveValue("version"); 078 if (ver != null) { 079 checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getId()+"/"+ver); 080 checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getScopedId()+"/"+ver); 081 } 082 } 083 XhtmlNode x = rw.getNarrative(); 084 if (x != null) { 085 td.addChildren(x); 086 } else { 087 ResourceRenderer rr = RendererFactory.factory(rw, context); 088 rr.buildNarrative(status, td, rw); 089 } 090 } else if (p.has("part")) { 091 tr.td(); 092 params(status, tbl, p.children("part"), indent+1); 093 } 094 } 095 } 096 097 098 private void checkAddLink(XhtmlNode para, String anchor) { 099 if (!context.hasAnchor(anchor)) { 100 context.addAnchor(anchor); 101 para.an(context.prefixAnchor(anchor)).tx(" "); 102 } 103 104 105 } 106 107}