Merge pull request #1179 from tadgh/allow-3-to-2-specimen
Allow specimen to be converted from STU3 -> STU2
This commit is contained in:
commit
c2de9c5434
|
@ -24,33 +24,26 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
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.CodeableConcept;
|
||||||
import org.hl7.fhir.instance.model.Reference;
|
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.instance.utils.ToolingExtensions;
|
||||||
import org.hl7.fhir.dstu3.conformance.ProfileUtilities;
|
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.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.CodeSystemContentMode;
|
||||||
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
||||||
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionDesignationComponent;
|
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionDesignationComponent;
|
||||||
import org.hl7.fhir.dstu3.model.CommunicationRequest.CommunicationPriority;
|
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.ConceptMapGroupComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ConceptMap.SourceElementComponent;
|
import org.hl7.fhir.dstu3.model.ConceptMap.SourceElementComponent;
|
||||||
import org.hl7.fhir.dstu3.model.DocumentReference.ReferredDocumentStatus;
|
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.ElementDefinition.ElementDefinitionSlicingDiscriminatorComponent;
|
||||||
import org.hl7.fhir.dstu3.model.Enumeration;
|
|
||||||
import org.hl7.fhir.dstu3.model.Immunization.ImmunizationPractitionerComponent;
|
import org.hl7.fhir.dstu3.model.Immunization.ImmunizationPractitionerComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ReferralRequest.ReferralPriority;
|
import org.hl7.fhir.dstu3.model.ReferralRequest.ReferralPriority;
|
||||||
import org.hl7.fhir.dstu3.model.StructureDefinition.StructureDefinitionKind;
|
import org.hl7.fhir.dstu3.model.StructureDefinition.StructureDefinitionKind;
|
||||||
import org.hl7.fhir.dstu3.model.StructureDefinition.TypeDerivationRule;
|
import org.hl7.fhir.dstu3.model.StructureDefinition.TypeDerivationRule;
|
||||||
import org.hl7.fhir.dstu3.model.Timing.EventTiming;
|
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.dstu3.terminologies.CodeSystemUtilities;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.utilities.Utilities;
|
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);
|
return convertSearchParameter((org.hl7.fhir.dstu3.model.SearchParameter) src);
|
||||||
if (src instanceof org.hl7.fhir.dstu3.model.Slot)
|
if (src instanceof org.hl7.fhir.dstu3.model.Slot)
|
||||||
return convertSlot((org.hl7.fhir.dstu3.model.Slot) src);
|
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)
|
if (src instanceof org.hl7.fhir.dstu3.model.StructureDefinition)
|
||||||
return convertStructureDefinition((org.hl7.fhir.dstu3.model.StructureDefinition) src);
|
return convertStructureDefinition((org.hl7.fhir.dstu3.model.StructureDefinition) src);
|
||||||
if (src instanceof org.hl7.fhir.dstu3.model.Subscription)
|
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());
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,14 @@ package org.hl7.fhir.convertors;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.hl7.fhir.dstu3.model.*;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
import org.hl7.fhir.instance.model.Resource;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
public class VersionConvertor_10_30Test {
|
public class VersionConvertor_10_30Test {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -22,4 +27,38 @@ public class VersionConvertor_10_30Test {
|
||||||
assertEquals("Encounter/123", context);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue