Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.edu.unifesspa.lcc.indexer; import br.edu.unifesspa.lcc.db.DatabaseDao; import br.edu.unifesspa.lcc.calculo.EstatisticaUtil; import static br.edu.unifesspa.lcc.indexer.Processar.mongo; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import domain.Input_presenteDTO; import java.util.ArrayList; import java.util.List; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; /** * * @author HansGuido */ public class GerarIndice implements Runnable { //Lista com os indicadores que devem ser processados private List<Integer> list = new ArrayList<>(); //Assunto private Long assunto = null; private DB dbAssunto; private Long procId; //Para o processamento private DatabaseDao datadao = new DatabaseDao(); private EstatisticaUtil est = new EstatisticaUtil(); public GerarIndice(List<Integer> list, Long assunto, Long procId) { this.list = list; this.assunto = assunto; this.dbAssunto = mongo.getDB(assunto.toString()); this.procId = procId; System.out.println("Assunto: " + assunto); System.out.println("Lista: " + this.list); System.out.println("ID do processamento: " + procId); } @Override public void run() { if (!list.isEmpty()) { //Foi identificado um problema quando h poucos processamentos agendados, // ocorre de processar mais que uma vez, ao mesmo tempo, o mesmo Processamento Id, portando, necessario remover o //processamento_indice do banco,quando comear o processamento //Fazer download da demanda---- try { DownloadInfo(); } catch (InterruptedException ex) { // Logger.getLogger(GerarIndice.class.getName()).log(Level.SEVERE, null, ex); ex.printStackTrace(); } //Fim de Fazer download da demada---- //Insere em um banco, especificando qual assunto, a demanda est utilizando BasicDBObject search = new BasicDBObject(); DB aux = mongo.getDB("demandas"); DBCollection colDemandaAtiva = aux.getCollection("demandas_ativas"); search.append("demanda", assunto.toString()); search.append("Processamento_indiceId", procId); System.out.println("Inseriu na demanda_ativa"); colDemandaAtiva.insert(search); //Fim inserir no banco, a demanda ativa //Aqui itera sobre a lista de indicadores que devem ser processados System.out.println("Est para entrar no forit e a lista : " + list); for (Integer integer : list) { try { System.out.println("Processando indicador: " + integer); est.getIndicador(integer, dbAssunto); //Gera o indicador } catch (Exception e) { e.printStackTrace(); } } //Depois de processar todos os indices, remove do banco das demandas_ativas, o assunto que foi processado. colDemandaAtiva.remove(search); System.out.println("REMOVEU"); search.clear(); //Se no tiver mais nenhuma demanda utilizando o assunto, dropa-se o banco da demanda search.append("demanda", assunto.toString()); DBCursor cursor = colDemandaAtiva.find(search); if (cursor.size() == 0) { //dbAssunto.dropDatabase(); System.out.println("DROPOU"); } } } private void DownloadInfo() throws InterruptedException { //Verifica se j existe um banco de demanda criado no Mongo List<String> dbs = mongo.getDatabaseNames(); if (!dbs.contains(assunto.toString())) {//Se o banco no existe, faz o download RestTemplate rt = new RestTemplate(); DB territorios = mongo.getDB("territorios"); DBCollection colTerritorios = territorios.getCollection("territorio"); HttpEntity<String> entity = new HttpEntity<>("parameters", Processar.headers); BasicDBObject insert = new BasicDBObject(); BasicDBObject insertDemanda = new BasicDBObject(); DBCollection colDaDemanda = dbAssunto.getCollection(assunto.toString()); System.out.println("db =" + dbAssunto); DBCollection k_classe = dbAssunto.getCollection("k"); //K_CLASSES ----------------------------------------------------------------------------------------------- try { ResponseEntity<domain.K_classes[]> kClasse = rt.exchange( "http://xingu.lcc.unifesspa.edu.br:8080/api/k_classess?idassunto=" + assunto, HttpMethod.GET, entity, domain.K_classes[].class); System.out.println("K-classe tamanho: " + kClasse.getBody().length); //System.out.println("Tamanho body:" + kClasse.getBody().length); for (domain.K_classes k : kClasse.getBody()) { insert.append("k_ordem", k.getk_ordem()); insert.append("k_classes_id", k.getId()); insert.append("ck", Integer.parseInt(k.getk_codigo())); insert.append("dk", k.getk_descricao()); k_classe.insert(insert); insert.clear(); } System.out.println("DEVERIA TER INSERIDO O K"); } catch (Exception e) { e.printStackTrace(); insert.clear(); } //FIM K-CLASSES E COMEO INPUT_PRESENTES -------------------------------------------------------------------------------------------------------- BasicDBObject insertCI = new BasicDBObject(); try { System.out.println("Comeando a inserir os Inputs do assunto: " + assunto); ResponseEntity<domain.Input_presenteDTO[]> input = rt.exchange( "http://xingu.lcc.unifesspa.edu.br:8080/api/input_presentes/getInputPresenteByAssantoId/" + assunto, HttpMethod.GET, entity, Input_presenteDTO[].class); System.out.println("Fez o download do assunto: " + assunto); System.out.println("Tamano input: " + input.getBody().length + " Assunto: " + assunto); DBCollection colInput_presente = dbAssunto.getCollection("i"); // inserir assunto na base BasicDBObject search2 = new BasicDBObject(); // int cont = 0; for (Input_presenteDTO Input2 : input.getBody()) { // System.out.println("Entrou"); //Para a coleo "i" search2.append("ci", Integer.parseInt(Input2.getCodigo())); DBObject aux = colInput_presente.findOne(search2); if (aux != null) { search2.clear(); // System.out.println("ja tem esse territorio inserido"); } else { DBCursor cursor = colTerritorios.find(search2); while (cursor.hasNext()) { aux = cursor.next(); // System.out.println("AUX: " + aux.toString()); if (Integer.parseInt(aux.get("ci").toString()) == Integer.parseInt(Input2.getCodigo()) && Integer.parseInt(aux.get("ano").toString()) == Integer .parseInt(Input2.getAno_ref())) { // insertCI.append("uf_sigla", aux.get("uf_sigla")); insertCI.append("longitude", Double.parseDouble(aux.get("longitude").toString())); insertCI.append("latitude", Double.parseDouble(aux.get("latitude").toString())); // System.out.println("Achou Territorio"); } } insertCI.append("ci", Integer.parseInt(Input2.getI_codigo_amc())); insertCI.append("di", Input2.getTerritorio_nome()); insertCI.append("ano_ref", Integer.parseInt(aux.get("ano").toString())); search2.clear(); colInput_presente.insert(insertCI); insertCI.clear(); } //Para a coleo com o mesmo nome da base insertDemanda.append("ci", Integer.parseInt(Input2.getI_codigo_amc())); insertDemanda.append("di", Input2.getTerritorio_nome()); insertDemanda.append("ck", Integer.parseInt(Input2.getK_classesK_codigo())); insertDemanda.append("quant_valor", Double.parseDouble(Input2.getX_valor())); insertDemanda.append("ano", Integer.parseInt(Input2.getAno_ref())); //Aqui se acha a descrio da K-Classe envolvida, atravs do "k_classesK_codigo" search2.append("ck", Integer.parseInt(Input2.getK_classesK_codigo())); aux = k_classe.findOne(search2); insertDemanda.append("dk", (String) aux.get("dk")); search2.clear(); // colDaDemanda.insert(insertDemanda); insertDemanda.clear(); // cont++; // System.out.println(cont); } System.out.println("Inseriu input_presente do assunto: " + assunto); //Preparar banco------------------ System.out.println("Preparando o assunto: " + assunto); datadao.prepareDatabase(false, dbAssunto); System.out.println("Fim preparar banco do assunto: " + assunto); //Fim preparar Banco---------- } catch (Exception e) { e.printStackTrace(); insert.clear(); insertCI.clear(); } } else { BasicDBObject search = new BasicDBObject(); DB aux = mongo.getDB("demandas"); DBCollection colDemandaAtiva = aux.getCollection("demandas_ativas"); search.append("demanda", assunto.toString()); boolean situacao = false; while (situacao == false) { DBCursor demanAtiva = colDemandaAtiva.find(search); if (demanAtiva.size() >= 1) { situacao = true; } Thread.currentThread().sleep(5000); } } } }