/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.model;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import br.gov.serpro.ouvidoria.dao.Dao;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.dao.hibernate.HibernateDaoFactory;
/**
* Órgão
*
* Objetivo: Esta classe representa os órgãos.
*
* @author SERPRO
* @version $Revision: 1.1.2.3 $, $Date: 2011/10/20 19:27:38 $
* @version 0.1, Date: 2004/11/19
*/
public class Orgao extends Instituicao {
private static final long serialVersionUID = 1L;
public static String ATIVO = "A";
public static String INATIVO = "I";
/** Requerido */
private Timestamp dataInicioConsultaResposta;
/** Requerido */
private Timestamp dataFimConsultaResposta;
/** Requerido */
private String gestorResponsavel;
/** Requerido */
private String codigoPaisTelefoneResponsavel;
/** Requerido */
private String codigoCidadeTelefoneResponsavel;
/** Requerido */
private String telefoneContatoGestor;
/** Requerido */
private Timestamp dataInicioAcionamento;
/** Requerido */
private Timestamp dataFimAcionamento;
/** Requerido */
private String statusOrgao;
private ConfiguracoesOrgao configuracoes;
private Collection listaGruposEmail = new TreeSet();
private Collection listaMeioEnvioRespostaOrgao = new TreeSet();
private Collection listaSubOrgao = new TreeSet();
private Collection listaTodosSubOrgaos = new TreeSet();
private Collection listaTipoAcionadorOrgao = new TreeSet();
private Collection listaTipoAvaliacaoResposta = new TreeSet();
private Collection listaTipoMensagem = new TreeSet();
public Collection getListaTodosSubOrgaos() {
return listaTodosSubOrgaos;
}
public void setListaTodosSubOrgaos(Collection listaTodosSubOrgaos) {
this.listaTodosSubOrgaos = listaTodosSubOrgaos;
}
/**
* @return Retorna dataInicioAcionamento.
*/
public Timestamp getDataInicioAcionamento() {
return dataInicioAcionamento;
}
/**
* @param dataInicioAcionamento
* dataInicioAcionamento a ser atribuída.
*/
public void setDataInicioAcionamento(Timestamp dataInicioAcionamento) {
if (dataInicioAcionamento == null) {
throw new NullPointerException();
}
this.dataInicioAcionamento = dataInicioAcionamento;
}
/**
* @return Retorna dataFimConsultaResposta.
*/
public Timestamp getDataFimConsultaResposta() {
return dataFimConsultaResposta;
}
/**
* @param dataFimConsultaResposta
* dataFimConsultaResposta a ser atribuída.
*/
public void setDataFimConsultaResposta(Timestamp dataFimConsultaResposta) {
if (dataFimConsultaResposta == null) {
throw new NullPointerException();
}
this.dataFimConsultaResposta = dataFimConsultaResposta;
}
/**
* @return Retorna gestorResponsavel.
*/
public String getGestorResponsavel() {
return gestorResponsavel;
}
/**
* @param gestorResponsavel
* gestorResponsavel a ser atribuído.
*/
public void setGestorResponsavel(String gestorResponsavel) {
if (gestorResponsavel == null || gestorResponsavel.length() == 0) {
throw new NullPointerException();
}
this.gestorResponsavel = gestorResponsavel;
}
/**
* @return Retorna codigoPaisTelefoneResponsavel.
*/
public String getCodigoPaisTelefoneResponsavel() {
return codigoPaisTelefoneResponsavel;
}
/**
* @param codigoPaisTelefoneResponsavel
* codigoPaisTelefoneResponsavel a ser atribuído.
*/
public void setCodigoPaisTelefoneResponsavel(
String codigoPaisTelefoneResponsavel) {
this.codigoPaisTelefoneResponsavel = codigoPaisTelefoneResponsavel;
}
/**
* @return Retorna codigoCidadeTelefoneResponsavel.
*/
public String getCodigoCidadeTelefoneResponsavel() {
return codigoCidadeTelefoneResponsavel;
}
/**
* @param codigoCidadeTelefoneResponsavel
* codigoCidadeTelefoneResponsavel a ser atribuído.
*/
public void setCodigoCidadeTelefoneResponsavel(
String codigoCidadeTelefoneResponsavel) {
this.codigoCidadeTelefoneResponsavel = codigoCidadeTelefoneResponsavel;
}
/**
* @return Retorna telefoneContatoGestor.
*/
public String getTelefoneContatoGestor() {
return telefoneContatoGestor;
}
/**
* @param telefoneContatoGestor
* telefoneContatoGestor a ser atribuído.
*/
public void setTelefoneContatoGestor(String telefoneContatoGestor) {
if (telefoneContatoGestor == null
|| telefoneContatoGestor.length() == 0) {
throw new NullPointerException();
}
this.telefoneContatoGestor = telefoneContatoGestor;
}
/**
* @return Retorna dataInicioConsultaResposta.
*/
public Timestamp getDataInicioConsultaResposta() {
return dataInicioConsultaResposta;
}
/**
* @param dataInicioConsultaResposta
* dataInicioConsultaResposta a ser atribuída.
*/
public void setDataInicioConsultaResposta(
Timestamp dataInicioConsultaResposta) {
if (dataInicioConsultaResposta == null) {
throw new NullPointerException();
}
this.dataInicioConsultaResposta = dataInicioConsultaResposta;
}
/**
* @return Retorna dataFimAcionamento.
*/
public Timestamp getDataFimAcionamento() {
return dataFimAcionamento;
}
/**
* @param dataFimAcionamento
* dataFimAcionamento a ser atribuída.
*/
public void setDataFimAcionamento(Timestamp dataFimAcionamento) {
if (dataFimAcionamento == null) {
throw new NullPointerException();
}
this.dataFimAcionamento = dataFimAcionamento;
}
/**
* @return Retorna o status.
*/
public String getStatusOrgao() {
return statusOrgao;
}
/**
* @param status
* status a ser atribuído.
*/
public void setStatusOrgao(String status) {
if (status == null || status.length() == 0) {
throw new NullPointerException();
}
if ((status != null) && (status.length() > 0)
&& (status.compareTo(Orgao.ATIVO) != 0)
&& (status.compareTo(Orgao.INATIVO) != 0)) {
throw new IllegalArgumentException();
}
this.statusOrgao = status;
}
/**
* @return Retorna configuracoes.
*/
public ConfiguracoesOrgao getConfiguracoes() {
return this.configuracoes;
}
/**
* @param configuracoes
* configuracoes a ser atribuido.
*/
public void setConfiguracoes(ConfiguracoesOrgao configuracoes) {
this.configuracoes = configuracoes;
}
/**
* @return Retorna listaMeioEnvioRespostaOrgao.
*/
public Collection getListaMeioEnvioRespostaOrgao() {
return listaMeioEnvioRespostaOrgao;
}
/**
* @param listaMeioEnvioRespostaOrgao
* listaMeioEnvioRespostaOrgao a ser atribuido.
*/
public void setListaMeioEnvioRespostaOrgao(
Collection listaMeioEnvioRespostaOrgao) {
this.listaMeioEnvioRespostaOrgao = listaMeioEnvioRespostaOrgao;
}
/**
* Este método é responsável por adicionar um meio de envio resposta na
* lista de meios de envio de resposta disponíveis para o órgão.
*
* @param meioEnvioRespostaOrgao
* meioEnvioRespostaOrgao a ser incluído
*/
public void adicionarMeioEnvioRespostaOrgao(
MeioEnvioRespostaOrgao meioEnvioRespostaOrgao) {
this.listaMeioEnvioRespostaOrgao.add(meioEnvioRespostaOrgao);
}
/**
* Este método é responsável por remover um meio de envio resposta da lista
* de meios de envio de resposta disponíveis para o órgão.
*
* @param meioEnvioRespostaOrgao
* meioEnvioRespostaOrgao a ser removido
*/
public void removerMeioEnvioRespostaOrgao(
MeioEnvioRespostaOrgao meioEnvioRespostaOrgao) {
this.listaMeioEnvioRespostaOrgao.remove(meioEnvioRespostaOrgao);
}
/**
* @return Retorna listaSubOrgao.
*/
public Collection getListaSubOrgao() {
return listaSubOrgao;
}
/**
* @param listaSubOrgao
* listaSubOrgao a ser atribuido.
*/
public void setListaSubOrgao(Collection listaSubOrgao) {
this.listaSubOrgao = listaSubOrgao;
}
/**
* Recupera todos os assuntos associados aos sub-órgãos do órgão
*/
public List getListaAssuntosSubOrgaos() {
SubOrgao subOrgao;
Assunto assunto;
Collection listaAssuntoSubOrgao = new ArrayList();
Collection listaSubOrgaos = this.getListaSubOrgao();
List listaAssunto = new ArrayList();
Iterator iter;
Iterator iter2;
// Caso exista sub-órgãos, busca-se seus assuntos
if (listaSubOrgaos != null) {
iter = listaSubOrgaos.iterator();
while (iter.hasNext()) {
subOrgao = (SubOrgao) iter.next();
listaAssuntoSubOrgao = subOrgao.getListaAssunto();
if (listaAssuntoSubOrgao == null)
continue;
iter2 = listaAssuntoSubOrgao.iterator();
while (iter2.hasNext()) {
assunto = (Assunto) iter2.next();
if ((!listaAssunto.contains(assunto))
&& (assunto.getSituacao().compareToIgnoreCase(
"Ativo") == 0)) {
listaAssunto.add(assunto);
}
}
}
class AssuntoComparator implements Comparator {
public final int compare(Object a, Object b) {
return (((Assunto) a).getDescricao())
.compareTo((((Assunto) b).getDescricao()));
} // end compare
} // end class StringComparator
Collections.sort(listaAssunto, new AssuntoComparator());
return listaAssunto;
}
return null;
}
/**
* Recupera todos os assuntos associados ao órgão e seus sub-órgãos
*/
public List getListaTodosAssuntos() {
SubOrgao subOrgao;
Assunto assunto;
Collection listaAssuntoOrgao = new ArrayList();
Collection listaAssuntoSubOrgao = new ArrayList();
Collection listaSubOrgaos = this.getListaSubOrgao();
List listaAssunto = new ArrayList();
Iterator iter;
Iterator iter2;
// Inicialmente recupera a lista de assuntos do órgão
listaAssuntoOrgao = this.getListaAssunto();
if (listaAssuntoOrgao != null) {
iter = listaAssuntoOrgao.iterator();
while (iter.hasNext()) {
assunto = (Assunto) iter.next();
listaAssunto.add(assunto);
}
}
// Caso exista sub-órgãos, busca-se seus assuntos
if (listaSubOrgaos != null) {
iter = listaSubOrgaos.iterator();
while (iter.hasNext()) {
subOrgao = (SubOrgao) iter.next();
listaAssuntoSubOrgao = subOrgao.getListaAssunto();
if (listaAssuntoSubOrgao == null)
continue;
iter2 = listaAssuntoSubOrgao.iterator();
while (iter2.hasNext()) {
assunto = (Assunto) iter2.next();
if (!listaAssunto.contains(assunto)) {
listaAssunto.add(assunto);
}
}
}
class AssuntoComparator implements Comparator {
public final int compare(Object a, Object b) {
return (((Assunto) a).getDescricao())
.compareTo((((Assunto) b).getDescricao()));
} // end compare
} // end class StringComparator
Collections.sort(listaAssunto, new AssuntoComparator());
return listaAssunto;
}
return null;
}
/**
* Recupera todos os assuntos associados ao órgão e seus sub-órgãos
*
* @param situacao
* "Ativo" - retorna os assuntos ativos "Inativo" - retorna os
* assuntos inativos "Ambos" - retorna os assuntos ativos e
* inativos
*
*/
public List getListaTodosAssuntos(String situacao) {
SubOrgao subOrgao;
Assunto assunto;
Collection listaAssuntoOrgao = new ArrayList();
Collection listaAssuntoSubOrgao = new ArrayList();
List listaAssunto = new ArrayList();
Iterator iter;
Iterator iter2;
// Inicialmente recupera a lista de assuntos do órgão
listaAssuntoOrgao = this.getListaAssunto();
if (listaAssuntoOrgao != null) {
iter = listaAssuntoOrgao.iterator();
while (iter.hasNext()) {
assunto = (Assunto) iter.next();
if (situacao.equalsIgnoreCase("Ativo"))
if (assunto.getSituacao() == "Ativo")
listaAssunto.add(assunto);
if (situacao.equalsIgnoreCase("Inativo"))
if (assunto.getSituacao() == "Inativo")
listaAssunto.add(assunto);
if (situacao.equalsIgnoreCase("Ambos"))
listaAssunto.add(assunto);
}
}
// Recupera a lista de sub-órgãos
Collection listaSubOrgaos = this.getListaSubOrgao();
// Caso exista sub-órgãos, busca-se seus assuntos
if (listaSubOrgaos != null) {
iter = listaSubOrgaos.iterator();
while (iter.hasNext()) {
subOrgao = (SubOrgao) iter.next();
listaAssuntoSubOrgao = subOrgao.getListaAssunto();
iter2 = listaAssuntoSubOrgao.iterator();
while (iter2.hasNext()) {
assunto = (Assunto) iter2.next();
if (!listaAssunto.contains(assunto)) {
if (situacao.equalsIgnoreCase("Ativo"))
if (assunto.getSituacao() == "Ativo")
listaAssunto.add(assunto);
if (situacao.equalsIgnoreCase("Inativo"))
if (assunto.getSituacao() == "Inativo")
listaAssunto.add(assunto);
if (situacao.equalsIgnoreCase("Ambos"))
listaAssunto.add(assunto);
}
}
}
class AssuntoComparator implements Comparator {
public final int compare(Object a, Object b) {
return (((Assunto) a).getDescricao())
.compareTo((((Assunto) b).getDescricao()));
} // end compare
} // end class StringComparator
Collections.sort(listaAssunto, new AssuntoComparator());
return listaAssunto;
}
return null;
}
/**
* Este método retorna lista de objetos meioEnvioResposta, que estão dentro
* dos objetos MeioEnvioRespostaOrgao
*
* @return Lista de objetos Meio Envio Resposta
*/
public List getListaMeioEnvioResposta() {
Iterator iter;
List listaMeioEnvioResposta = new ArrayList();
iter = this.listaMeioEnvioRespostaOrgao.iterator();
while (iter.hasNext()) {
listaMeioEnvioResposta.add(((MeioEnvioRespostaOrgao) iter.next())
.getMeioEnvioResposta());
}
class MeioEnvioRespostaComparator implements Comparator {
public final int compare(Object a, Object b) {
return (((MeioEnvioResposta) a).getDescricao())
.compareTo((((MeioEnvioResposta) b).getDescricao()));
} // end compare
} // end class StringComparator
Collections.sort(listaMeioEnvioResposta,
new MeioEnvioRespostaComparator());
return listaMeioEnvioResposta;
}
public String getSituacao() {
if (this.statusOrgao.compareTo(Orgao.ATIVO) == 0)
return "Ativo";
return "Inativo";
}
/**
* @return Retorna listaTipoMensagem.
*/
public Collection getListaTipoMensagem() {
return listaTipoMensagem;
}
/**
* @param listaTipoMensagem
* listaTipoMensagem a ser atribuido.
*/
public void setListaTipoMensagem(Collection listaTipoMensagem) {
this.listaTipoMensagem = listaTipoMensagem;
}
/**
* @return Retorna listaTipoAvaliacaoResposta.
*/
public Collection getListaTipoAvaliacaoResposta() {
return listaTipoAvaliacaoResposta;
}
/**
* @param listaTipoAvaliacaoResposta
* listaTipoAvaliacaoResposta a ser atribuido.
*/
public void setListaTipoAvaliacaoResposta(
Collection listaTipoAvaliacaoResposta) {
this.listaTipoAvaliacaoResposta = listaTipoAvaliacaoResposta;
}
public List listarTipoMensagemAtivos() {
Iterator iter;
TipoMensagem tipoMensagem;
ArrayList retorno = new ArrayList();
if (!this.listaTipoMensagem.isEmpty()) {
iter = this.listaTipoMensagem.iterator();
while (iter.hasNext()) {
tipoMensagem = (TipoMensagem) iter.next();
if (tipoMensagem.getDataVigencia() != null) {
if (tipoMensagem.getDataVigencia().after(
new Timestamp(System.currentTimeMillis()))) {
retorno.add(tipoMensagem);
}
} else {
retorno.add(tipoMensagem);
}
}
}
class TipoMensagemComparator implements Comparator {
public final int compare(Object a, Object b) {
return (((TipoMensagem) a).getDescricao())
.compareTo((((TipoMensagem) b).getDescricao()));
} // end compare
} // end class StringComparator
Collections.sort(retorno, new TipoMensagemComparator());
return retorno;
}
/**
* @return Retorna listaGruposEmail.
*/
public Collection getListaGruposEmail() {
return listaGruposEmail;
}
/**
* @param listaGruposEmail
* listaGruposEmail a ser atribuido.
*/
public void setListaGruposEmail(Collection listaGruposEmail) {
this.listaGruposEmail = listaGruposEmail;
}
/**
* @return Retorna listaTipoAcionadorOrgao.
*/
public Collection getListaTipoAcionadorOrgao() {
return listaTipoAcionadorOrgao;
}
/**
* @param listaTipoAcionadorOrgao
* listaTipoAcionadorOrgao a ser atribuido.
*/
public void setListaTipoAcionadorOrgao(Collection listaTipoAcionadorOrgao) {
this.listaTipoAcionadorOrgao = listaTipoAcionadorOrgao;
}
/**
*
* @param orgao
* @return funcionario
* @throws DaoException
*/
public Funcionario getOuvidorOrgao(final Orgao orgao) throws DaoException {
final DaoFactory daoFactory = new HibernateDaoFactory();
Dao funcionarioDao = daoFactory.create(Funcionario.class);
Funcionario funcionario = new Funcionario();
String sql = " select f from Orgao o, Funcionario as f "
+ " where o.id = " + orgao.getId() + " and f.instituicao = "
+ orgao.getId() + " and f.perfil = 1 ";
funcionario = (Funcionario) funcionarioDao.query(sql).get(0);
return funcionario;
}
}