package org.ita.capes.pegarIefs;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.httpclient.methods.GetMethod;
import org.ita.capes.Professor;
import org.ita.capes.dao.DAO;
import org.ita.capes.dao.DAOFactoryProvider;
import org.ita.capes.ief.IefInfoTela;
import org.ita.capes.pegarProfessores.BaixadorDeProfessorApartirDeListaNoTxt;
import org.ita.capes.pegarProfessores.InsertorDeProfessorNoBD;
import org.ita.capes.professor.LattesSAXHandler;
public class ControleProcessamento {
// path ateh o diretorio que sera baixado as paginas de ief. Tem que terminar com o separador \\.
private String myIefDir;
private String myLattesDir;
private String myLattesListFile;
//Controladora de Iefs Distribuidos nas threads
private int iefCount=0;
private int maxIef;
//Controladora de Lattes Distribuidos nas threads
private List<String> listaDeUrlLattesNaoBaixados = new LinkedList<String>();
private int professorIndex=0;
private final int numeroThreads = 15;
private int threadsTerminadas;
public ControleProcessamento(String myLattesDir_, String myLattesListFile_, String myIefDir_, int maxIef_){
myLattesDir = myLattesDir_;
myLattesListFile = myLattesListFile_;
myIefDir = myIefDir_;
maxIef = maxIef_;
iefCount = 0;
if(!myLattesListFile_.equals(""))populateLattesList();
}
public void populateLattesList(){
File f;
f = new File(myLattesListFile);
FileReader fr;
try {
fr = new FileReader (f);
BufferedReader in = new BufferedReader( fr );
while(in.ready()){
listaDeUrlLattesNaoBaixados.add(in.readLine());
}
in.close();
fr.close();
} catch (FileNotFoundException e1) {
System.out.println("Arquivo com lista url de Lattes "+myLattesListFile+" n�o achado.");
} catch (IOException e) {
System.out.println("Algum erro de I/O");
e.printStackTrace();
}
professorIndex=listaDeUrlLattesNaoBaixados.size()-1;
//debug professorIndex=10;
}
public List<String> getLattesList(){
/*for(String str:listaDeUrlLattesNaoBaixados){
System.out.println(str);
}*/
return listaDeUrlLattesNaoBaixados;
}
public void baixarIefs(){
for(int i=0; i<numeroThreads; i++){
BaixadorDeIef pi = new BaixadorDeIef(myIefDir, i,this);
Thread t = new Thread(pi);
t.start();
}
}
public void baixarLattesApartirDeListaNoTxt(){
for(int i=0; i<numeroThreads; i++){
BaixadorDeProfessorApartirDeListaNoTxt bp = new BaixadorDeProfessorApartirDeListaNoTxt(myLattesDir, i,this);
Thread t = new Thread(bp);
t.start();
}
}
public void inserirIefsNoBD(){
for(int i=0; i<numeroThreads; i++){
InsertorDeIefNoBD pi = new InsertorDeIefNoBD(myIefDir, i,this);
Thread t = new Thread(pi);
t.start();
}
}
public void setIefCount(int iefCount_){
iefCount = iefCount_;
}
public synchronized int getIefCount(){
if(iefCount < maxIef){
iefCount++;
return iefCount;
}else{
threadsTerminadas++;
System.out.println("Acabou!"+threadsTerminadas);
if(threadsTerminadas==numeroThreads) {
iefCount = 0;
threadsTerminadas=0;
}
return -1;
}
}
public synchronized List<String> getUrlLattes(){
if(professorIndex > -1){
// come�a do final para que tenha acesso ao indice de forma mais f�cil
String url = listaDeUrlLattesNaoBaixados.get(professorIndex);
String index = (new Integer(professorIndex)).toString();
List<String> aux = new LinkedList<String>();
aux.add(index);
aux.add(url);
professorIndex--;
//System.out.println(index+" "+url);
return aux;
}else{
threadsTerminadas++;
System.out.println("Acabou!"+threadsTerminadas);
if(threadsTerminadas==numeroThreads) {
professorIndex = listaDeUrlLattesNaoBaixados.size()-1;
System.out.println("Max Nome Bibliografico "+LattesSAXHandler.getMaxNomeBibliografico());
System.out.println("Max Endereco Profissional "+LattesSAXHandler.getMaxEnderecoProfissional());
System.out.println("Max Areas de Atuacao "+LattesSAXHandler.getMaxAreasDeAtuacao());
System.out.println("Max Linhas de Pesquisa "+LattesSAXHandler.getMaxLinhasDePesquisa());
threadsTerminadas=0;
}
return null;
}
}
public void inserirProfessoresNoBD() {
for(int i=0; i<numeroThreads; i++){
InsertorDeProfessorNoBD pi = new InsertorDeProfessorNoBD(myLattesDir, i,this);
Thread t = new Thread(pi);
t.start();
}
}
public void atualizarIefsNoBD() {
for(int i=0; i<numeroThreads; i++){
AtualizadorDeIefNoBD pi = new AtualizadorDeIefNoBD(myIefDir, i,this);
Thread t = new Thread(pi);
t.start();
}
}
}