package br.gov.mj.sislegis.app.parser.senado;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
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.Comissao;
import br.gov.mj.sislegis.app.model.Proposicao;
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.Materia;
import br.gov.mj.sislegis.app.parser.senado.xstream.Materias;
import br.gov.mj.sislegis.app.util.SislegisUtil;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
public class ParserPlenarioSenado {
public static void main(String[] args) throws Exception {
ParserPlenarioSenado parser = new ParserPlenarioSenado();
// TODO: Informação que vem do filtro
String datIni = "20140801";
System.out.println(parser.getProposicoes(datIni).toString());
}
// FIXME tem q converter
public Set<PautaReuniaoComissao> getProposicoes(String datIni) throws Exception {
Set<PautaReuniaoComissao> pautas = new HashSet<PautaReuniaoComissao>();
XStream xstreamSessao = new XStream();
xstreamSessao.ignoreUnknownElements();
AgendaPlenario agendaPlenario = new AgendaPlenario();
configAgendaPlenario(xstreamSessao);
String wsURLPlenario = "http://legis.senado.leg.br/dadosabertos/plenario/agenda/mes/" + datIni;
Logger.getLogger(SislegisUtil.SISLEGIS_LOGGER).log(Level.FINE, "Buscando dados da sessão do plenario");
ParserFetcher.fetchXStream(wsURLPlenario, xstreamSessao, agendaPlenario);
Comissao plenario = new Comissao();
plenario.setSigla("PLEN");
List<Sessao> sessoes = agendaPlenario.getSessoes();
for (Sessao sessao : sessoes) {
PautaReuniaoComissao pauta = new PautaReuniaoComissao(sessao.getData(), plenario, sessao.getCodigoSessao());
pauta.setLinkPauta("https://www25.senado.leg.br/web/atividade/sessao-plenaria/-/pauta/"
+ sessao.getCodigoSessao());
pauta.setOrigem(Origem.SENADO);
pauta.setTipo(sessao.tipo);
pauta.converterSituacao(sessao.situacaoSessao);
pauta.setTitulo(sessao.numeroSessao);
if (sessao.materias != null) {
for (Materia mat : sessao.materias.materias) {
Proposicao proposicao = mat.toProposicao();
proposicao.setComissao("PLEN");
ProposicaoPautaComissao propPauta = new ProposicaoPautaComissao(pauta, proposicao);
propPauta.setOrdemPauta(mat.getSequenciaOrdem());
propPauta.setRelator(mat.getRelator());
pauta.addProposicaoPauta(propPauta);
}
if (!pauta.getProposicoesDaPauta().isEmpty()) {
Logger.getLogger(SislegisUtil.SISLEGIS_LOGGER).log(Level.FINE,
"pauta " + pauta + " com " + pauta.getProposicoesDaPauta().size());
pautas.add(pauta);
}
}
}
return pautas;
}
private void configAgendaPlenario(XStream xstream) {
xstream.alias("AgendaPlenario", AgendaPlenario.class);
xstream.processAnnotations(Sessao.class);
Materias.configXstream(xstream);
xstream.alias("Materia", Proposicao.class);
xstream.aliasField("Sessoes", AgendaPlenario.class, "sessoes");
// xstream.aliasField("Materias", Sessao.class, "materias");
xstream.aliasField("CodigoMateria", Proposicao.class, "idProposicao");
xstream.aliasField("SiglaMateria", Proposicao.class, "tipo");
xstream.aliasField("NumeroMateria", Proposicao.class, "numero");
xstream.aliasField("AnoMateria", Proposicao.class, "ano");
xstream.aliasField("Ementa", Proposicao.class, "ementa");
xstream.aliasField("SequenciaOrdem", Proposicao.class, "seqOrdemPauta");
}
}
class AgendaPlenario {
protected List<Sessao> sessoes = new ArrayList<Sessao>();
protected List<Sessao> getSessoes() {
return sessoes;
}
}
@XStreamAlias("Sessao")
class Sessao {
@XStreamAlias("Hora")
String hora;
@XStreamAlias("Data")
String data;
@XStreamAlias("TipoSessao")
String tipo;
@XStreamAlias("CodigoSessao")
Integer codigoSessao;
@XStreamAlias("SituacaoSessao")
String situacaoSessao;
@XStreamAlias("NumeroSessao")
String numeroSessao;
Date getData() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm");
return sdf.parse(data + " " + hora);
}
public Integer getCodigoSessao() {
return codigoSessao;
}
@XStreamAlias("Materias")
Materias materias = new Materias();
// protected List<Materia> materias = new ArrayList<Materia>();
}