diff --git a/hapi-fhir-converter/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_30.java b/hapi-fhir-converter/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_30.java index 9e08dae9295..9db85414f6c 100644 --- a/hapi-fhir-converter/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_30.java +++ b/hapi-fhir-converter/src/main/java/org/hl7/fhir/convertors/VersionConvertor_10_30.java @@ -24,33 +24,26 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.binary.Base64; +import org.hl7.fhir.dstu3.model.*; import org.hl7.fhir.instance.model.CodeableConcept; import org.hl7.fhir.instance.model.Reference; +import org.hl7.fhir.instance.model.Resource; import org.hl7.fhir.instance.utils.ToolingExtensions; import org.hl7.fhir.dstu3.conformance.ProfileUtilities; -import org.hl7.fhir.dstu3.model.Annotation; import org.hl7.fhir.dstu3.model.CapabilityStatement.SystemRestfulInteraction; -import org.hl7.fhir.dstu3.model.CodeSystem; -import org.hl7.fhir.dstu3.model.Coding; import org.hl7.fhir.dstu3.model.CodeSystem.CodeSystemContentMode; import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent; import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionDesignationComponent; import org.hl7.fhir.dstu3.model.CommunicationRequest.CommunicationPriority; -import org.hl7.fhir.dstu3.model.ConceptMap; -import org.hl7.fhir.dstu3.model.ContactDetail; import org.hl7.fhir.dstu3.model.ConceptMap.ConceptMapGroupComponent; import org.hl7.fhir.dstu3.model.ConceptMap.SourceElementComponent; import org.hl7.fhir.dstu3.model.DocumentReference.ReferredDocumentStatus; -import org.hl7.fhir.dstu3.model.Dosage; -import org.hl7.fhir.dstu3.model.ElementDefinition; import org.hl7.fhir.dstu3.model.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent; -import org.hl7.fhir.dstu3.model.Enumeration; import org.hl7.fhir.dstu3.model.Immunization.ImmunizationPractitionerComponent; import org.hl7.fhir.dstu3.model.ReferralRequest.ReferralPriority; import org.hl7.fhir.dstu3.model.StructureDefinition.StructureDefinitionKind; import org.hl7.fhir.dstu3.model.StructureDefinition.TypeDerivationRule; import org.hl7.fhir.dstu3.model.Timing.EventTiming; -import org.hl7.fhir.dstu3.model.UriType; import org.hl7.fhir.dstu3.terminologies.CodeSystemUtilities; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.utilities.Utilities; @@ -13102,6 +13095,8 @@ public org.hl7.fhir.instance.model.ValueSet.ConceptDefinitionDesignationComponen return convertSearchParameter((org.hl7.fhir.dstu3.model.SearchParameter) src); if (src instanceof org.hl7.fhir.dstu3.model.Slot) return convertSlot((org.hl7.fhir.dstu3.model.Slot) src); + if (src instanceof org.hl7.fhir.dstu3.model.Specimen) + return convertSpecimen((org.hl7.fhir.dstu3.model.Specimen) src); if (src instanceof org.hl7.fhir.dstu3.model.StructureDefinition) return convertStructureDefinition((org.hl7.fhir.dstu3.model.StructureDefinition) src); if (src instanceof org.hl7.fhir.dstu3.model.Subscription) @@ -13119,4 +13114,99 @@ public org.hl7.fhir.instance.model.ValueSet.ConceptDefinitionDesignationComponen throw new Error("Unknown resource "+src.fhirType()); } + private org.hl7.fhir.instance.model.Specimen.SpecimenStatus convertSpecimenStatus(Specimen.SpecimenStatus status) { + if (status == null) { + return null; + } + switch(status) { + case AVAILABLE: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.AVAILABLE; + case UNAVAILABLE: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.UNAVAILABLE; + case ENTEREDINERROR: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.ENTEREDINERROR; + case UNSATISFACTORY: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.UNSATISFACTORY; + case NULL: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.NULL; + default: return org.hl7.fhir.instance.model.Specimen.SpecimenStatus.NULL; + } + } + + public org.hl7.fhir.instance.model.Specimen.SpecimenTreatmentComponent convertSpecimenProcessingComponent(org.hl7.fhir.dstu3.model.Specimen.SpecimenProcessingComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.instance.model.Specimen.SpecimenTreatmentComponent tgt = new org.hl7.fhir.instance.model.Specimen.SpecimenTreatmentComponent(); + copyElement(src, tgt); + if (src.hasDescription()) + tgt.setDescription(src.getDescription()); + if (src.hasProcedure()) + tgt.setProcedure(convertCodeableConcept(src.getProcedure())); + for (org.hl7.fhir.dstu3.model.Reference t : src.getAdditive()) + tgt.addAdditive(convertReference(t)); + return tgt; + } + + public org.hl7.fhir.instance.model.Specimen.SpecimenContainerComponent convertSpecimenContainerComponent(org.hl7.fhir.dstu3.model.Specimen.SpecimenContainerComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.instance.model.Specimen.SpecimenContainerComponent tgt = new org.hl7.fhir.instance.model.Specimen.SpecimenContainerComponent(); + copyElement(src, tgt); + for (org.hl7.fhir.dstu3.model.Identifier t : src.getIdentifier()) + tgt.addIdentifier(convertIdentifier(t)); + if (src.hasDescription()) + tgt.setDescription(src.getDescription()); + if (src.hasType()) + tgt.setType(convertCodeableConcept(src.getType())); + if (src.hasCapacity()) + tgt.setCapacity(convertSimpleQuantity(src.getCapacity())); + if (src.hasSpecimenQuantity()) + tgt.setSpecimenQuantity(convertSimpleQuantity(src.getSpecimenQuantity())); + if (src.hasAdditive()) + tgt.setAdditive(convertType(src.getAdditive())); + return tgt; + } + public org.hl7.fhir.instance.model.Specimen.SpecimenCollectionComponent convertSpecimenCollectionComponent(org.hl7.fhir.dstu3.model.Specimen.SpecimenCollectionComponent src) throws FHIRException { + if (src == null) + return null; + org.hl7.fhir.instance.model.Specimen.SpecimenCollectionComponent tgt = new org.hl7.fhir.instance.model.Specimen.SpecimenCollectionComponent(); + copyElement(src, tgt); + if (src.hasCollector()) + tgt.setCollector(convertReference(src.getCollector())); + if (src.hasCollected()) + tgt.setCollected(convertType(src.getCollected())); + if (src.hasQuantity()) + tgt.setQuantity(convertSimpleQuantity(src.getQuantity())); + if (src.hasMethod()) + tgt.setMethod(convertCodeableConcept(src.getMethod())); + if (src.hasBodySite()) + tgt.setBodySite(convertCodeableConcept(src.getBodySite())); + return tgt; + } + + private org.hl7.fhir.instance.model.Specimen convertSpecimen(Specimen src) { + if (src == null) { + return null; + } + org.hl7.fhir.instance.model.Specimen tgt = new org.hl7.fhir.instance.model.Specimen(); + copyDomainResource(src, tgt); + for (org.hl7.fhir.dstu3.model.Identifier t : src.getIdentifier()) + tgt.addIdentifier(convertIdentifier(t)); + if (src.hasAccessionIdentifier()) + tgt.setAccessionIdentifier(convertIdentifier(src.getAccessionIdentifier())); + if (src.hasStatus()) + tgt.setStatus(convertSpecimenStatus(src.getStatus())); + if (src.hasType()) + tgt.setType(convertCodeableConcept(src.getType())); + if (src.hasSubject()) + tgt.setSubject(convertReference(src.getSubject())); + if (src.hasReceivedTime()) + tgt.setReceivedTime(src.getReceivedTime()); + for (org.hl7.fhir.dstu3.model.Reference t : src.getParent()) + tgt.addParent(convertReference(t)); + if (src.hasCollection()) + tgt.setCollection(convertSpecimenCollectionComponent(src.getCollection())); + for (org.hl7.fhir.dstu3.model.Specimen.SpecimenProcessingComponent t : src.getProcessing()) + tgt.addTreatment(convertSpecimenProcessingComponent(t)); + for (org.hl7.fhir.dstu3.model.Specimen.SpecimenContainerComponent t : src.getContainer()) + tgt.addContainer(convertSpecimenContainerComponent(t)); + return tgt; + + } + } diff --git a/hapi-fhir-converter/src/test/java/org/hl7/fhir/convertors/VersionConvertor_10_30Test.java b/hapi-fhir-converter/src/test/java/org/hl7/fhir/convertors/VersionConvertor_10_30Test.java index d83424cc7dc..ebeb09f3533 100644 --- a/hapi-fhir-converter/src/test/java/org/hl7/fhir/convertors/VersionConvertor_10_30Test.java +++ b/hapi-fhir-converter/src/test/java/org/hl7/fhir/convertors/VersionConvertor_10_30Test.java @@ -2,9 +2,14 @@ package org.hl7.fhir.convertors; import static org.junit.Assert.assertEquals; +import org.hl7.fhir.dstu3.model.*; import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.instance.model.Resource; import org.junit.Test; +import java.util.Collections; +import java.util.Date; + public class VersionConvertor_10_30Test { @Test @@ -21,5 +26,39 @@ public class VersionConvertor_10_30Test { assertEquals("Encounter/123", context); } + + @Test + public void testConvertSpecimen() throws FHIRException { + + NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30(); + VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor); + + Specimen spec = new Specimen(); + CodeableConcept cc = new CodeableConcept(); + Coding coding = new Coding(); + coding.setSystem("test_system"); + coding.setCode("test_code"); + coding.setDisplay("test_display"); + cc.addCoding(coding); + spec.setType(cc); + spec.setId("76c1143a-974a-4dfe-8f1a-4292b02d323d"); + spec.setReceivedTime(new Date()); + spec.addExtension().setUrl("testurl!").setValue(new StringType("Yup its an extension")); + spec.setSubject(new Reference("Patient/123")); + spec.getRequest().add(new Reference("Practitioner/321")); + Specimen.SpecimenCollectionComponent specimenCollectionComponent = new Specimen.SpecimenCollectionComponent(); + specimenCollectionComponent.setCollected(new DateTimeType(new Date())); + SimpleQuantity simpleQuantity = new SimpleQuantity(); + simpleQuantity.setUnit("buckets"); + simpleQuantity.setValue(1000L); + + specimenCollectionComponent.setQuantity(simpleQuantity); + spec.setCollection(specimenCollectionComponent); + Specimen.SpecimenContainerComponent specimenContainerComponent = new Specimen.SpecimenContainerComponent(); + specimenContainerComponent.getExtension().add(new Extension().setUrl("some_url").setValue(new StringType("some_value"))); + spec.setContainer(Collections.singletonList(specimenContainerComponent)); + Resource resource = converter.convertResource(spec); + } + }