/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package entity.values;
import entity.files.SYSVAL2FILE;
import entity.info.Resident;
import entity.process.QProcess;
import entity.process.QProcessElement;
import entity.process.SYSVAL2PROCESS;
import entity.system.Users;
import op.OPDE;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
/**
* @author tloehr
*/
@Entity
@Table(name = "resvalue")
public class ResValue implements Serializable, QProcessElement, Cloneable, Comparable<ResValue> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "BWID")
private Long id;
@Version
@Column(name = "version")
private Long version;
@Basic(optional = false)
@Column(name = "PIT")
@Temporal(TemporalType.TIMESTAMP)
private Date pit;
@Basic(optional = false)
@Column(name = "Wert2")
private BigDecimal val2;
@Basic(optional = false)
@Column(name = "Wert3")
private BigDecimal val3;
@Basic(optional = false)
@Column(name = "Wert")
private BigDecimal val1;
@Lob
@Column(name = "Bemerkung")
private String text;
@Basic(optional = false)
@Column(name = "_cdate")
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Basic(optional = false)
@Column(name = "_mdate")
@Temporal(TemporalType.TIMESTAMP)
private Date editDate;
@JoinColumn(name = "editBy", referencedColumnName = "UKennung")
@ManyToOne
private Users editedBy;
@JoinColumn(name = "ReplacedBy", referencedColumnName = "BWID")
@OneToOne
private ResValue replacedBy;
@JoinColumn(name = "ReplacementFor", referencedColumnName = "BWID")
@OneToOne
private ResValue replacementFor;
// ==
// N:1 Relationen
// ==
@JoinColumn(name = "UKennung", referencedColumnName = "UKennung")
@ManyToOne
private Users user;
@JoinColumn(name = "BWKennung", referencedColumnName = "BWKennung")
@ManyToOne
private Resident resident;
@JoinColumn(name = "Type", referencedColumnName = "ID")
@ManyToOne
private ResValueTypes vtype;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "value")
private Collection<SYSVAL2FILE> attachedFilesConnections;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "resValue")
private Collection<SYSVAL2PROCESS> attachedProcessConnections;
// // ==
// // M:N Relationen
// // ==
public ResValue() {
}
public ResValue(Resident resident, ResValueTypes vtype) {
this(new Date(), vtype.getDefault1(), vtype.getDefault2(), vtype.getDefault3(), "", new Date(), new Date(), vtype, null, null, null, OPDE.getLogin().getUser(), resident);
}
public ResValue(Resident resident, ResValueTypes vtype, Date date) {
this(date, vtype.getDefault1(), vtype.getDefault2(), vtype.getDefault3(), "", new Date(), new Date(), vtype, null, null, null, OPDE.getLogin().getUser(), resident);
}
public ResValue(Date pit, BigDecimal val1, BigDecimal val2, BigDecimal val3, String text, Date createDate, Date editDate, ResValueTypes vtype, Users editedBy, ResValue replacedBy, ResValue replacementFor, Users user, Resident resident) {
this.pit = pit;
this.val2 = val2;
this.val3 = val3;
this.val1 = val1;
this.text = text;
this.createDate = createDate;
this.editDate = editDate;
this.vtype = vtype;
this.editedBy = editedBy;
this.replacedBy = replacedBy;
this.replacementFor = replacementFor;
this.user = user;
this.resident = resident;
this.attachedFilesConnections = new ArrayList<SYSVAL2FILE>();
this.attachedProcessConnections = new ArrayList<SYSVAL2PROCESS>();
}
public Long getId() {
return id;
}
public Date getPit() {
return pit;
}
public void setPit(Date pit) {
this.pit = pit;
}
public BigDecimal getVal2() {
return val2;
}
public void setVal2(BigDecimal val2) {
this.val2 = val2;
}
public BigDecimal getVal3() {
return val3;
}
public void setVal3(BigDecimal val3) {
this.val3 = val3;
}
public BigDecimal getVal1() {
return val1;
}
public void setVal1(BigDecimal val1) {
this.val1 = val1;
}
public ResValueTypes getType() {
return vtype;
}
public void setType(ResValueTypes type) {
this.vtype = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = SYSTools.tidy(text);
}
public Users getEditedBy() {
return editedBy;
}
public void setEditedBy(Users editedBy) {
this.editedBy = editedBy;
}
public ResValue getReplacedBy() {
return replacedBy;
}
public void setReplacedBy(ResValue replacedBy) {
this.replacedBy = replacedBy;
}
public ResValue getReplacementFor() {
return replacementFor;
}
public void setReplacementFor(ResValue replacementFor) {
this.replacementFor = replacementFor;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date cdate) {
this.createDate = cdate;
}
public Date getEditDate() {
return editDate;
}
public void setEditDate(Date mdate) {
this.editDate = mdate;
}
public boolean isWithoutValue() {
return vtype.getID() == ResValueTypesTools.VOMIT || vtype.getID() == ResValueTypesTools.STOOL;
}
@Override
public ArrayList<QProcess> getAttachedProcesses() {
ArrayList<QProcess> list = new ArrayList<QProcess>();
for (SYSVAL2PROCESS att : attachedProcessConnections) {
list.add(att.getQProcess());
}
return list;
}
public Collection<SYSVAL2FILE> getAttachedFilesConnections() {
return attachedFilesConnections;
}
public Collection<SYSVAL2PROCESS> getAttachedProcessConnections() {
return attachedProcessConnections;
}
@Override
public Resident getResident() {
return resident;
}
// public boolean isWrongValues() {
// if (vtype.getID() == ResValueTools.RR) {
// return val1 == null || val2 == null || val3 == null;
// } else {
// return val1 == null;
// }
// }
/**
* @return
*/
public boolean isReplaced() {
return replacedBy != null;
}
public boolean isReplacement() {
return replacementFor != null;
}
public boolean isObsolete() {
return isReplaced() || isDeleted();
}
/**
* @return
*/
public boolean isDeleted() {
return editedBy != null && replacedBy == null && replacementFor == null;
}
public void setDeletedBy(Users deletedBy) {
editedBy = deletedBy;
createDate = new Date();
replacedBy = null;
replacementFor = null;
}
public void setResident(Resident resident) {
this.resident = resident;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
@Override
public long getPITInMillis() {
return pit.getTime();
}
@Override
public String getContentAsHTML() {
return ResValueTools.getAsHTML(this);
}
@Override
public String getPITAsHTML() {
return ResValueTools.getPITasHTML(this, false, false);
}
@Override
public long getID() {
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ResValue resValue = (ResValue) o;
return resValue.getID() == id;
}
// @Override
// public boolean equals(Object o) {
// if (this == o) return true;
// if (o == null || getClass() != o.getClass()) return false;
//
// ResValue resValue = (ResValue) o;
//
// if (createDate != null ? !createDate.equals(resValue.createDate) : resValue.createDate != null) return false;
// if (editDate != null ? !editDate.equals(resValue.editDate) : resValue.editDate != null) return false;
//// if (editedBy != null ? !editedBy.equals(resValue.editedBy) : resValue.editedBy != null) return false;
// if (id != null ? !id.equals(resValue.id) : resValue.id != null) return false;
// if (pit != null ? !pit.equals(resValue.pit) : resValue.pit != null) return false;
//// if (replacedBy != null ? !replacedBy.equals(resValue.replacedBy) : resValue.replacedBy != null) return false;
//// if (replacementFor != null ? !replacementFor.equals(resValue.replacementFor) : resValue.replacementFor != null)
//// return false;
// if (resident != null ? !resident.equals(resValue.resident) : resValue.resident != null) return false;
// if (text != null ? !text.equals(resValue.text) : resValue.text != null) return false;
// if (user != null ? !user.equals(resValue.user) : resValue.user != null) return false;
// if (val1 != null ? !val1.equals(resValue.val1) : resValue.val1 != null) return false;
// if (val2 != null ? !val2.equals(resValue.val2) : resValue.val2 != null) return false;
// if (val3 != null ? !val3.equals(resValue.val3) : resValue.val3 != null) return false;
// if (version != null ? !version.equals(resValue.version) : resValue.version != null) return false;
// if (vtype != null ? !vtype.equals(resValue.vtype) : resValue.vtype != null) return false;
//
// return true;
// }
//
// @Override
// public int hashCode() {
// int result = id != null ? id.hashCode() : 0;
// result = 31 * result + (version != null ? version.hashCode() : 0);
// result = 31 * result + (pit != null ? pit.hashCode() : 0);
// result = 31 * result + (val2 != null ? val2.hashCode() : 0);
// result = 31 * result + (val3 != null ? val3.hashCode() : 0);
// result = 31 * result + (val1 != null ? val1.hashCode() : 0);
// result = 31 * result + (text != null ? text.hashCode() : 0);
// result = 31 * result + (createDate != null ? createDate.hashCode() : 0);
// result = 31 * result + (editDate != null ? editDate.hashCode() : 0);
//// result = 31 * result + (editedBy != null ? editedBy.hashCode() : 0);
//// result = 31 * result + (replacedBy != null ? replacedBy.hashCode() : 0);
//// result = 31 * result + (replacementFor != null ? replacementFor.hashCode() : 0);
// result = 31 * result + (user != null ? user.hashCode() : 0);
// result = 31 * result + (resident != null ? resident.hashCode() : 0);
// result = 31 * result + (vtype != null ? vtype.hashCode() : 0);
// return result;
// }
@Override
public String getTitle() {
return SYSTools.xx("nursingrecords.vitalparameters") + ": " + vtype.getText();
}
@Override
public ResValue clone() {
final ResValue clonedValue = new ResValue(pit, val1, val2, val3, text, new Date(), new Date(), vtype, null, null, null, OPDE.getLogin().getUser(), resident);
CollectionUtils.forAllDo(attachedProcessConnections, new Closure() {
public void execute(Object o) {
SYSVAL2PROCESS oldAssignment = (SYSVAL2PROCESS) o;
clonedValue.attachedProcessConnections.add(new SYSVAL2PROCESS(oldAssignment.getQProcess(), clonedValue));
}
});
CollectionUtils.forAllDo(attachedFilesConnections, new Closure() {
public void execute(Object o) {
SYSVAL2FILE oldAssignment = (SYSVAL2FILE) o;
clonedValue.attachedFilesConnections.add(new SYSVAL2FILE(oldAssignment.getSysfile(), clonedValue, clonedValue.getUser(), clonedValue.getPit()));
}
});
return clonedValue;
}
@Override
public int compareTo(ResValue o) {
return pit.compareTo(o.getPit()) * -1;
}
@Override
public String toString() {
return "entity.values.ResValue[bwid=" + id + "]";
}
}