package org.dayatang.dddlib.event.api;
import org.dayatang.utils.Assert;
import java.util.Date;
import java.util.UUID;
/**
* 领域事件基类,领域事件代表具有业务含义的事件,例如员工调动或者机构调整
* Created by yyang on 14-9-12.
*/
public abstract class AbstractEvent implements Event {
private String id = UUID.randomUUID().toString();
private Date occurredOn = new Date();
private int version = 1;
public AbstractEvent() {
this(new Date(), 1);
}
/**
* @param occurredOn 发生时间
*/
public AbstractEvent(Date occurredOn) {
this(occurredOn, 1);
}
/**
* @param occurredOn 发生时间
* @param version 版本
*/
public AbstractEvent(Date occurredOn, int version) {
Assert.notNull(occurredOn);
this.occurredOn = new Date(occurredOn.getTime());
this.version = version;
}
/**
* 获得事件ID
*
* @return 事件的ID
*/
@Override
public String id() {
return id;
}
/**
* 获得事件发生时间
*
* @return 事件发生时间
*/
@Override
public Date occurredOn() {
return occurredOn;
}
/**
* 获得版本
*
* @return 事件的版本
*/
@Override
public int version() {
return version;
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof AbstractEvent)) {
return false;
}
AbstractEvent that = (AbstractEvent) other;
return this.id().equals(that.id());
}
@Override
public int hashCode() {
return id.hashCode();
}
}