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