package com.mongodb.hvdf.async; import com.mongodb.DBObject; public abstract class RecoverableAsyncTask implements Runnable{ public static final short PRIORITY_LOW = Short.MIN_VALUE; public static final short PRIORITY_NORMAL = 0; public static final short PRIORITY_HIGH = Short.MAX_VALUE; protected final AsyncWorker worker; protected final AsyncTaskType type; protected RecoveryRecord recoveryRecord = null; protected RecoverableAsyncTask( AsyncWorker worker, AsyncTaskType type){ this.worker = worker; this.type = type; } @Override public void run() { this.worker.handleTask(this); } public RecoveryRecord getRecoveryRecord(){ if(recoveryRecord == null) buildRecoveryRecord(); return recoveryRecord; } private void buildRecoveryRecord() { final short priority = this.getPriority(); final short type = this.type.id(); final DBObject data = this.buildRecoveryData(); recoveryRecord = new RecoveryRecord(type, priority, data); } protected abstract DBObject buildRecoveryData(); public abstract short getPriority(); public boolean synchronousOnReject() { return false; } }