package uk.nhs.careconnect.ri.stu3.dao.transforms; import org.apache.commons.collections4.Transformer; import org.hl7.fhir.dstu3.model.Address; import org.hl7.fhir.dstu3.model.Identifier; import org.hl7.fhir.dstu3.model.Meta; import org.hl7.fhir.dstu3.model.Practitioner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import uk.nhs.careconnect.ri.stu3.dao.daoutils; import uk.nhs.careconnect.ri.database.entity.practitioner.PractitionerAddress; import uk.nhs.careconnect.ri.database.entity.practitioner.PractitionerEntity; import uk.nhs.careconnect.ri.database.entity.BaseAddress; import uk.nhs.careconnect.ri.database.entity.practitioner.PractitionerIdentifier; import uk.org.hl7.fhir.core.Stu3.CareConnectProfile; @Component public class PractitionerEntityToFHIRPractitionerTransformer implements Transformer<PractitionerEntity, Practitioner> { private final Transformer<BaseAddress, Address> addressTransformer; private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(PractitionerEntityToFHIRPractitionerTransformer.class); public PractitionerEntityToFHIRPractitionerTransformer(@Autowired Transformer<BaseAddress, Address> addressTransformer) { this.addressTransformer = addressTransformer; } @Override public Practitioner transform(final PractitionerEntity practitionerEntity) { final Practitioner practitioner = new Practitioner(); Meta meta = new Meta().addProfile(CareConnectProfile.Practitioner_1); if (practitionerEntity.getUpdated() != null) { meta.setLastUpdated(practitionerEntity.getUpdated()); } else { if (practitionerEntity.getCreated() != null) { meta.setLastUpdated(practitionerEntity.getCreated()); } } practitioner.setMeta(meta); if (practitionerEntity.getActive() != null) { practitioner.setActive(practitionerEntity.getActive()); } for(PractitionerIdentifier identifier :practitionerEntity.getIdentifiers()) { Identifier ident = practitioner.addIdentifier(); ident = daoutils.getIdentifier(identifier, ident); } practitioner.setId(practitionerEntity.getId().toString()); if (practitionerEntity.getNames().size() > 0) { practitioner.addName() .setFamily(practitionerEntity.getNames().get(0).getFamilyName()) .addGiven(practitionerEntity.getNames().get(0).getGivenName()) .addPrefix(practitionerEntity.getNames().get(0).getPrefix()); } for(int f=0;f<practitionerEntity.getTelecoms().size();f++) { practitioner.addTelecom() .setSystem(practitionerEntity.getTelecoms().get(f).getSystem()) .setValue(practitionerEntity.getTelecoms().get(f).getValue()) .setUse(practitionerEntity.getTelecoms().get(f).getTelecomUse()); } for (PractitionerAddress practitionerAddress : practitionerEntity.getAddresses()){ Address address = addressTransformer.transform(practitionerAddress); practitioner.addAddress(address); } if (practitionerEntity.getGender() !=null) { practitioner.setGender(daoutils.getGender(practitionerEntity.getGender())); } return practitioner; } }