package com.yiqiniu.easytrans.log.vo;
import java.io.Serializable;
import java.util.HashMap;
import com.yiqiniu.easytrans.LogProcessor;
import com.yiqiniu.easytrans.executor.AfterTransMethodExecutor;
import com.yiqiniu.easytrans.executor.CompensableMethodExecutor;
import com.yiqiniu.easytrans.executor.ReliableMessageMethodExecutor;
import com.yiqiniu.easytrans.executor.TccMethodExecutor;
import com.yiqiniu.easytrans.log.vo.aft.AfterTransCallRegisterContent;
import com.yiqiniu.easytrans.log.vo.aft.AfterTransCalledContent;
import com.yiqiniu.easytrans.log.vo.compensable.CompensatedContent;
import com.yiqiniu.easytrans.log.vo.compensable.PreCompensableCallContent;
import com.yiqiniu.easytrans.log.vo.msg.MessageRecordContent;
import com.yiqiniu.easytrans.log.vo.msg.MessageSentContent;
import com.yiqiniu.easytrans.log.vo.tcc.PreTccCallContent;
import com.yiqiniu.easytrans.log.vo.tcc.TccCallCancelledContent;
import com.yiqiniu.easytrans.log.vo.tcc.TccCallConfirmedContent;
/**
* 单条日志里的实质内容列表项
* @author THINK
*
*/
public abstract class Content implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* the unique contentId in a transaction.
* @return
*/
private Integer cId;
public abstract int getLogType();
public Integer getcId() {
return cId;
}
public void setcId(Integer contentId) {
this.cId = contentId;
}
public static enum ContentType{
TransactionBegin(1,null,null),
TransactionFininshed(2,null,null),
PreTccCall(3,TccMethodExecutor.class,PreTccCallContent.class),
TccCallConfirmed(4,null,TccCallConfirmedContent.class),
TccCallCanceled(5,null,TccCallCancelledContent.class),
MessageRecord(6,ReliableMessageMethodExecutor.class,MessageRecordContent.class),
MessageSent(7,null,MessageSentContent.class),
PreCompensableCall(8,CompensableMethodExecutor.class,PreCompensableCallContent.class),
Compensated(9,null,CompensatedContent.class),
AfterTransCallRegister(10,AfterTransMethodExecutor.class,AfterTransCallRegisterContent.class),
AfterTransCalled(11,null,AfterTransCalledContent.class)
;
private static HashMap<Integer,ContentType> map = new HashMap<Integer, Content.ContentType>();
static{
for(ContentType type :ContentType.values()){
map.put(type.getContentTypeId(), type);
}
}
private final int contentTypeId;
private final Class<? extends LogProcessor> proccessorClass;
private Class<? extends Content> correspondingClass;
public int getContentTypeId() {
return contentTypeId;
}
public Class<? extends LogProcessor> getProccessorClass() {
return proccessorClass;
}
public Class<? extends Content> getCorrespondingClass() {
return correspondingClass;
}
public static ContentType getById(int id){
return map.get(id);
}
ContentType(int id,Class<? extends LogProcessor> proccessorClass,Class<? extends Content> correspondingClass){
this.contentTypeId = id;
this.proccessorClass = proccessorClass;
this.correspondingClass = correspondingClass;
}
}
}