package jsynoptic.builtin;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import jsynoptic.data.DataSourceProvider;
import simtools.data.AsciiFileDataSourceCollection;
import simtools.data.DataSource;
import simtools.data.DataSourceCollection;
import simtools.data.DataSourcePool;
import simtools.data.DefaultEmptyDataSource;
import simtools.data.AsciiFileDataSourceCollection.InvalidFormatException;
import simtools.data.buffer.ResizeableBuffer;
/**
* @author zxpletran007
*
*/
public class AsciiProvider extends DataSourceProvider{
public AsciiProvider() {
super(Builtin.asciiFileFilter,AsciiFileDataSourceCollection.ID_MARKER);
}
/* (non-Javadoc)
* @see simtools.data.BasicDataSourceProvider#createCollection(java.io.File, java.lang.Object)
*/
protected DataSourceCollection createCollection(File f, Object optionalInformation){
try{
int granularity = ((int[])optionalInformation)[0];
int subsampling = ((int[])optionalInformation)[1];
return createCollection(f, granularity, subsampling);
}catch (IOException e){
}catch (InvalidFormatException e){}
return null;
}
/* (non-Javadoc)
* @see simtools.data.BasicDataSourceProvider#getOptionalInformation(simtools.data.DataSource, simtools.data.DataSourceCollection)
*/
public Object getOptionalInformation(DataSource ds, DataSourceCollection dsc) {
if ((dsc==null) || (!(dsc instanceof AsciiFileDataSourceCollection)))
return null;
AsciiFileDataSourceCollection adsc = (AsciiFileDataSourceCollection)dsc;
return new int[] {adsc.getGranularity(), adsc.getSubsampling()};
}
protected DataSourceCollection createCollection(File f,int granularity, int subsampling) throws IOException, InvalidFormatException {
return new AsciiFileDataSourceCollection(f, subsampling, granularity,f.getName().endsWith(".csv"));
}
/** We create Ascii Collections with buffers
* => same behaviour when loading an ascii file and an archive
*/
public DataSource provide(String id, String dscId, Object optionalInformation, DataSourcePool pool) {
DataSource ret = super.provide(id, dscId, optionalInformation, pool);
if (pool!=null) {
DataSourceCollection dsc = null;
int index = -1;
Set set = pool.dataSourceCollections();
for (Iterator it = set.iterator(); it.hasNext(); ) {
DataSourceCollection col = (DataSourceCollection)it.next();
int idx = col.indexOf(ret);
if (idx!=-1) {
index = idx;
dsc = col;
break;
}
}
if (dsc!=null) {
pool.bufferize(dsc, new ResizeableBuffer(Builtin.resources.getIntValue("maxBufferSize")));
return (DataSource)dsc.get(index);
}
}
return ret;
}
/* (non-Javadoc)
* @see simtools.data.BasicDataSourceProvider#createEmptyDatasource(java.lang.String)
*/
protected DataSource createEmptyDatasource(String id, String dscId, Object optionalInformation){
return new DefaultEmptyDataSource(id, dscId, optionalInformation);
}
}