package org.fastcatsearch.notification.message;
import java.io.IOException;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.db.mapper.IndexingResultMapper.ResultStatus;
import org.fastcatsearch.ir.common.IndexingType;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
import org.fastcatsearch.job.result.IndexingJobResult;
import org.fastcatsearch.transport.vo.StreamableThrowable;
public abstract class IndexingFinishNotification extends Notification {
protected String collectionId;
protected IndexingType indexingType;
protected String indexingStep;
protected ResultStatus resultStatus;
protected long startTime;
protected long finishTime;
protected Streamable result;
public IndexingFinishNotification() { }
public IndexingFinishNotification(String messageCode, String collection, IndexingType indexingType, String indexingStep, ResultStatus resultStatus, long startTime, long finishTime,
Streamable result) {
super(messageCode);
this.collectionId = collection;
this.indexingType = indexingType;
this.indexingStep = indexingStep;
this.resultStatus = resultStatus;
this.startTime = startTime;
this.finishTime = finishTime;
this.result = result;
}
@Override
public void readFrom(DataInput input) throws IOException {
super.readFrom(input);
collectionId = input.readString();
indexingType = IndexingType.valueOf(input.readString());
indexingStep = input.readString();
resultStatus = ResultStatus.valueOf(input.readString());
startTime = input.readLong();
finishTime = input.readLong();
if(input.readBoolean()){
if (resultStatus != ResultStatus.FAIL) {
result = new IndexingJobResult();
} else {
result = new StreamableThrowable();
}
result.readFrom(input);
}
}
@Override
public void writeTo(DataOutput output) throws IOException {
super.writeTo(output);
output.writeString(collectionId);
output.writeString(indexingType.name());
output.writeString(indexingStep);
output.writeString(resultStatus.name());
output.writeLong(startTime);
output.writeLong(finishTime);
if(result == null) {
output.writeBoolean(false);
}else{
output.writeBoolean(true);
result.writeTo(output);
}
}
@Override
public String toString() {
return "Indexing Finished : resultStatus["+resultStatus+"] collectionId["+collectionId+"] type[" + indexingType+ "] step[" + indexingStep+ "] start["+startTime+"] finish["+finishTime+"]";
}
}