package info.ozkan.vipera.entities; import java.io.Serializable; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; /** * Hasta sağlık verisi * * @author Ömer Özkan * */ @Entity @Table(name = "HEALTH_DATA") public class HealthData implements Serializable { /** * Serial */ private static final long serialVersionUID = 4483608900132291874L; /** * Id */ @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id; /** * Hasta */ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "patient_id") @Cascade(CascadeType.SAVE_UPDATE) private Patient patient; /** * Tarih */ @Column(name = "date") @Temporal(TemporalType.DATE) private Date date; /** * Gönderen */ @Column(name = "send_by") private String sendBy; /** * Değerler */ @OneToMany(mappedBy = "data", fetch = FetchType.EAGER) @Cascade(CascadeType.ALL) private List<HealthDataValue> values; /** * arama işleminin hızlı gerçekleşmesi için oluşturulan map */ @Transient private Map<String, HealthDataValue> fieldValueMap; /** * @return the id */ public Long getId() { return id; } /** * @param id * the id to set */ public void setId(final Long id) { this.id = id; } /** * @return the patient */ public Patient getPatient() { return patient; } /** * @param patient * the patient to set */ public void setPatient(final Patient patient) { this.patient = patient; } /** * @return the date */ public Date getDate() { return date; } /** * @param date * the date to set */ public void setDate(final Date date) { this.date = date; } /** * @return the sendBy */ public String getSendBy() { return sendBy; } /** * @param sendBy * the sendBy to set */ public void setSendBy(final String sendBy) { this.sendBy = sendBy; } /** * @return the values */ public List<HealthDataValue> getValues() { return values; } /** * @param values * the values to set */ public void setValues(final List<HealthDataValue> values) { this.values = values; } /** * Bir alanın değerler içerisinde yer alıp almadığını kontrol eder * * @param field * @return */ public boolean exist(final HealthDataField field) { checkFieldValueMap(); return fieldValueMap.containsKey(field.getName()); } /** * Alana karşılık gelen değeri dönderir * * @param field * @return */ public HealthDataValue getValue(final HealthDataField field) { checkFieldValueMap(); final String fieldName = field.getName(); if (fieldValueMap.containsKey(fieldName)) { return fieldValueMap.get(fieldName); } return null; } /** * Eğer fieldValueMap null ise yeni bir fieldValueMap üretir */ private void checkFieldValueMap() { if (fieldValueMap == null) { initializeFieldValueMap(); } } /** * Lazy loading için fieldValueMap alanını ilklendirir */ private void initializeFieldValueMap() { fieldValueMap = new HashMap<String, HealthDataValue>(); for (final HealthDataValue value : values) { fieldValueMap.put(value.getField().getName(), value); } } }