package org.mifos.rest.approval.domain;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.codehaus.jackson.map.ObjectMapper;
import org.hibernate.annotations.Type;
import org.joda.time.DateTime;
@Entity
@Table(name="rest_approval")
public class RESTApprovalEntity {
public static final String FORMAT = "MMM dd, yyyy hh:mm:ss z";
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private ApprovalState state;
@Lob
private String methodContent;
private Short createdBy;
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime createdOn;
private Short approvedBy;
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime approvedOn;
@Transient
private ApprovalMethod approvalMethod;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMethodContent() {
return methodContent;
}
public void setMethodContent(String methodContent) {
this.methodContent = methodContent;
}
public Short getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Short createdBy) {
this.createdBy = createdBy;
}
public DateTime getCreatedOn() {
return createdOn;
}
public void setCreatedOn(DateTime createdOn) {
this.createdOn = createdOn;
}
public Short getApprovedBy() {
return approvedBy;
}
public void setApprovedBy(Short approvedBy) {
this.approvedBy = approvedBy;
}
public DateTime getApprovedOn() {
return approvedOn;
}
public void setApprovedOn(DateTime approvedOn) {
this.approvedOn = approvedOn;
}
public ApprovalState getState() {
return state;
}
public void setState(ApprovalState state) {
this.state = state;
}
@Transient
public String getPrintableCreatedOnDate() {
return (getApprovedOn() == null) ? null : getCreatedOn().toString(FORMAT);
}
@Transient
public String getPrintableApprovedOnDate() {
return (getApprovedOn() == null) ? null : getApprovedOn().toString(FORMAT);
}
@Transient
public ApprovalMethod getApprovalMethod() throws Exception {
if (approvalMethod == null) {
ObjectMapper om = new ObjectMapper();
approvalMethod = om.readValue(getMethodContent(), ApprovalMethod.class);
}
return approvalMethod;
}
@Transient
public void setApprovalMethod(ApprovalMethod method) throws Exception {
approvalMethod = method;
ObjectMapper om = new ObjectMapper();
String content = om.writeValueAsString(method);
setMethodContent(content);
}
@Transient
public String getType() throws Exception {
return getApprovalMethod().getType().getSimpleName().replace("RESTController", "");
}
@Transient
public String getOperation() throws Exception {
return getApprovalMethod().getName();
}
}