package br.gov.mj.sislegis.app.parser.camara;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
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.ProposicaoSearcher;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
public class ParserPautaCamara {
public static void main(String[] args) throws Exception {
ParserPautaCamara parser = new ParserPautaCamara();
// TODO: Informação que vem do filtro
Long idComissao = 2001L;
String datIni = "20151102";
String datFim = "20151109";
Set<PautaReuniaoComissao> pautas = parser.getPautaComissao("", idComissao, 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 + " " + ppc.getProposicao() + " ");
System.out.println("\t Resultado: " + ppc.getResultado());
}
}
}
public List<ReuniaoBeanCamara> getReunioes(Long idComissao, String datIni, String datFim) throws IOException {
return getPauta(idComissao, datIni, datFim).getReunioes();
}
public PautaBean getPauta(Long idComissao, String datIni, String datFim) throws IOException {
String wsURL = new StringBuilder("http://www.camara.gov.br/SitCamaraWS/Orgaos.asmx/ObterPauta?IDOrgao=")
.append(idComissao).append("&datIni=").append(datIni).append("&datFim=").append(datFim).toString();
XStream xstream = new XStream();
xstream.ignoreUnknownElements();
PautaBean pauta = new PautaBean();
config(xstream);
ParserFetcher.fetchXStream(wsURL, xstream, pauta);
return pauta;
}
public Set<PautaReuniaoComissao> getPautaComissao(String comissaoNome, Long idComissao, String datIni, String datFim)
throws IOException, ParseException {
Set<PautaReuniaoComissao> pautas = new HashSet<PautaReuniaoComissao>();
String wsURL = new StringBuilder("http://www.camara.gov.br/SitCamaraWS/Orgaos.asmx/ObterPauta?IDOrgao=")
.append(idComissao).append("&datIni=").append(datIni).append("&datFim=").append(datFim).toString();
XStream xstream = new XStream();
xstream.ignoreUnknownElements();
PautaBean pauta = new PautaBean();
xstream.alias("pauta", PautaBean.class);
xstream.alias("reuniao", ReuniaoBeanCamara.class);
xstream.alias("proposicao", ProposicaoPautaComissaoWrapper.class);
// Utilizamos o implicit quando os filhos já tem os dados que queremos
// buscar. Ou seja, não tem um pai e vários filhos do mesmo tipo.
xstream.addImplicitCollection(PautaBean.class, "reunioes");
xstream.aliasAttribute(PautaBean.class, "orgao", "orgao");
xstream.aliasAttribute(PautaBean.class, "dataInicial", "dataInicial");
xstream.aliasAttribute(PautaBean.class, "dataFinal", "dataFinal");
xstream.aliasField("comissao", ReuniaoBeanCamara.class, "comissao");
xstream.aliasField("horario", ReuniaoBeanCamara.class, "hora");
xstream.aliasField("data", ReuniaoBeanCamara.class, "data");
xstream.aliasField("codReuniao", ReuniaoBeanCamara.class, "codigo");
xstream.aliasField("tipo", ReuniaoBeanCamara.class, "tipo");
xstream.aliasField("estado", ReuniaoBeanCamara.class, "situacao");
xstream.aliasField("tituloReuniao", ReuniaoBeanCamara.class, "titulo");
ParserFetcher.fetchXStream(wsURL, xstream, pauta);
for (ReuniaoBeanCamara reuniao : pauta.getReunioes()) {
Comissao comissao = new Comissao();
String sigla = reuniao.getComissao();
if (sigla != null && sigla.indexOf("-") > -1) {
sigla = sigla.substring(0, sigla.indexOf("-")).trim();
}
comissao.setSigla(sigla);
PautaReuniaoComissao pautaReuniaoComissao = new PautaReuniaoComissao(reuniao.getDate(), comissao,
reuniao.getCodigo());
pautaReuniaoComissao.setOrigem(Origem.CAMARA);
pautaReuniaoComissao
.setLinkPauta("http://www.camara.leg.br/internet/ordemdodia/ordemDetalheReuniaoCom.asp?codReuniao="
+ reuniao.getCodigo().toString());
pautaReuniaoComissao.converterSituacao(reuniao.getSituacao());
pautaReuniaoComissao.setTipo(reuniao.getTipo());
pautaReuniaoComissao.setTitulo(reuniao.getTitulo());
// adiciona dados da comissao
for (ProposicaoPautaComissaoWrapper pautaProposicao : reuniao.getPautaProposicoes()) {
Proposicao ptemp = new Proposicao();
ptemp.setIdProposicao(pautaProposicao.idProposicao);
ptemp.setOrigem(Origem.CAMARA);
ptemp.setEmenta(pautaProposicao.ementa);
ptemp.setComissao(sigla);
ptemp.setSigla(pautaProposicao.sigla);
ProposicaoPautaComissao ppc = new ProposicaoPautaComissao(pautaReuniaoComissao, ptemp);
ppc.setOrdemPauta(pautaProposicao.numOrdemApreciacao);
ppc.setRelator(pautaProposicao.getRelator());
ppc.setResultado(pautaProposicao.resultado);
pautaReuniaoComissao.addProposicaoPauta(ppc);
}
if (pautaReuniaoComissao.getProposicoesDaPauta().size() > 0) {
pautas.add(pautaReuniaoComissao);
}
}
return pautas;
}
private void config(XStream xstream) {
xstream.alias("pauta", PautaBean.class);
xstream.alias("reuniao", ReuniaoBeanCamara.class);
xstream.alias("proposicao", Proposicao.class);
// Utilizamos o implicit quando os filhos já tem os dados que queremos
// buscar. Ou seja, não tem um pai e vários filhos do mesmo tipo.
xstream.addImplicitCollection(PautaBean.class, "reunioes");
xstream.aliasAttribute(PautaBean.class, "orgao", "orgao");
xstream.aliasAttribute(PautaBean.class, "dataInicial", "dataInicial");
xstream.aliasAttribute(PautaBean.class, "dataFinal", "dataFinal");
xstream.aliasField("comissao", ReuniaoBeanCamara.class, "comissao");
xstream.aliasField("horario", ReuniaoBeanCamara.class, "hora");
xstream.aliasField("data", ReuniaoBeanCamara.class, "data");
xstream.aliasField("codReuniao", ReuniaoBeanCamara.class, "codigo");
xstream.aliasField("tipo", ReuniaoBeanCamara.class, "tipo");
xstream.aliasField("estado", ReuniaoBeanCamara.class, "situacao");
xstream.aliasField("tituloReuniao", ReuniaoBeanCamara.class, "titulo");
}
}
class OrgaosBean {
protected List<OrgaoCamara> orgaos = new ArrayList<OrgaoCamara>();
}
class PautaBean {
protected String orgao;
protected String dataInicial;
protected String dataFinal;
protected List<ReuniaoBeanCamara> reunioes = new ArrayList<ReuniaoBeanCamara>();
protected List<ReuniaoBeanCamara> getReunioes() {
return reunioes;
}
protected String getOrgao() {
return orgao;
}
}
@XStreamAlias("proposicao")
class ProposicaoPautaComissaoWrapper {
Integer idProposicao;
Integer numOrdemApreciacao;
String resultado;
String relator;
String sigla;
String textoParecerRelator;
String ementa;
public String getRelator() {
if (relator == null || relator.length() == 0) {
return ProposicaoSearcher.SEM_RELATOR_DEFINIDO;
}
return relator;
}
}