package com.taobao.yugong.common.model.position;
import java.util.ArrayList;
import java.util.List;
import com.taobao.yugong.common.model.ProgressStatus;
/**
* 数据库增量或者全量的中间状态值
*
* @author agapple 2013-9-22 下午3:10:18
*/
public class IdPosition extends Position {
private static final long serialVersionUID = -714239193409898959L;
private Number id;
private List<ProgressStatus> progressHistory = new ArrayList<ProgressStatus>();
private ProgressStatus currentProgress = ProgressStatus.UNKNOW;
public IdPosition(){
}
public Number getId() {
return id;
}
public void setId(Number id) {
this.id = id;
}
public List<ProgressStatus> getProgressHistory() {
return progressHistory;
}
public void setProgressHistory(List<ProgressStatus> progressHistory) {
this.progressHistory = progressHistory;
}
public ProgressStatus getCurrentProgress() {
return currentProgress;
}
public void setCurrentProgress(ProgressStatus currentProgress) {
if (this.currentProgress != currentProgress && this.currentProgress != ProgressStatus.UNKNOW) {
this.progressHistory.add(this.currentProgress); // 记录一下历史progress
}
this.currentProgress = currentProgress;
}
public boolean isInHistory(ProgressStatus progress) {
return this.progressHistory.contains(progress);
}
public IdPosition clone() {
IdPosition position = new IdPosition();
position.setId(id);
position.setCurrentProgress(currentProgress);
position.setProgressHistory(progressHistory);
return position;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((currentProgress == null) ? 0 : currentProgress.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((progressHistory == null) ? 0 : progressHistory.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
IdPosition other = (IdPosition) obj;
if (currentProgress != other.currentProgress) return false;
if (id == null) {
if (other.id != null) return false;
} else if (!id.equals(other.id)) return false;
if (progressHistory == null) {
if (other.progressHistory != null) return false;
} else if (!progressHistory.equals(other.progressHistory)) return false;
return true;
}
}