001package org.hl7.fhir.r5.renderers; 002 003import java.io.IOException; 004import java.io.UnsupportedEncodingException; 005 006import org.hl7.fhir.r5.model.CodeableConcept; 007import org.hl7.fhir.r5.model.Provenance; 008import org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent; 009import org.hl7.fhir.r5.model.Reference; 010import org.hl7.fhir.r5.model.Resource; 011import org.hl7.fhir.r5.model.UriType; 012import org.hl7.fhir.r5.renderers.utils.BaseWrappers.ResourceWrapper; 013import org.hl7.fhir.r5.renderers.utils.RenderingContext; 014import org.hl7.fhir.utilities.xhtml.XhtmlNode; 015 016public class ProvenanceRenderer extends ResourceRenderer { 017 018 public ProvenanceRenderer(RenderingContext context) { 019 super(context); 020 } 021 022 public boolean render(XhtmlNode x, Resource prv) throws UnsupportedEncodingException, IOException { 023 return render(x, (Provenance) prv); 024 } 025 026 public boolean render(XhtmlNode x, Provenance prv) throws UnsupportedEncodingException, IOException { 027 boolean hasExtensions = false; 028 029 if (!prv.getTarget().isEmpty()) { 030 if (prv.getTarget().size() == 1) { 031 XhtmlNode p = x.para(); 032 p.tx("Provenance for "); 033 renderReference(prv, p, prv.getTargetFirstRep()); 034 } else { 035 x.para().tx("Provenance for:"); 036 XhtmlNode ul = x.ul(); 037 for (Reference ref : prv.getTarget()) { 038 renderReference(prv, ul.li(), ref); 039 } 040 } 041 } 042 // summary table 043 x.para().tx("Summary"); 044 XhtmlNode t = x.table("grid"); 045 XhtmlNode tr; 046 if (prv.hasOccurred()) { 047 tr = t.tr(); 048 tr.td().tx("Occurrence"); 049 if (prv.hasOccurredPeriod()) { 050 renderPeriod(tr.td(), prv.getOccurredPeriod()); 051 } else { 052 renderDateTime(tr.td(), prv.getOccurredDateTimeType()); 053 } 054 } 055 if (prv.hasRecorded()) { 056 tr = t.tr(); 057 tr.td().tx("Recorded"); 058 tr.td().addText(prv.getRecordedElement().toHumanDisplay()); 059 } 060 if (prv.hasPolicy()) { 061 tr = t.tr(); 062 tr.td().tx("Policy"); 063 if (prv.getPolicy().size() == 1) { 064 renderUri(tr.td(), prv.getPolicy().get(0)); 065 } else { 066 XhtmlNode ul = tr.td().ul(); 067 for (UriType u : prv.getPolicy()) { 068 renderUri(ul.li(), u); 069 } 070 } 071 } 072 if (prv.hasLocation()) { 073 tr = t.tr(); 074 tr.td().tx("Location"); 075 renderReference(prv, tr.td(), prv.getLocation()); 076 } 077 if (prv.hasActivity()) { 078 tr = t.tr(); 079 tr.td().tx("Activity"); 080 renderCodeableConcept(tr.td(), prv.getActivity(), false); 081 } 082 083 boolean hasType = false; 084 boolean hasRole = false; 085 boolean hasOnBehalfOf = false; 086 for (ProvenanceAgentComponent a : prv.getAgent()) { 087 hasType = hasType || a.hasType(); 088 hasRole = hasRole || a.hasRole(); 089 hasOnBehalfOf = hasOnBehalfOf || a.hasOnBehalfOf(); 090 } 091 x.para().b().tx("Agents"); 092 t = x.table("grid"); 093 tr = t.tr(); 094 if (hasType) { 095 tr.td().b().tx("Type"); 096 } 097 if (hasRole) { 098 tr.td().b().tx("Role"); 099 } 100 tr.td().b().tx("who"); 101 if (hasOnBehalfOf) { 102 tr.td().b().tx("On Behalf Of"); 103 } 104 for (ProvenanceAgentComponent a : prv.getAgent()) { 105 tr = t.tr(); 106 if (hasType) { 107 if (a.hasType()) { 108 renderCodeableConcept(tr.td(), a.getType(), false); 109 } else { 110 tr.td(); 111 } 112 } 113 if (hasRole) { 114 if (a.hasRole()) { 115 if (a.getRole().size() == 1) { 116 renderCodeableConcept(tr.td(), a.getType(), false); 117 } else { 118 XhtmlNode ul = tr.td().ul(); 119 for (CodeableConcept cc : a.getRole()) { 120 renderCodeableConcept(ul.li(), cc, false); 121 } 122 } 123 } else { 124 tr.td(); 125 } 126 } 127 if (a.hasWho()) { 128 renderReference(prv, tr.td(), a.getWho()); 129 } else { 130 tr.td(); 131 } 132 if (hasOnBehalfOf) { 133 if (a.hasOnBehalfOf()) { 134 renderReference(prv, tr.td(), a.getOnBehalfOf()); 135 } else { 136 tr.td(); 137 } 138 } 139 } 140 // agent table 141 142 return hasExtensions; 143 } 144 145 public String display(Resource dr) throws UnsupportedEncodingException, IOException { 146 return display((Provenance) dr); 147 } 148 149 public String display(Provenance prv) throws UnsupportedEncodingException, IOException { 150 return "Provenance for "+displayReference(prv, prv.getTargetFirstRep()); 151 } 152 153 @Override 154 public String display(ResourceWrapper r) throws UnsupportedEncodingException, IOException { 155 return "Not done yet"; 156 } 157 158}