package br.gov.mj.sislegis.app.parser.senado;
import java.net.URLEncoder;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import br.gov.mj.sislegis.app.enumerated.Origem;
import br.gov.mj.sislegis.app.model.*;
import br.gov.mj.sislegis.app.model.pautacomissao.PautaReuniaoComissao;
import br.gov.mj.sislegis.app.model.pautacomissao.ProposicaoPautaComissao;
import br.gov.mj.sislegis.app.parser.ParserFetcher;
import br.gov.mj.sislegis.app.parser.senado.xstream.*;
import br.gov.mj.sislegis.app.util.SislegisUtil;
import com.thoughtworks.xstream.XStream;
public class ParserPautaSenado {
public static void main(String[] args) throws Exception {
ParserPautaSenado parser = new ParserPautaSenado();
// TODO: Informação que vem do filtro
String siglaComissao = "CAE";
String datIni = "20151001";
String datFim = "20151008";
Set<PautaReuniaoComissao> pautas = parser.getPautaComissao(siglaComissao, datIni, datFim);
for (Iterator iterator = pautas.iterator(); iterator.hasNext();) {
PautaReuniaoComissao pautaReuniaoComissao = (PautaReuniaoComissao) iterator.next();
System.out.println(pautaReuniaoComissao);
for (Iterator iterator2 = pautaReuniaoComissao.getProposicoesDaPauta().iterator(); iterator2.hasNext();) {
ProposicaoPautaComissao ppc = (ProposicaoPautaComissao) iterator2.next();
System.out.println("\t" + ppc.getProposicao().getEmenta());
System.out.println("\t Resultado: " + ppc.getResultado());
}
}
}
public Set<PautaReuniaoComissao> getPautaComissao(String siglaComissao, String datIni, String datFim)
throws Exception {
Set<PautaReuniaoComissao> pautas = new HashSet<PautaReuniaoComissao>();
XStream xstream = new XStream();
xstream.ignoreUnknownElements();
xstream.alias("Reuniao", ReuniaoBeanSenado.class);
xstream.alias("Comissao", ComissaoBean.class);
xstream.alias("Parte", ParteBean.class);
xstream.alias("Item", ItemBean.class);
// xstream.alias("Evento", EventoBean.class);
xstream.alias("Resultado", Resultado.class);
Materias.configXstream(xstream);
xstream.aliasField("Partes", ReuniaoBeanSenado.class, "partes");
xstream.aliasField("Comissoes", ReuniaoBeanSenado.class, "comissoes");
xstream.aliasField("Codigo", ReuniaoBeanSenado.class, "codigo");
xstream.aliasField("Titulo", ReuniaoBeanSenado.class, "titulo");
xstream.aliasField("Data", ReuniaoBeanSenado.class, "data");
xstream.aliasField("Hora", ReuniaoBeanSenado.class, "hora");
xstream.aliasField("Tipo", ReuniaoBeanSenado.class, "tipo");
xstream.aliasField("Itens", ParteBean.class, "itens");
// xstream.aliasField("Eventos", ParteBean.class, "eventos");
xstream.aliasField("Materia", ItemBean.class, "materia");
xstream.aliasField("Resultado", ItemBean.class, "resultado");
xstream.aliasAttribute(ItemBean.class, "tipo", "tipo");
xstream.processAnnotations(Resultado.class);
xstream.aliasField("MateriasRelacionadas", EventoBean.class, "materiasRelacionadas");
xstream.aliasField("SeqOrdemPauta", ItemBean.class, "seqOrdemPauta");
StringBuilder wsURL = new StringBuilder("http://legis.senado.leg.br/dadosabertos/agenda/");
wsURL.append(datIni);
wsURL.append("/");
wsURL.append(datFim);
wsURL.append("/detalhe?colegiado=").append(URLEncoder.encode(siglaComissao, "UTF-8"));
Logger.getLogger(SislegisUtil.SISLEGIS_LOGGER).log(Level.INFO, "getPautaComissao url=" + wsURL.toString());
ListaReunioes reunioes = new ListaReunioes();
configAgenda(xstream);
ParserFetcher.fetchXStream(wsURL.toString(), xstream, reunioes);
for (Iterator<ReuniaoBeanSenado> iterator = reunioes.getReunioes().iterator(); iterator.hasNext();) {
ReuniaoBeanSenado pautaReuniaoComissao = (ReuniaoBeanSenado) iterator.next();
Comissao comissao = new Comissao();
comissao.setSigla(siglaComissao);
PautaReuniaoComissao prc = new PautaReuniaoComissao(pautaReuniaoComissao.getDate(), comissao,
pautaReuniaoComissao.getCodigo());
prc.setOrigem(Origem.SENADO);
prc.setTipo(pautaReuniaoComissao.getTipo());
prc.setTitulo(pautaReuniaoComissao.getTitulo());
prc.setLinkPauta("http://legis.senado.leg.br/comissoes/reuniao?reuniao=" + prc.getCodigoReuniao());
prc.converterSituacao(pautaReuniaoComissao.getSituacao());
Set<ProposicaoPautaComissao> ps = pautaReuniaoComissao.getProposicoesPauta(prc);
if (ps.size() > 0) {
pautas.add(prc);
}
}
return pautas;
}
public List<ReuniaoBeanSenado> getReunioes(String siglaComissao, String datIni, String dataFim) throws Exception {
StringBuilder wsURL = new StringBuilder("http://legis.senado.leg.br/dadosabertos/agenda/");
wsURL.append(datIni);
if (dataFim != null) {
wsURL.append("/");
wsURL.append(datIni);
}
wsURL.append("?colegiado=").append(URLEncoder.encode(siglaComissao, "UTF-8"));
XStream xstreamAgenda = new XStream();
xstreamAgenda.ignoreUnknownElements();
ListaReunioes reunioes = new ListaReunioes();
configAgenda(xstreamAgenda);
ParserFetcher.fetchXStream(wsURL.toString(), xstreamAgenda, reunioes);
return reunioes.getReunioes();
}
private void configAgenda(XStream xstream) {
xstream.alias("Reunioes", ListaReunioes.class);
xstream.alias("Reuniao", ReuniaoBeanSenado.class);
xstream.aliasField("Hora", ReuniaoBeanSenado.class, "hora");
xstream.aliasField("Data", ReuniaoBeanSenado.class, "data");
xstream.aliasField("Tipo", ReuniaoBeanSenado.class, "tipo");
xstream.aliasField("Situacao", ReuniaoBeanSenado.class, "situacao");
xstream.aliasField("TituloDaReuniao", ReuniaoBeanSenado.class, "titulo");
xstream.addImplicitCollection(ListaReunioes.class, "reunioes");
xstream.aliasField("Codigo", ReuniaoBeanSenado.class, "codigo");
}
private void configReuniao(XStream xstream) {
xstream.alias("Reuniao", ReuniaoBeanSenado.class);
xstream.alias("Comissao", ComissaoBean.class);
xstream.alias("Parte", ParteBean.class);
xstream.alias("Item", ItemBean.class);
xstream.alias("Evento", EventoBean.class);
xstream.alias("Materia", Proposicao.class);
xstream.aliasField("Partes", ReuniaoBeanSenado.class, "partes");
xstream.aliasField("Comissoes", ReuniaoBeanSenado.class, "comissoes");
xstream.aliasField("Codigo", ReuniaoBeanSenado.class, "codigo");
xstream.aliasField("Sigla", ComissaoBean.class, "sigla");
xstream.aliasField("Nome", ComissaoBean.class, "nome");
xstream.aliasField("Itens", ParteBean.class, "itens");
xstream.aliasField("Eventos", ParteBean.class, "eventos");
xstream.aliasField("Materia", ItemBean.class, "proposicao");
xstream.aliasAttribute(ItemBean.class, "tipo", "tipo");
xstream.aliasField("MateriasRelacionadas", EventoBean.class, "proposicoes");
xstream.aliasField("Materia", ListaProposicoes.class, "proposicao");
xstream.aliasField("SeqOrdemPauta", ItemBean.class, "seqOrdemPauta");
xstream.aliasField("Codigo", Proposicao.class, "idProposicao");
xstream.aliasField("Subtipo", Proposicao.class, "tipo");
xstream.aliasField("Numero", Proposicao.class, "numero");
xstream.aliasField("Ano", Proposicao.class, "ano");
xstream.aliasField("Ementa", Proposicao.class, "ementa");
}
}