package com.activequant.dao.mybatis;
import java.lang.reflect.Array;
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import com.activequant.dao.mybatis.mapper.GenericRowMapper;
import com.activequant.domainmodel.PersistentEntity;
import com.activequant.domainmodel.TimeStamp;
public abstract class AbstractSnapshotDao<T extends PersistentEntity> extends GenericMapperDao<T> {
private final String tableName;
private final Class<T> clazz;
public AbstractSnapshotDao(GenericRowMapper mapper, Class<T> clazz, String tableName, SqlSessionFactory s) {
super(s, mapper, clazz, tableName);
this.clazz = clazz;
this.tableName = tableName;
}
public T loadSnapshot(String nonUniqueID, TimeStamp when){
String id = super.findLastIdBeforeCreationTime("NONUNIQUEID", nonUniqueID, when.getNanoseconds());
if(id!=null){
return super.load(id);
}
return null;
}
@SuppressWarnings("unchecked")
public T[] loadSnapshots(String nonUniqueID, TimeStamp start, TimeStamp end){
List<String> ids= super.findIDsBetweenCreationTime("NONUNIQUEID", nonUniqueID, start.getNanoseconds(), end.getNanoseconds());
if(ids.size()>0){
T[] ret = (T[])Array.newInstance(clazz, ids.size());
for(int i =0;i<ret.length;i++){
ret[i] = super.load(ids.get(i));
}
return ret;
}
return (T[])Array.newInstance(clazz, 0);
}
}