package nl.topicus.konijn.data.entity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@MappedSuperclass
/**
* Base entity
*
* @author Joost Limburg
*/
public class BaseEntity implements IBaseEntity {
private static final long serialVersionUID = 1L;
@Id
@Column(length = 36, nullable = false)
@GeneratedValue
protected Long id;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false)
protected Date createdAt = new Date();
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "changed_at", nullable = false)
protected Date changedAt = new Date();
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#getId()
*/
public Long getId() {
return id;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#setId(java.lang.String)
*/
public void setId(Long id) {
this.id = id;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#getCreatedAt()
*/
public Date getCreatedAt() {
return createdAt;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#setCreatedAt(java.util.Date)
*/
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#getChangedAt()
*/
public Date getChangedAt() {
return changedAt;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#setChangedAt(java.util.Date)
*/
public void setChangedAt(Date changedAt) {
this.changedAt = changedAt;
}
/*
* (non-Javadoc)
*
* @see org.rapin.ddd.model.IEntity#validate()
*/
public List<String> validate() {
// create our list for errors
List<String> errors = new ArrayList<String>();
// Validate the model fields.
if (this.id == null || this.id == 0) {
errors.add("Identifier is null or empty.");
}
if (this.createdAt == null) {
errors.add("Created at date is null.");
}
// if no errors occured we'll return null.
if (errors.size() == 0) {
errors = null;
}
// return errors that occured
return errors;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || !(o instanceof IBaseEntity)) {
return false;
}
IBaseEntity other = (IBaseEntity) o;
// if the id is missing, return false
if (id == null)
return false;
// equivalence by id
return id.equals(other.getId());
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
if (id != null) {
return id.hashCode();
} else {
return super.hashCode();
}
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "id: " + id + ", createdAt: " + createdAt.toString()
+ ", changedAt: " + changedAt.toString();
}
}