diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_50.java index a9ffd31bb..cc0d3b694 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_50.java @@ -65,6 +65,7 @@ import org.hl7.fhir.convertors.conv10_50.Parameters10_50; import org.hl7.fhir.convertors.conv10_50.Patient10_50; import org.hl7.fhir.convertors.conv10_50.Person10_50; import org.hl7.fhir.convertors.conv10_50.Practitioner10_50; +import org.hl7.fhir.convertors.conv10_50.Provenance10_50; import org.hl7.fhir.convertors.conv10_50.Questionnaire10_50; import org.hl7.fhir.convertors.conv10_50.QuestionnaireResponse10_50; import org.hl7.fhir.convertors.conv10_50.RiskAssessment10_50; @@ -3307,7 +3308,9 @@ public class VersionConvertor_10_50 { if (src instanceof org.hl7.fhir.dstu2.model.Person) return Person10_50.convertPerson((org.hl7.fhir.dstu2.model.Person) src); if (src instanceof org.hl7.fhir.dstu2.model.Practitioner) - return Practitioner10_50.convertPractitioner((org.hl7.fhir.dstu2.model.Practitioner) src); + return Practitioner10_50.convertPractitioner((org.hl7.fhir.dstu2.model.Practitioner) src); + if (src instanceof org.hl7.fhir.dstu2.model.Provenance) + return Provenance10_50.convertProvenance((org.hl7.fhir.dstu2.model.Provenance) src); if (src instanceof org.hl7.fhir.dstu2.model.Questionnaire) return Questionnaire10_50.convertQuestionnaire((org.hl7.fhir.dstu2.model.Questionnaire) src); if (src instanceof org.hl7.fhir.dstu2.model.QuestionnaireResponse) @@ -3420,6 +3423,8 @@ public class VersionConvertor_10_50 { return Person10_50.convertPerson((org.hl7.fhir.r5.model.Person) src); if (src instanceof org.hl7.fhir.r5.model.Practitioner) return Practitioner10_50.convertPractitioner((org.hl7.fhir.r5.model.Practitioner) src); + if (src instanceof org.hl7.fhir.r5.model.Provenance) + return Provenance10_50.convertProvenance((org.hl7.fhir.r5.model.Provenance) src); if (src instanceof org.hl7.fhir.r5.model.Questionnaire) return Questionnaire10_50.convertQuestionnaire((org.hl7.fhir.r5.model.Questionnaire) src); if (src instanceof org.hl7.fhir.r5.model.QuestionnaireResponse) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_30_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_30_50.java index 417489293..7a5564be6 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_30_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/VersionConvertor_30_50.java @@ -85,6 +85,7 @@ import org.hl7.fhir.convertors.conv30_50.Person30_50; import org.hl7.fhir.convertors.conv30_50.PlanDefinition30_50; import org.hl7.fhir.convertors.conv30_50.Practitioner30_50; import org.hl7.fhir.convertors.conv30_50.PractitionerRole30_50; +import org.hl7.fhir.convertors.conv30_50.Provenance30_50; import org.hl7.fhir.convertors.conv30_50.Questionnaire30_50; import org.hl7.fhir.convertors.conv30_50.QuestionnaireResponse30_50; import org.hl7.fhir.convertors.conv30_50.RelatedPerson30_50; @@ -5324,6 +5325,8 @@ public class VersionConvertor_30_50 { return Practitioner30_50.convertPractitioner((org.hl7.fhir.dstu3.model.Practitioner) src); if (src instanceof org.hl7.fhir.dstu3.model.PractitionerRole) return PractitionerRole30_50.convertPractitionerRole((org.hl7.fhir.dstu3.model.PractitionerRole) src); + if (src instanceof org.hl7.fhir.dstu3.model.Provenance) + return Provenance30_50.convertProvenance((org.hl7.fhir.dstu3.model.Provenance) src); if (src instanceof org.hl7.fhir.dstu3.model.Questionnaire) return Questionnaire30_50.convertQuestionnaire((org.hl7.fhir.dstu3.model.Questionnaire) src); if (src instanceof org.hl7.fhir.dstu3.model.QuestionnaireResponse) @@ -5491,6 +5494,8 @@ public class VersionConvertor_30_50 { return Practitioner30_50.convertPractitioner((org.hl7.fhir.r5.model.Practitioner) src); if (src instanceof org.hl7.fhir.r5.model.PractitionerRole) return PractitionerRole30_50.convertPractitionerRole((org.hl7.fhir.r5.model.PractitionerRole) src); + if (src instanceof org.hl7.fhir.r5.model.Provenance) + return Provenance30_50.convertProvenance((org.hl7.fhir.r5.model.Provenance) src); if (src instanceof org.hl7.fhir.r5.model.Questionnaire) return Questionnaire30_50.convertQuestionnaire((org.hl7.fhir.r5.model.Questionnaire) src); if (src instanceof org.hl7.fhir.r5.model.QuestionnaireResponse) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv10_50/Provenance10_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv10_50/Provenance10_50.java new file mode 100644 index 000000000..832de9a33 --- /dev/null +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv10_50/Provenance10_50.java @@ -0,0 +1,208 @@ +package org.hl7.fhir.convertors.conv10_50; + +/*- + * #%L + * org.hl7.fhir.convertors + * %% + * Copyright (C) 2014 - 2019 Health Level 7 + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ +import org.hl7.fhir.convertors.VersionConvertor_10_50; +import org.hl7.fhir.dstu2.model.Period; +import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.utilities.Utilities; + +/* + Copyright (c) 2011+, HL7, Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of HL7 nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +*/ +// Generated on Sun, Feb 24, 2019 11:37+1100 for FHIR v4.0.0 +public class Provenance10_50 extends VersionConvertor_10_50 { + + public static org.hl7.fhir.r5.model.Provenance convertProvenance(org.hl7.fhir.dstu2.model.Provenance src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance tgt = new org.hl7.fhir.r5.model.Provenance(); + copyDomainResource(src, tgt); + for (org.hl7.fhir.dstu2.model.Reference t : src.getTarget()) tgt.addTarget(convertReference(t)); + if (src.hasPeriod()) + tgt.setOccurred(convertType(src.getPeriod())); + if (src.hasRecorded()) + tgt.setRecordedElement(convertInstant(src.getRecordedElement())); + for (org.hl7.fhir.dstu2.model.UriType t : src.getPolicy()) tgt.getPolicy().add(convertUri(t)); + if (src.hasLocation()) + tgt.setLocation(convertReference(src.getLocation())); + for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getReason()) + tgt.addReason(convertCodeableConcept(t)); + if (src.hasActivity()) + tgt.setActivity(convertCodeableConcept(src.getActivity())); + for (org.hl7.fhir.dstu2.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + for (org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityComponent t : src.getEntity()) tgt.addEntity(convertProvenanceEntityComponent(t)); + for (org.hl7.fhir.dstu2.model.Signature t : src.getSignature()) tgt.addSignature(convertSignature(t)); + return tgt; + } + + public static org.hl7.fhir.dstu2.model.Provenance convertProvenance(org.hl7.fhir.r5.model.Provenance src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu2.model.Provenance tgt = new org.hl7.fhir.dstu2.model.Provenance(); + copyDomainResource(src, tgt); + for (org.hl7.fhir.r5.model.Reference t : src.getTarget()) tgt.addTarget(convertReference(t)); + if (src.hasOccurredPeriod()) + tgt.setPeriod(convertPeriod(src.getOccurredPeriod())); + if (src.hasRecorded()) + tgt.setRecordedElement(convertInstant(src.getRecordedElement())); + for (org.hl7.fhir.r5.model.UriType t : src.getPolicy()) tgt.getPolicy().add(convertUri(t)); + if (src.hasLocation()) + tgt.setLocation(convertReference(src.getLocation())); + for (org.hl7.fhir.r5.model.CodeableConcept t : src.getReason()) + tgt.addReason(convertCodeableConcept(t)); + if (src.hasActivity()) + tgt.setActivity(convertCodeableConcept(src.getActivity())); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent t : src.getEntity()) tgt.addEntity(convertProvenanceEntityComponent(t)); + for (org.hl7.fhir.r5.model.Signature t : src.getSignature()) tgt.addSignature(convertSignature(t)); + return tgt; + } + + public static org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent convertProvenanceAgentComponent(org.hl7.fhir.dstu2.model.Provenance.ProvenanceAgentComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent tgt = new org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent(); + copyElement(src, tgt); +// if (src.hasType()) +// tgt.setType(convertCodeableConcept(src.getType())); + if (src.hasRole()) + tgt.getRoleFirstRep().addCoding(convertCoding(src.getRole())); + if (src.hasActor()) + tgt.setWho(convertReference(src.getActor())); + return tgt; + } + + public static org.hl7.fhir.dstu2.model.Provenance.ProvenanceAgentComponent convertProvenanceAgentComponent(org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu2.model.Provenance.ProvenanceAgentComponent tgt = new org.hl7.fhir.dstu2.model.Provenance.ProvenanceAgentComponent(); + copyElement(src, tgt); +// if (src.hasType()) +// tgt.setType(convertCodeableConcept(src.getType())); + for (org.hl7.fhir.r5.model.CodeableConcept t : src.getRole()) + for (org.hl7.fhir.r5.model.Coding t2 : t.getCoding()) + tgt.setRole(convertCoding(t2)); + if (src.hasWho()) + tgt.setActor(convertReference(src.getWho())); + return tgt; + } + + public static org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent convertProvenanceEntityComponent(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent tgt = new org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent(); + copyElement(src, tgt); + if (src.hasRole()) + tgt.setRoleElement(convertProvenanceEntityRole(src.getRoleElement())); + if (src.hasReference()) + tgt.getWhat().setReference(src.getReference()); + tgt.addAgent(convertProvenanceAgentComponent(src.getAgent())); + return tgt; + } + + public static org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityComponent convertProvenanceEntityComponent(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityComponent tgt = new org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityComponent(); + copyElement(src, tgt); + if (src.hasRole()) + tgt.setRoleElement(convertProvenanceEntityRole(src.getRoleElement())); + if (Utilities.isAbsoluteUrl(src.getWhat().getReference())) + tgt.setReference(src.getWhat().getReference()); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.setAgent(convertProvenanceAgentComponent(t)); + return tgt; + } + + static public org.hl7.fhir.r5.model.Enumeration convertProvenanceEntityRole(org.hl7.fhir.dstu2.model.Enumeration src) throws FHIRException { + if (src == null || src.isEmpty()) + return null; + org.hl7.fhir.r5.model.Enumeration tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRoleEnumFactory()); + VersionConvertor_10_50.copyElement(src, tgt); + switch(src.getValue()) { + case DERIVATION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.DERIVATION); + break; + case REVISION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.REVISION); + break; + case QUOTATION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.QUOTATION); + break; + case SOURCE: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.SOURCE); + break; + default: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.NULL); + break; + } + return tgt; + } + + static public org.hl7.fhir.dstu2.model.Enumeration convertProvenanceEntityRole(org.hl7.fhir.r5.model.Enumeration src) throws FHIRException { + if (src == null || src.isEmpty()) + return null; + org.hl7.fhir.dstu2.model.Enumeration tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRoleEnumFactory()); + VersionConvertor_10_50.copyElement(src, tgt); + switch(src.getValue()) { + case DERIVATION: + tgt.setValue(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRole.DERIVATION); + break; + case REVISION: + tgt.setValue(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRole.REVISION); + break; + case QUOTATION: + tgt.setValue(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRole.QUOTATION); + break; + case SOURCE: + tgt.setValue(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRole.SOURCE); + break; + default: + tgt.setValue(org.hl7.fhir.dstu2.model.Provenance.ProvenanceEntityRole.NULL); + break; + } + return tgt; + } +} diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_50/Provenance30_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_50/Provenance30_50.java new file mode 100644 index 000000000..ddd097bb0 --- /dev/null +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_50/Provenance30_50.java @@ -0,0 +1,216 @@ +package org.hl7.fhir.convertors.conv30_50; + +/*- + * #%L + * org.hl7.fhir.convertors + * %% + * Copyright (C) 2014 - 2019 Health Level 7 + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ +import org.hl7.fhir.convertors.VersionConvertor_30_50; +import org.hl7.fhir.dstu3.model.Period; +import org.hl7.fhir.exceptions.FHIRException; + +/* + Copyright (c) 2011+, HL7, Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of HL7 nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +*/ +// Generated on Sun, Feb 24, 2019 11:37+1100 for FHIR v4.0.0 +public class Provenance30_50 extends VersionConvertor_30_50 { + + public static org.hl7.fhir.r5.model.Provenance convertProvenance(org.hl7.fhir.dstu3.model.Provenance src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance tgt = new org.hl7.fhir.r5.model.Provenance(); + copyDomainResource(src, tgt); + for (org.hl7.fhir.dstu3.model.Reference t : src.getTarget()) tgt.addTarget(convertReference(t)); + if (src.hasPeriod()) + tgt.setOccurred(convertType(src.getPeriod())); + if (src.hasRecorded()) + tgt.setRecordedElement(convertInstant(src.getRecordedElement())); + for (org.hl7.fhir.dstu3.model.UriType t : src.getPolicy()) tgt.getPolicy().add(convertUri(t)); + if (src.hasLocation()) + tgt.setLocation(convertReference(src.getLocation())); + for (org.hl7.fhir.dstu3.model.Coding t : src.getReason()) + tgt.addReason().addCoding(convertCoding(t)); + if (src.hasActivity()) + tgt.getActivity().addCoding(convertCoding(src.getActivity())); + for (org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + for (org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityComponent t : src.getEntity()) tgt.addEntity(convertProvenanceEntityComponent(t)); + for (org.hl7.fhir.dstu3.model.Signature t : src.getSignature()) tgt.addSignature(convertSignature(t)); + return tgt; + } + + public static org.hl7.fhir.dstu3.model.Provenance convertProvenance(org.hl7.fhir.r5.model.Provenance src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu3.model.Provenance tgt = new org.hl7.fhir.dstu3.model.Provenance(); + copyDomainResource(src, tgt); + for (org.hl7.fhir.r5.model.Reference t : src.getTarget()) tgt.addTarget(convertReference(t)); + if (src.hasOccurredPeriod()) + tgt.setPeriod(convertPeriod(src.getOccurredPeriod())); + if (src.hasRecorded()) + tgt.setRecordedElement(convertInstant(src.getRecordedElement())); + for (org.hl7.fhir.r5.model.UriType t : src.getPolicy()) tgt.getPolicy().add(convertUri(t)); + if (src.hasLocation()) + tgt.setLocation(convertReference(src.getLocation())); + for (org.hl7.fhir.r5.model.CodeableConcept t : src.getReason()) + for (org.hl7.fhir.r5.model.Coding t2 : t.getCoding()) + tgt.addReason(convertCoding(t2)); + if (src.hasActivity()) + tgt.setActivity(convertCoding(src.getActivity().getCodingFirstRep())); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent t : src.getEntity()) tgt.addEntity(convertProvenanceEntityComponent(t)); + for (org.hl7.fhir.r5.model.Signature t : src.getSignature()) tgt.addSignature(convertSignature(t)); + return tgt; + } + + public static org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent convertProvenanceAgentComponent(org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent tgt = new org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent(); + copyElement(src, tgt); +// if (src.hasType()) +// tgt.setType(convertCodeableConcept(src.getType())); + for (org.hl7.fhir.dstu3.model.CodeableConcept t : src.getRole()) + tgt.addRole(convertCodeableConcept(t)); + if (src.hasWhoReference()) + tgt.setWho(convertReference(src.getWhoReference())); + if (src.hasOnBehalfOfReference()) + tgt.setOnBehalfOf(convertReference(src.getOnBehalfOfReference())); + return tgt; + } + + public static org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent convertProvenanceAgentComponent(org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent tgt = new org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent(); + copyElement(src, tgt); +// if (src.hasType()) +// tgt.setType(convertCodeableConcept(src.getType())); + for (org.hl7.fhir.r5.model.CodeableConcept t : src.getRole()) tgt.addRole(convertCodeableConcept(t)); + if (src.hasWho()) + tgt.setWho(convertReference(src.getWho())); + if (src.hasOnBehalfOf()) + tgt.setOnBehalfOf(convertReference(src.getOnBehalfOf())); + return tgt; + } + + public static org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent convertProvenanceEntityComponent(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent tgt = new org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent(); + copyElement(src, tgt); + if (src.hasRole()) + tgt.setRoleElement(convertProvenanceEntityRole(src.getRoleElement())); + if (src.hasWhatReference()) + tgt.setWhat(convertReference(src.getWhatReference())); + for (org.hl7.fhir.dstu3.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + return tgt; + } + + public static org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityComponent convertProvenanceEntityComponent(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityComponent tgt = new org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityComponent(); + copyElement(src, tgt); + if (src.hasRole()) + tgt.setRoleElement(convertProvenanceEntityRole(src.getRoleElement())); + if (src.hasWhat()) + tgt.setWhat(convertReference(src.getWhat())); + for (org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent t : src.getAgent()) tgt.addAgent(convertProvenanceAgentComponent(t)); + return tgt; + } + + static public org.hl7.fhir.r5.model.Enumeration convertProvenanceEntityRole(org.hl7.fhir.dstu3.model.Enumeration src) throws FHIRException { + if (src == null || src.isEmpty()) + return null; + org.hl7.fhir.r5.model.Enumeration tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRoleEnumFactory()); + VersionConvertor_30_50.copyElement(src, tgt); + switch(src.getValue()) { + case DERIVATION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.DERIVATION); + break; + case REVISION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.REVISION); + break; + case QUOTATION: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.QUOTATION); + break; + case SOURCE: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.SOURCE); + break; + case REMOVAL: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.REMOVAL); + break; + default: + tgt.setValue(org.hl7.fhir.r5.model.Provenance.ProvenanceEntityRole.NULL); + break; + } + return tgt; + } + + static public org.hl7.fhir.dstu3.model.Enumeration convertProvenanceEntityRole(org.hl7.fhir.r5.model.Enumeration src) throws FHIRException { + if (src == null || src.isEmpty()) + return null; + org.hl7.fhir.dstu3.model.Enumeration tgt = new org.hl7.fhir.dstu3.model.Enumeration<>(new org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRoleEnumFactory()); + VersionConvertor_30_50.copyElement(src, tgt); + switch(src.getValue()) { + case DERIVATION: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.DERIVATION); + break; + case REVISION: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.REVISION); + break; + case QUOTATION: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.QUOTATION); + break; + case SOURCE: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.SOURCE); + break; + case REMOVAL: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.REMOVAL); + break; + default: + tgt.setValue(org.hl7.fhir.dstu3.model.Provenance.ProvenanceEntityRole.NULL); + break; + } + return tgt; + } +} diff --git a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType10_50Test.java b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType10_50Test.java index cf756616a..b74de2a6f 100644 --- a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType10_50Test.java +++ b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType10_50Test.java @@ -38,7 +38,6 @@ public class VersionConvertorPrimitiveType10_50Test { Assertions.assertEquals(ae5.getId(), ae2.getId()); } - @ParameterizedTest(name = "Testing dstu2 -> r5 conversion of null value {0}.") @MethodSource("dstu2PrimitiveTypes") public void testNullValueDstu2Primitive(String classname, T obj) { diff --git a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType30_50Test.java b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType30_50Test.java index d93e3d641..6221ecdd7 100644 --- a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType30_50Test.java +++ b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType30_50Test.java @@ -30,13 +30,22 @@ import java.util.stream.Stream; public class VersionConvertorPrimitiveType30_50Test { private static final String AUDIT_EVENT_SOURCE = "{\"resourceType\" : \"AuditEvent\",\"id\" : \"example\",\"text\" : {\"status\" : \"generated\",\"div\" : \"
Application Start for under service login "Grahame" (id: Grahame's Test HL7Connect)
\"},\"type\" : {\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110100\",\"display\" : \"Application Activity\"},\"subtype\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110120\",\"display\" : \"Application Start\"}],\"action\" : \"E\",\"recorded\" : \"2012-10-25T22:04:27+11:00\",\"outcome\" : \"0\",\"agent\" : [{\"role\" : [{\"text\" : \"Service User (Logon)\"}],\"userId\" : {\"value\" : \"Grahame\"},\"requestor\" : false,\"network\" : {\"address\" : \"127.0.0.1\",\"type\" : \"2\"}},{\"role\" : [{\"coding\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110153\",\"display\" : \"Source Role ID\"}]}],\"userId\" : {\"value\" : \"2.16.840.1.113883.4.2|2.16.840.1.113883.4.2\"},\"altId\" : \"6580\",\"requestor\" : false,\"network\" : {\"address\" : \"Workstation1.ehr.familyclinic.com\",\"type\" : \"1\"}}],\"source\" : {\"site\" : \"Development\",\"identifier\" : {\"value\" : \"Grahame's Laptop\"},\"type\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110122\",\"display\" : \"Login\"}]},\"entity\" : [{\"identifier\" : {\"type\" : {\"coding\" : [{\"system\" : \"http://hl7.org/fhir/identifier-type\",\"code\" : \"SNO\"}],\"text\" : \"Dell Serial Number\"},\"value\" : \"ABCDEF\"},\"type\" : {\"system\" : \"http://hl7.org/fhir/object-type\",\"code\" : \"4\",\"display\" : \"Other\"},\"role\" : {\"system\" : \"http://hl7.org/fhir/object-role\",\"code\" : \"4\",\"display\" : \"Domain Resource\"},\"lifecycle\" : {\"system\" : \"http://hl7.org/fhir/dicom-audit-lifecycle\",\"code\" : \"6\",\"display\" : \"Access / Use\"},\"name\" : \"Grahame's Laptop\"}]}"; - + private static final String PROVENANCE_SOURCE = "{\"resourceType\" : \"Provenance\",\"id\" : \"example\",\"text\" : {\"status\" : \"generated\",\"div\" : \"
procedure record authored on 27-June 2015 by Harold Hippocrates, MD Content extracted from XDS managed CDA Referral received 26-June
\"},\"target\" : [{\"reference\" : \"Procedure/example/_history/1\"}],\"period\" : {\"start\" : \"2015-06-27\",\"end\" : \"2015-06-28\"},\"recorded\" : \"2015-06-27T08:39:24+10:00\",\"policy\" : [\"http://acme.com/fhir/Consent/25\"],\"location\" : {\"reference\" : \"Location/1\"},\"reason\" : [{\"system\" : \"http://snomed.info/sct\",\"code\" : \"3457005\",\"display\" : \"Referral\"}],\"agent\" : [{\"role\" : [{\"coding\" : [{\"system\" : \"http://hl7.org/fhir/v3/ParticipationType\",\"code\" : \"AUT\"}]}],\"whoReference\" : {\"reference\" : \"Practitioner/xcda-author\"},\"onBehalfOfUri\" : \"#a1\",\"relatedAgentType\" : {\"text\" : \"used\"}},{\"id\" : \"a1\",\"role\" : [{\"coding\" : [{\"system\" : \"http://hl7.org/fhir/v3/ParticipationType\",\"code\" : \"DEV\"}]}],\"whoReference\" : {\"reference\" : \"Device/software\"}}],\"entity\" : [{\"role\" : \"source\",\"whatReference\" : {\"reference\" : \"DocumentReference/example\",\"display\" : \"CDA Document in XDS repository\"}}]}"; + @Test public void testAuditEvent() throws FHIRFormatError, IOException { org.hl7.fhir.dstu3.model.AuditEvent ae3 = (org.hl7.fhir.dstu3.model.AuditEvent) new org.hl7.fhir.dstu3.formats.JsonParser().parse(AUDIT_EVENT_SOURCE); org.hl7.fhir.r5.model.AuditEvent ae5 = (org.hl7.fhir.r5.model.AuditEvent) VersionConvertor_30_50.convertResource(ae3, false); Assertions.assertEquals(ae5.getId(), ae3.getId()); } + + + @Test + public void testProvenance() throws FHIRFormatError, IOException { + org.hl7.fhir.dstu3.model.Provenance ae3 = (org.hl7.fhir.dstu3.model.Provenance) new org.hl7.fhir.dstu3.formats.JsonParser().parse(PROVENANCE_SOURCE); + org.hl7.fhir.r5.model.Provenance ae5 = (org.hl7.fhir.r5.model.Provenance) VersionConvertor_30_50.convertResource(ae3, false); + Assertions.assertEquals(ae5.getId(), ae3.getId()); + } @ParameterizedTest(name = "Testing dstu3 -> r5 conversion of null value {0}.") @MethodSource("dstu3PrimitiveTypes") diff --git a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType40_50Test.java b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType40_50Test.java index 98a80c086..00ad1f516 100644 --- a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType40_50Test.java +++ b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/VersionConvertorPrimitiveType40_50Test.java @@ -30,6 +30,7 @@ import java.util.stream.Stream; public class VersionConvertorPrimitiveType40_50Test { private static final String AUDIT_EVENT_SOURCE = "{\"resourceType\" : \"AuditEvent\",\"id\" : \"example\",\"text\" : {\"status\" : \"generated\",\"div\" : \"
Application Start for under service login "Grahame" (id: Grahame's Test HL7Connect)
\"},\"type\" : {\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110100\",\"display\" : \"Application Activity\"},\"subtype\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110120\",\"display\" : \"Application Start\"}],\"action\" : \"E\",\"recorded\" : \"2012-10-25T22:04:27+11:00\",\"outcome\" : \"0\",\"agent\" : [{\"type\" : {\"coding\" : [{\"system\" : \"http://terminology.hl7.org/CodeSystem/extra-security-role-type\",\"code\" : \"humanuser\",\"display\" : \"human user\"}]},\"role\" : [{\"text\" : \"Service User (Logon)\"}],\"who\" : {\"identifier\" : {\"value\" : \"Grahame\"}},\"requestor\" : false,\"network\" : {\"address\" : \"127.0.0.1\",\"type\" : \"2\"}},{\"type\" : {\"coding\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110153\",\"display\" : \"Source Role ID\"}]},\"who\" : {\"identifier\" : {\"system\" : \"urn:oid:2.16.840.1.113883.4.2\",\"value\" : \"2.16.840.1.113883.4.2\"}},\"altId\" : \"6580\",\"requestor\" : false,\"network\" : {\"address\" : \"Workstation1.ehr.familyclinic.com\",\"type\" : \"1\"}}],\"source\" : {\"site\" : \"Development\",\"observer\" : {\"display\" : \"Grahame's Laptop\"},\"type\" : [{\"system\" : \"http://dicom.nema.org/resources/ontology/DCM\",\"code\" : \"110122\",\"display\" : \"Login\"}]},\"entity\" : [{\"what\" : {\"identifier\" : {\"type\" : {\"coding\" : [{\"system\" : \"http://terminology.hl7.org/CodeSystem/v2-0203\",\"code\" : \"SNO\"}],\"text\" : \"Dell Serial Number\"},\"value\" : \"ABCDEF\"}},\"type\" : {\"system\" : \"http://terminology.hl7.org/CodeSystem/audit-entity-type\",\"code\" : \"4\",\"display\" : \"Other\"},\"role\" : {\"system\" : \"http://terminology.hl7.org/CodeSystem/object-role\",\"code\" : \"4\",\"display\" : \"Domain Resource\"},\"lifecycle\" : {\"system\" : \"http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle\",\"code\" : \"6\",\"display\" : \"Access / Use\"},\"name\" : \"Grahame's Laptop\"}]}"; + private static final String PROVENANCE_SOURCE = "{\"resourceType\" : \"Provenance\",\"id\" : \"example\",\"text\" : {\"status\" : \"generated\",\"div\" : \"
procedure record authored on 27-June 2015 by Harold Hippocrates, MD Content extracted from XDS managed CDA Referral received 26-June as authorized by a referenced Consent.
\"},\"target\" : [{\"reference\" : \"Procedure/example/_history/1\"}],\"occurredPeriod\" : {\"start\" : \"2015-06-27\",\"end\" : \"2015-06-28\"},\"recorded\" : \"2015-06-27T08:39:24+10:00\",\"policy\" : [\"http://acme.com/fhir/Consent/25\"],\"location\" : {\"reference\" : \"Location/1\"},\"reason\" : [{\"coding\" : [{\"system\" : \"http://snomed.info/sct\",\"code\" : \"3457005\",\"display\" : \"Referral\"}]}],\"agent\" : [{\"type\" : {\"coding\" : [{\"system\" : \"http://terminology.hl7.org/CodeSystem/v3-ParticipationType\",\"code\" : \"AUT\"}]},\"who\" : {\"reference\" : \"Practitioner/xcda-author\"}},{\"id\" : \"a1\",\"type\" : {\"coding\" : [{\"system\" : \"http://terminology.hl7.org/CodeSystem/v3-ParticipationType\",\"code\" : \"DEV\"}]},\"who\" : {\"reference\" : \"Device/software\"}}],\"entity\" : [{\"role\" : \"source\",\"what\" : {\"reference\" : \"DocumentReference/example\",\"display\" : \"CDA Document in XDS repository\"}}]}"; @Test public void testAuditEvent() throws FHIRFormatError, IOException { @@ -39,6 +40,14 @@ public class VersionConvertorPrimitiveType40_50Test { } + @Test + public void testProvenance() throws FHIRFormatError, IOException { + org.hl7.fhir.r4.model.Provenance ae4 = (org.hl7.fhir.r4.model.Provenance) new org.hl7.fhir.r4.formats.JsonParser().parse(PROVENANCE_SOURCE); + org.hl7.fhir.r5.model.Provenance ae5 = (org.hl7.fhir.r5.model.Provenance) VersionConvertor_40_50.convertResource(ae4); + Assertions.assertEquals(ae5.getId(), ae4.getId()); + } + + @ParameterizedTest(name = "Testing r4 -> r5 conversion of null value {0}.") @MethodSource("r4PrimitiveTypes") public void testNullValueDstu2Primitive(String classname, T obj) { diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NarrativeGenerator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NarrativeGenerator.java index 0e028f0f6..96274a1ee 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NarrativeGenerator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NarrativeGenerator.java @@ -156,6 +156,8 @@ import org.hl7.fhir.r5.model.Patient; import org.hl7.fhir.r5.model.Period; import org.hl7.fhir.r5.model.PrimitiveType; import org.hl7.fhir.r5.model.Property; +import org.hl7.fhir.r5.model.Provenance; +import org.hl7.fhir.r5.model.Provenance.ProvenanceAgentComponent; import org.hl7.fhir.r5.model.Quantity; import org.hl7.fhir.r5.model.Questionnaire; import org.hl7.fhir.r5.model.Range; @@ -335,25 +337,27 @@ public class NarrativeGenerator implements INarrativeGenerator { } } if (r instanceof ConceptMap) { - return generate(rcontext, (ConceptMap) r); // Maintainer = Grahame + return generate(rcontext, (ConceptMap) r); } else if (r instanceof ValueSet) { - return generate(rcontext, (ValueSet) r, true); // Maintainer = Grahame + return generate(rcontext, (ValueSet) r, true); } else if (r instanceof CodeSystem) { - return generate(rcontext, (CodeSystem) r, true, null); // Maintainer = Grahame + return generate(rcontext, (CodeSystem) r, true, null); } else if (r instanceof OperationOutcome) { - return generate(rcontext, (OperationOutcome) r); // Maintainer = Grahame + return generate(rcontext, (OperationOutcome) r); } else if (r instanceof CapabilityStatement) { - return generate(rcontext, (CapabilityStatement) r); // Maintainer = Grahame + return generate(rcontext, (CapabilityStatement) r); } else if (r instanceof CompartmentDefinition) { - return generate(rcontext, (CompartmentDefinition) r); // Maintainer = Grahame + return generate(rcontext, (CompartmentDefinition) r); } else if (r instanceof OperationDefinition) { - return generate(rcontext, (OperationDefinition) r); // Maintainer = Grahame + return generate(rcontext, (OperationDefinition) r); } else if (r instanceof StructureDefinition) { - return generate(rcontext, (StructureDefinition) r, outputTracker); // Maintainer = Grahame + return generate(rcontext, (StructureDefinition) r, outputTracker); } else if (r instanceof List) { - return generate(rcontext, (ListResource) r); // Maintainer = Grahame + return generate(rcontext, (ListResource) r); } else if (r instanceof ImplementationGuide) { - return generate(rcontext, (ImplementationGuide) r); // Maintainer = Lloyd (until Grahame wants to take over . . . :)) + return generate(rcontext, (ImplementationGuide) r); + } else if (r instanceof Provenance) { + return generate(rcontext, new ResourceWrapperDirect(r), (Provenance) r); } else if (r instanceof DiagnosticReport) { inject(r, generateDiagnosticReport(new ResourceWrapperDirect(r)), NarrativeStatus.GENERATED); // Maintainer = Grahame return true; @@ -374,6 +378,7 @@ public class NarrativeGenerator implements INarrativeGenerator { } } + private boolean generateByLiquid(ResourceContext rcontext, DomainResource r, String liquidTemplate, Set outputTracker) { LiquidEngine engine = new LiquidEngine(context, services); @@ -1511,8 +1516,7 @@ public class NarrativeGenerator implements INarrativeGenerator { else if (e instanceof InstantType) x.addText(((InstantType) e).toHumanDisplay()); else if (e instanceof DateTimeType) { - if (e.hasPrimitiveValue()) - x.addText(((DateTimeType) e).toHumanDisplay()); + renderDateTime(x, e); } else if (e instanceof Base64BinaryType) x.addText(new Base64().encodeAsString(((Base64BinaryType) e).getValue())); else if (e instanceof org.hl7.fhir.r5.model.DateType) @@ -1566,35 +1570,10 @@ public class NarrativeGenerator implements INarrativeGenerator { renderQuantity(((Ratio) e).getDenominator(), x, showCodeDetails); } else if (e instanceof Period) { Period p = (Period) e; - x.addText(!p.hasStart() ? "??" : p.getStartElement().toHumanDisplay()); - x.tx(" --> "); - x.addText(!p.hasEnd() ? "(ongoing)" : p.getEndElement().toHumanDisplay()); + renderPeriod(x, p); } else if (e instanceof Reference) { Reference r = (Reference) e; - XhtmlNode c = x; - ResourceWithReference tr = null; - if (r.hasReferenceElement()) { - tr = resolveReference(res, r.getReference(), rc); - - if (!r.getReference().startsWith("#")) { - if (tr != null && tr.getReference() != null) - c = x.ah(tr.getReference()); - else - c = x.ah(r.getReference()); - } - } - // what to display: if text is provided, then that. if the reference was resolved, then show the generated narrative - if (r.hasDisplayElement()) { - c.addText(r.getDisplay()); - if (tr != null && tr.getResource() != null) { - c.tx(". Generated Summary: "); - generateResourceSummary(c, tr.getResource(), true, r.getReference().startsWith("#"), rc); - } - } else if (tr != null && tr.getResource() != null) { - generateResourceSummary(c, tr.getResource(), r.getReference().startsWith("#"), r.getReference().startsWith("#"), rc); - } else { - c.addText(r.getReference()); - } + renderReference(rc, res, x, r); } else if (e instanceof Resource) { return; } else if (e instanceof ElementDefinition) { @@ -1609,6 +1588,44 @@ public class NarrativeGenerator implements INarrativeGenerator { } } + public void renderReference(ResourceContext rc, ResourceWrapper res, XhtmlNode x, Reference r) throws UnsupportedEncodingException, IOException { + XhtmlNode c = x; + ResourceWithReference tr = null; + if (r.hasReferenceElement()) { + tr = resolveReference(res, r.getReference(), rc); + + if (!r.getReference().startsWith("#")) { + if (tr != null && tr.getReference() != null) + c = x.ah(tr.getReference()); + else + c = x.ah(r.getReference()); + } + } + // what to display: if text is provided, then that. if the reference was resolved, then show the generated narrative + if (r.hasDisplayElement()) { + c.addText(r.getDisplay()); + if (tr != null && tr.getResource() != null) { + c.tx(". Generated Summary: "); + generateResourceSummary(c, tr.getResource(), true, r.getReference().startsWith("#"), rc); + } + } else if (tr != null && tr.getResource() != null) { + generateResourceSummary(c, tr.getResource(), r.getReference().startsWith("#"), r.getReference().startsWith("#"), rc); + } else { + c.addText(r.getReference()); + } + } + + public void renderDateTime(XhtmlNode x, Base e) { + if (e.hasPrimitiveValue()) + x.addText(((DateTimeType) e).toHumanDisplay()); + } + + public void renderPeriod(XhtmlNode x, Period p) { + x.addText(!p.hasStart() ? "??" : p.getStartElement().toHumanDisplay()); + x.tx(" --> "); + x.addText(!p.hasEnd() ? "(ongoing)" : p.getEndElement().toHumanDisplay()); + } + private boolean displayLeaf(ResourceWrapper res, BaseWrapper ew, ElementDefinition defn, XhtmlNode x, String name, boolean showCodeDetails, ResourceContext rc) throws FHIRException, UnsupportedEncodingException, IOException { if (ew == null) return false; @@ -1870,6 +1887,10 @@ public class NarrativeGenerator implements INarrativeGenerator { } private void renderCodeableConcept(CodeableConcept cc, XhtmlNode x, boolean showCodeDetails) { + if (cc.isEmpty()) { + return; + } + String s = cc.getText(); if (Utilities.noString(s)) { for (Coding c : cc.getCoding()) { @@ -2111,6 +2132,13 @@ public class NarrativeGenerator implements INarrativeGenerator { x.addText(displayContactPoint(contact)); } + private void renderUri(XhtmlNode x, UriType uri) { + if (uri.getValue().startsWith("mailto:")) + x.ah(uri.getValue()).addText(uri.getValue().substring(7)); + else + x.ah(uri.getValue()).addText(uri.getValue()); + } + private void renderUri(UriType uri, XhtmlNode x, String path, String id) { String url = uri.getValue(); if (isCanonical(path)) { @@ -2425,8 +2453,7 @@ public class NarrativeGenerator implements INarrativeGenerator { return XMLUtil.getNamedChild(txt, "div"); } - - private void inject(Element er, XhtmlNode x, NarrativeStatus status) { + public void inject(Element er, XhtmlNode x, NarrativeStatus status) { if (!x.hasAttribute("xmlns")) x.setAttribute("xmlns", "http://www.w3.org/1999/xhtml"); Element le = XMLUtil.getNamedChild(er, "language"); @@ -2468,7 +2495,7 @@ public class NarrativeGenerator implements INarrativeGenerator { new XhtmlComposer(XhtmlComposer.XML, pretty).compose(div, x); } - private void inject(org.hl7.fhir.r5.elementmodel.Element er, XhtmlNode x, NarrativeStatus status) throws IOException, FHIRException { + public void inject(org.hl7.fhir.r5.elementmodel.Element er, XhtmlNode x, NarrativeStatus status) throws IOException, FHIRException { if (!x.hasAttribute("xmlns")) x.setAttribute("xmlns", "http://www.w3.org/1999/xhtml"); String l = er.getChildValue("language"); @@ -2500,6 +2527,7 @@ public class NarrativeGenerator implements INarrativeGenerator { txt.getChildren().add(div); div.setValue(new XhtmlComposer(XhtmlComposer.XML, pretty).compose(x)); } + div.setValue(x.toString()); div.setXhtml(x); } @@ -3716,4 +3744,126 @@ public class NarrativeGenerator implements INarrativeGenerator { p.addText(lines[i]); } } + + private boolean generate(ResourceContext rcontext, ResourceWrapper res, Provenance r) throws UnsupportedEncodingException, IOException { + XhtmlNode x = new XhtmlNode(NodeType.Element, "div"); + boolean hasExtensions = false; + + if (!r.getTarget().isEmpty()) { + if (r.getTarget().size() == 1) { + XhtmlNode p = x.para(); + p.tx("This provenance relates to "); + renderReference(rcontext, res, p, r.getTargetFirstRep()); + } else { + x.para().tx("This provenance relates to:"); + XhtmlNode ul = x.ul(); + for (Reference ref : r.getTarget()) { + renderReference(rcontext, res, ul.li(), r.getTargetFirstRep()); + } + } + } + // summary table + x.para().tx("Summary"); + XhtmlNode t = x.table("grid"); + XhtmlNode tr; + if (r.hasOccurred()) { + tr = t.tr(); + tr.td().tx("Occurrence"); + if (r.hasOccurredPeriod()) { + renderPeriod(tr.td(), r.getOccurredPeriod()); + } else { + renderDateTime(tr.td(), r.getOccurredDateTimeType()); + } + } + if (r.hasRecorded()) { + tr = t.tr(); + tr.td().tx("Recorded"); + tr.td().addText(r.getRecordedElement().toHumanDisplay()); + } + if (r.hasPolicy()) { + tr = t.tr(); + tr.td().tx("Policy"); + if (r.getPolicy().size() == 1) { + renderUri(tr.td(), r.getPolicy().get(0)); + } else { + XhtmlNode ul = tr.td().ul(); + for (UriType u : r.getPolicy()) { + renderUri(ul.li(), u); + } + } + } + if (r.hasLocation()) { + tr = t.tr(); + tr.td().tx("Location"); + renderReference(rcontext, res, tr.td(), r.getLocation()); + } + if (r.hasActivity()) { + tr = t.tr(); + tr.td().tx("Activity"); + renderCodeableConcept(r.getActivity(), tr.td(), false); + } + + boolean hasType = false; + boolean hasRole = false; + boolean hasOnBehalfOf = false; + for (ProvenanceAgentComponent a : r.getAgent()) { + hasType = hasType || a.hasType(); + hasRole = hasRole || a.hasRole(); + hasOnBehalfOf = hasOnBehalfOf || a.hasOnBehalfOf(); + } + x.para().tx("Agents"); + t = x.table("grid"); + tr = t.tr(); + if (hasType) { + tr.td().b().tx("type"); + } + if (hasRole) { + tr.td().b().tx("role"); + } + tr.td().b().tx("who"); + if (hasOnBehalfOf) { + tr.td().b().tx("onBehalfOf"); + } + for (ProvenanceAgentComponent a : r.getAgent()) { + tr = t.tr(); + if (hasType) { + if (a.hasType()) { + renderCodeableConcept(a.getType(), tr.td(), false); + } else { + tr.td(); + } + } + if (hasRole) { + if (a.hasRole()) { + if (a.getRole().size() == 1) { + renderCodeableConcept(a.getType(), tr.td(), false); + } else { + XhtmlNode ul = tr.td().ul(); + for (CodeableConcept cc : a.getRole()) { + renderCodeableConcept(cc, ul.li(), false); + } + } + } else { + tr.td(); + } + } + if (a.hasWho()) { + renderReference(rcontext, res, tr.td(), a.getWho()); + } else { + tr.td(); + } + if (hasOnBehalfOf) { + if (a.hasOnBehalfOf()) { + renderReference(rcontext, res, tr.td(), a.getOnBehalfOf()); + } else { + tr.td(); + } + } + } + // agent table + + inject(r, x, hasExtensions ? NarrativeStatus.EXTENSIONS : NarrativeStatus.GENERATED); + return hasExtensions; + + } }