package statalign.io;
import java.io.File;
import java.io.IOException;
import java.util.List;
import statalign.base.Utils;
import statalign.io.input.DataReader;
public class DataManager {
List<DataReader> readers;
public void init() {
readers = Utils.findPlugins(DataReader.class);
}
/**
* Tries to read file using all available input plugins. First tries those that claim to
* explicitly support the file extension, that failing tries all other plugins.
* @param file the input file to read
* @return the data read or <code>null</code> if all plugins failed to read the file
*/
public DataType read(File file) {
String ext = getExtension(file);
DataType data;
for(DataReader reader : readers) {
if(reader.supportedExtensions().contains(ext)) {
try {
data = reader.read(file);
System.out.println("Successfully read "+file.getName()+" using "+reader.toString());
return data;
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
for(DataReader reader : readers) {
if(!reader.supportedExtensions().contains(ext)) {
try {
data = reader.read(file);
System.out.println("Successfully read "+file.getName()+" using "+reader.toString());
return data;
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
return null;
}
static String getExtension(File file) {
String name = file.getName();
int ind = name.lastIndexOf('.');
if(ind == -1)
return "";
return name.substring(ind+1).toLowerCase();
}
}