package edu.gatech.i3l.fhir.dstu2.entities; import java.util.Date; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.validation.constraints.NotNull; import org.hibernate.envers.Audited; import ca.uhn.fhir.context.FhirVersionEnum; import ca.uhn.fhir.model.api.IResource; import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt; import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt; import ca.uhn.fhir.model.dstu2.resource.Device; import ca.uhn.fhir.model.primitive.InstantDt; import edu.gatech.i3l.fhir.jpa.entity.BaseResourceEntity; import edu.gatech.i3l.fhir.jpa.entity.IResourceEntity; @Entity @Table(name="device_exposure") @Audited public class DeviceExposure extends BaseResourceEntity { public static final String RES_TYPE = "Device"; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="device_exposure_id") @Access(AccessType.PROPERTY) private Long id; @ManyToOne(cascade=CascadeType.MERGE) @JoinColumn(name="person_id", nullable=false) @NotNull private Person person; @ManyToOne(cascade=CascadeType.MERGE) @JoinColumn(name="device_concept_id", nullable=false) @NotNull private Concept deviceConcept; @Column(name="device_exposure_start_date", nullable=false) @NotNull private Date deviceExposureStartDate; @Column(name="device_exposure_end_date") private Date deviceExposureEndDate; @Column(name="unique_device_id", nullable=false) @NotNull private String uniqueDeviceId; @ManyToOne(cascade=CascadeType.MERGE) @JoinColumn(name="device_type_concept_id", nullable=false) @NotNull private Concept deviceTypeConcept; @ManyToOne(cascade=CascadeType.MERGE) @JoinColumn(name="provider_id") private Provider provider; @ManyToOne(cascade=CascadeType.MERGE) @JoinColumn(name="visit_occurrence_id") private VisitOccurrence visitOccurrence; @Override public Long getId() { return id; } public void setId (Long id) { this.id = id; } public Person getPerson () { return person; } public void setPerson (Person person) { this.person = person; } public Concept getDeviceConcept () { return deviceConcept; } public void setDeviceConcept (Concept deviceConcept) { this.deviceConcept = deviceConcept; } public Date getDeviceExposureStartDate () { return deviceExposureStartDate; } public void setDeviceExposureStartDate (Date deviceExposureStartDate) { this.deviceExposureStartDate = deviceExposureStartDate; } public Date getDeviceExposureEndDate () { return deviceExposureEndDate; } public void setDeviceExposureEndDate (Date deviceExposureEndDate) { this.deviceExposureEndDate = deviceExposureEndDate; } public String getUniqueDeviceId () { return uniqueDeviceId; } public void setUniqueDeviceId (String uniqueDeviceId) { this.uniqueDeviceId = uniqueDeviceId; } public Concept getDeviceTypeConcept () { return deviceTypeConcept; } public void setDeviceTypeConcept (Concept deviceTypeConcept) { this.deviceTypeConcept = deviceTypeConcept; } public Provider getProvider () { return provider; } public void setProvider (Provider provider) { this.provider = provider; } public VisitOccurrence getVisitOccurrence () { return visitOccurrence; } public void setVisitOccurrence (VisitOccurrence visitOccurrence) { this.visitOccurrence = visitOccurrence; } public DeviceExposure () { super(); } public DeviceExposure ( Long id, Person person, Concept deviceConcept, Date deviceExposureStartDate, Date deviceExposureEndDate, String uniqueDeviceId, Concept deviceTypeConcept, Provider provider, VisitOccurrence visitOccurrence ) { this.id = id; this.person = person; this.deviceConcept = deviceConcept; this.deviceExposureStartDate = deviceExposureStartDate; this.deviceExposureEndDate = deviceExposureEndDate; this.uniqueDeviceId = uniqueDeviceId; this.deviceTypeConcept = deviceTypeConcept; this.provider = provider; this.visitOccurrence = visitOccurrence; } @Override public FhirVersionEnum getFhirVersion() { return FhirVersionEnum.DSTU2; } @Override public String getResourceType() { return RES_TYPE; } @Override public InstantDt getUpdated() { // TODO Auto-generated method stub return null; } @Override public String translateSearchParam(String theSearchParam) { // TODO Auto-generated method stub return null; } @Override public IResource getRelatedResource() { Device deviceRes = new Device(); deviceRes.setId(this.getIdDt()); if (this.person != null) { deviceRes.setPatient(new ResourceReferenceDt(this.person.getIdDt())); } if (this.deviceConcept != null) { String systemUriStr = this.deviceConcept.getVocabulary().getVocabularyReference(); String codeStr = this.deviceConcept.getConceptCode(); String displayStr = this.deviceConcept.getName(); CodeableConceptDt devTypeCode = new CodeableConceptDt(systemUriStr, codeStr); devTypeCode.getCodingFirstRep().setDisplay(displayStr); deviceRes.setType(devTypeCode); } if (this.uniqueDeviceId != null && !this.uniqueDeviceId.isEmpty()) { deviceRes.setUdi(this.uniqueDeviceId); } if (this.provider != null) { deviceRes.setOwner(new ResourceReferenceDt(this.provider.getCareSite().getIdDt())); } else if (this.visitOccurrence != null) { deviceRes.setOwner(new ResourceReferenceDt(this.visitOccurrence.getCareSite().getIdDt())); } return deviceRes; } @Override public IResourceEntity constructEntityFromResource(IResource resource) { // TODO Auto-generated method stub return null; } }