package org.dayatang.utils.support;
import org.dayatang.utils.Assert;
import java.util.Date;
import java.util.UUID;
/**
* 领域事件基类,领域事件代表具有业务含义的事件,例如员工调动或者机构调整
* Created by yyang on 14-9-12.
*/
public abstract class DomainEvent {
private String id = UUID.randomUUID().toString();
private Date occurredOn = new Date();
private int version = 1;
public DomainEvent() {
this(new Date(), 1);
}
public DomainEvent(Date occurredOn) {
this(occurredOn, 1);
}
public DomainEvent(Date occurredOn, int version) {
Assert.notNull(occurredOn);
this.occurredOn = new Date(occurredOn.getTime());
this.version = version;
}
public String getId() {
return id;
}
/**
* For test only
*
* @param id
*/
protected void setId(String id) {
this.id = id;
}
public Date getOccurredOn() {
return occurredOn;
}
public int getVersion() {
return version;
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof DomainEvent)) {
return false;
}
DomainEvent that = (DomainEvent) other;
return this.getId().equals(that.getId());
}
@Override
public int hashCode() {
return id.hashCode();
}
}