package smartnode.utils;
import au.com.bytecode.opencsv.CSVReader;
import smartnode.models.Collection;
import smartnode.models.Dataset;
import smartnode.models.Entry;
import smartnode.models.Paper;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Created by nogueira on 7/2/14.
*/
public class ATFetcher {
private ATLogger logger;
/**
*
* @param logger
*/
public ATFetcher(ATLogger logger) {
this.logger = logger;
}
public ArrayList<Collection> getCollections(){
ArrayList<Collection> collections = new ArrayList<Collection>();
try {
// create connection to AT
logger.log("local string BAD!!", ATLogger.LogLevel.Debug);
logger.log("Opening connection to AT Getting collections", ATLogger.LogLevel.Info);
String uri = "http://www.academictorrents.com/collections.php?format=.csv";
logger.log("uri: " + uri, ATLogger.LogLevel.Debug);
URI collections_uri = new URI(uri);
URLConnection collections_con = collections_uri.toURL().openConnection();
// reader content from connection and create collection
CSVReader reader = new CSVReader(new InputStreamReader(collections_con.getInputStream()));
//skip csv header
String [] line = reader.readNext();
while((line = reader.readNext()) != null){
Collection collection = new Collection(line[0], line[1], Integer.parseInt(line[2]), Long.parseLong(line[3]));
collection.setTorrents(getCollectionEntries(line[1]));
collections.add(collection);
logger.log("Added collection to collections", ATLogger.LogLevel.Debug);
}
}
catch (URISyntaxException e){
logger.log(e.getMessage() + e.getInput() + e.getReason() + e.getIndex(), ATLogger.LogLevel.Error );
}
catch (MalformedURLException e){
logger.log(e.getMessage(), ATLogger.LogLevel.Error );
}
catch (IOException e){
logger.log(e.getMessage(), ATLogger.LogLevel.Error );
}
catch (NumberFormatException e){
logger.log("Parse Error" + e.getMessage(), ATLogger.LogLevel.Error );
}
catch(Exception e){
logger.log("Unknown Exception in fetcher getting collections", ATLogger.LogLevel.Error);
}
return collections;
}
public HashMap<String, Entry> getCollectionEntries(String urlname){
HashMap<String, Entry> entries = new HashMap<String, Entry>();
try {
// create connection to AT
logger.log("local string BAD!!", ATLogger.LogLevel.Debug);
logger.log("Opening connection to AT Getting collection entries", ATLogger.LogLevel.Info);
String uri = "http://www.academictorrents.com/collection/" + urlname + ".csv" ;
logger.log("uri: " + uri, ATLogger.LogLevel.Debug);
URI collections_uri = new URI(uri);
URLConnection collections_con = collections_uri.toURL().openConnection();
// reader content from connection and create collection
CSVReader reader = new CSVReader(new InputStreamReader(collections_con.getInputStream()));
//skip csv header
String [] line = reader.readNext();
while((line = reader.readNext()) != null){
Entry entry = new Entry() ;
entry = new Entry(line[0], line[1], line[2], Long.parseLong(line[3]), Integer.parseInt(line[4]),
Integer.parseInt(line[5]), Integer.parseInt(line[6]), Long.parseLong(line[7]), Long.parseLong(line[8]));
entries.put(line[2], entry);
logger.log("Added entry to collection", ATLogger.LogLevel.Debug);
}
}
catch (URISyntaxException e){
logger.log(e.getMessage() + e.getInput() + e.getReason() + e.getIndex(), ATLogger.LogLevel.Error);
}
catch (MalformedURLException e){
logger.log(e.getMessage(), ATLogger.LogLevel.Error);
}
catch (IOException e){
logger.log(e.getMessage(), ATLogger.LogLevel.Error);
}
catch (NumberFormatException e){
logger.log("Parse Error" + e.getMessage(), ATLogger.LogLevel.Error );
}
catch(Exception e){
logger.log("Unknown Exception in fetcher getting collections", ATLogger.LogLevel.Error);
}
return entries;
}
}