package gcom.cadastro.geografico;
import gcom.gui.ActionServletException;
import gcom.interceptor.RegistradorOperacao;
import gcom.seguranca.acesso.Operacao;
import gcom.seguranca.acesso.OperacaoEfetuada;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.seguranca.acesso.usuario.UsuarioAcao;
import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper;
import gcom.util.ConstantesJNDI;
import gcom.util.ControladorException;
import gcom.util.ControladorUtilLocal;
import gcom.util.ControladorUtilLocalHome;
import gcom.util.ErroRepositorioException;
import gcom.util.RemocaoInvalidaException;
import gcom.util.ServiceLocator;
import gcom.util.ServiceLocatorException;
import gcom.util.SistemaException;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* Defini��o da l�gica de neg�cio do Session Bean de ControladorCliente
*
* @author S�vio Luiz
* @created 25 de Abril de 2005
*/
public class ControladorGeograficoSEJB implements SessionBean {
private static final long serialVersionUID = 1L;
private IRepositorioGeografico repositorioGeografico = null;
SessionContext sessionContext;
/**
* < <Descri��o do m�todo>>
*
* @exception CreateException
* Descri��o da exce��o
*/
public void ejbCreate() throws CreateException {
repositorioGeografico = RepositorioGeograficoHBM.getInstancia();
}
/**
* < <Descri��o do m�todo>>
*/
public void ejbRemove() {
}
/**
* < <Descri��o do m�todo>>
*/
public void ejbActivate() {
}
/**
* < <Descri��o do m�todo>>
*/
public void ejbPassivate() {
}
/**
* Seta o valor de sessionContext
*
* @param sessionContext
* O novo valor de sessionContext
*/
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}
/**
* Atualiza um bairro no sistema
*
* @param bairro
* Description of the Parameter
* @throws ControladorException
*/
public void atualizarBairro(Bairro bairro, Collection colecaoBairroArea,
Collection colecaoBairroAreaRemover, Usuario usuarioLogado)
throws ControladorException {
// ------------ REGISTRAR TRANSA��O ----------------------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_BAIRRO_ATUALIZAR,
new UsuarioAcaoUsuarioHelper(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_BAIRRO_ATUALIZAR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
bairro.setOperacaoEfetuada(operacaoEfetuada);
bairro.adicionarUsuario(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(bairro);
// ------------ REGISTRAR TRANSA��O ----------------------------
FiltroBairro filtroBairro = new FiltroBairro();
// Parte que atualiza um bairro na base
// Parte de Validacao com Timestamp
// Seta o filtro para buscar o bairro na base
filtroBairro.adicionarParametro(new ParametroSimples(FiltroBairro.ID,
bairro.getId()));
// Procura o bairro na base
// Alterado Por Tiago Moreno - 17/07/2006
// Bairro bairroNaBase = (Bairro) ((List)
// (getControladorUtil().pesquisar(
// filtroBairro, Bairro.class.getName()))).get(0);
Bairro bairroNaBase = null;
Collection bairroNaBaseColecao = (Collection) getControladorUtil()
.pesquisar(filtroBairro, Bairro.class.getName());
if (bairroNaBaseColecao != null && !bairroNaBaseColecao.isEmpty()) {
bairroNaBase = (Bairro) bairroNaBaseColecao.iterator().next();
} else {
sessionContext.setRollbackOnly();
throw new ControladorException("atencao.atualizacao.timestamp");
}
// fim da altera��o - Tiago Moreno - 17/07/2006
// Verificar se o cliente j� foi atualizado por outro usu�rio
// durante
// esta atualiza��o
if (bairroNaBase.getUltimaAlteracao()
.after(bairro.getUltimaAlteracao())) {
sessionContext.setRollbackOnly();
throw new ControladorException("atencao.atualizacao.timestamp");
}
// limpa os parametros para fazer uma nova pesquisa
filtroBairro.limparListaParametros();
filtroBairro.adicionarParametro(new ParametroSimples(
FiltroBairro.CODIGO, "" + bairro.getCodigo()));
filtroBairro.adicionarParametro(new ParametroSimples(
FiltroBairro.MUNICIPIO_ID, bairro.getMunicipio().getId()));
Collection bairrosPesquisados = getControladorUtil().pesquisar(
filtroBairro, Bairro.class.getName());
if (bairrosPesquisados != null && !bairrosPesquisados.isEmpty()) {
// Procura o bairro na base
Bairro bairroPesquisado = (Bairro) ((List) (bairrosPesquisados))
.get(0);
if (!bairroPesquisado.getId().equals(bairro.getId())) {
sessionContext.setRollbackOnly();
throw new ControladorException(
"atencao.pesquisa_bairro_ja_cadastrada");
}
}
// Atualiza a data de �ltima altera��o
bairro.setUltimaAlteracao(new Date());
// Atualiza o bairro
getControladorUtil().atualizar(bairro);
// Fim da parte que atualiza um bairro na base
if (colecaoBairroArea != null && !colecaoBairroArea.isEmpty()) {
Iterator iterator = colecaoBairroArea.iterator();
while (iterator.hasNext()) {
BairroArea bairroArea = (BairroArea) iterator.next();
bairroArea.setBairro(bairro);
bairroArea.setUltimaAlteracao(new Date());
bairroArea.setOperacaoEfetuada(operacaoEfetuada);
bairroArea.adicionarUsuario(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(bairroArea);
getControladorUtil().inserirOuAtualizar(bairroArea);
}
}
if (colecaoBairroAreaRemover != null
&& !colecaoBairroAreaRemover.isEmpty()) {
Iterator iteratorRemover = colecaoBairroAreaRemover.iterator();
while (iteratorRemover.hasNext()) {
BairroArea bairroAreaRemover = (BairroArea) iteratorRemover
.next();
getControladorUtil().remover(bairroAreaRemover);
}
}
}
/**
* < <Descri��o do m�todo>>
*
* @param codigoSetorComercial
* Descri��o do par�metro
* @return Descri��o do retorno
* @throws ControladorException
*/
public Collection pesquisarMunicipoPeloSetorComercial(
String codigoSetorComercial, String idMunicipio)
throws ControladorException {
try {
return repositorioGeografico.pesquisarMunicipoPeloSetorComercial(
codigoSetorComercial, idMunicipio);
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
}
/**
* Retorna o valor de controladorUtil
*
* @return O valor de controladorUtil
*/
private ControladorUtilLocal getControladorUtil() {
ControladorUtilLocalHome localHome = null;
ControladorUtilLocal local = null;
// pega a inst�ncia do ServiceLocator.
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorUtilLocalHome) locator
.getLocalHome(ConstantesJNDI.CONTROLADOR_UTIL_SEJB);
// guarda a referencia de um objeto capaz de fazer chamadas �
// objetos remotamente
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
/**
* Verifica se o munic�pio possui CEP por logradouro
*
* @author Raphael Rossiter
* @date 16/05/2006
*
* @param municipio
* @return boolean
*/
public boolean verificarMunicipioComCepPorLogradouro(Municipio municipio)
throws ControladorException {
boolean retorno = true;
if (municipio.getCepInicio() != null && municipio.getCepFim() != null
&& municipio.getCepInicio().equals(municipio.getCepFim())) {
retorno = false;
}
return retorno;
}
/**
* M�todo que retorna o maior c�digo do bairro de um munic�pio
*
* @author Rafael Corr�a
* @date 10/07/2006
*
* @param idMunicipio
* @return
* @throws ControladorException
*/
public int pesquisarMaximoCodigoBairro(Integer idMunicipio)
throws ControladorException {
try {
return repositorioGeografico
.pesquisarMaximoCodigoBairro(idMunicipio);
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
}
/**
* Pesquisa um munic�pio pelo id
*
* @author Rafael Corr�a
* @date 01/08/2006
*
* @return Munic�pio
* @exception ErroRepositorioException
* Erro no hibernate
*/
public Municipio pesquisarObjetoMunicipioRelatorio(Integer idMunicipio)
throws ControladorException {
try {
// pesquisa as gerencias regionais existentes no sistema
Object[] objetoMunicipio = repositorioGeografico
.pesquisarObjetoMunicipioRelatorio(idMunicipio);
Municipio municipio = new Municipio();
municipio.setId((Integer) objetoMunicipio[0]);
municipio.setNome((String) objetoMunicipio[1]);
return municipio;
// erro no hibernate
} catch (ErroRepositorioException ex) {
// levanta a exce��o para a pr�xima camada
throw new ControladorException("erro.sistema", ex);
}
}
/**
* Pesquisa um bairro pelo c�digo e pelo id do munic�pio
*
* @author Rafael Corr�a
* @date 01/08/2006
*
* @return Bairro
* @exception ErroRepositorioException
* Erro no hibernate
*/
public Bairro pesquisarObjetoBairroRelatorio(Integer codigoBairro,
Integer idMunicipio) throws ControladorException {
try {
// pesquisa as gerencias regionais existentes no sisitema
Object[] objetoBairro = repositorioGeografico
.pesquisarObjetoBairroRelatorio(codigoBairro, idMunicipio);
Bairro bairro = new Bairro();
bairro.setCodigo(((Integer) objetoBairro[0]).intValue());
bairro.setNome((String) objetoBairro[1]);
return bairro;
// erro no hibernate
} catch (ErroRepositorioException ex) {
// levanta a exce��o para a pr�xima camada
throw new ControladorException("erro.sistema", ex);
}
}
/**
* [UC0001] Inserir Munic�pio
*
* @author Kassia Albuquerque
* @date 18/12/2006
*
* @param municipio
* Descri��o do par�metro
*/
public Integer inserirMunicipio(Municipio municipio, Usuario usuarioLogado)
throws ControladorException {
// [FS0003] - Verificando a exist�ncia do Municipio
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(
FiltroMunicipio.ID, municipio.getId()));
Collection colecaoMunicipio = getControladorUtil().pesquisar(
filtroMunicipio, Municipio.class.getName());
if (colecaoMunicipio != null && !colecaoMunicipio.isEmpty()) {
throw new ControladorException("atencao.municipio.existente");
}
// [FS0005] - Validar CEP
Integer cepInicial = new Integer(municipio.getCepInicio());
Integer cepFinal = new Integer(municipio.getCepFim());
if (cepInicial.intValue() > cepFinal.intValue()) {
throw new ActionServletException(
"atencao.cep_inicio.anterior.cep_fim");
}
municipio.setUltimaAlteracao(new Date());
// ------------ REGISTRAR TRANSA��O----------------------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_MUNICIPIO_INSERIR,
new UsuarioAcaoUsuarioHelper(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_MUNICIPIO_INSERIR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
municipio.setOperacaoEfetuada(operacaoEfetuada);
municipio.adicionarUsuario(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(municipio);
// ------------ REGISTRAR TRANSA��O----------------------------
Integer idMunicipio = (Integer) getControladorUtil().inserir(municipio);
municipio.setId(idMunicipio);
return idMunicipio;
}
/**
* [UC0035] Inserir Bairro
*
* Insere um objeto do tipo bairro no BD
*
* @author Vivianne Sousa
* @date 22/12/2006
* @param bairro
* @param colecaoBairroArea
* @return idBairro
* @throws ControladorException
*/
public Integer inserirBairro(Bairro bairro, Collection colecaoBairroArea,
Usuario usuarioLogado) throws ControladorException {
// ------------ REGISTRAR TRANSA��O ----------------------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_BAIRRO_INSERIR, new UsuarioAcaoUsuarioHelper(
usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_BAIRRO_INSERIR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
bairro.setOperacaoEfetuada(operacaoEfetuada);
bairro.adicionarUsuario(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(bairro);
// ------------ REGISTRAR TRANSA��O ----------------------------
// -- Inserir o bairro --
Integer idBairro = (Integer) this.getControladorUtil().inserir(bairro);
// -- codigo para inserir BairroArea --
bairro.setId(idBairro);
Iterator iterator = colecaoBairroArea.iterator();
while (iterator.hasNext()) {
BairroArea bairroArea = (BairroArea) iterator.next();
bairroArea.setBairro(bairro);
bairroArea.setUltimaAlteracao(new Date());
// ------------ REGISTRAR TRANSA��O ----------------
bairroArea.setOperacaoEfetuada(operacaoEfetuada);
bairroArea.adicionarUsuario(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(bairroArea);
// ------------ REGISTRAR TRANSA��O ----------------
this.getControladorUtil().inserir(bairroArea);
}
// -- fim de codigo para inserir BairroArea --
return idBairro;
}
/**
* @author Vivianne Sousa
* @date 26/12/2006
*
* @return colecao de BairroArea
* @exception ErroRepositorioException
* Erro no hibernate
*/
public Collection pesquisarBairroArea(Integer idBairro)
throws ControladorException {
try {
return repositorioGeografico.pesquisarBairroArea(idBairro);
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
}
/**
* Remover Bairro
*
* Remove os bairros e area bairro selecionados na lista da funcionalidade
* Manter Bairro
*
* @author Vivianne Sousa
* @date 26/12/2006
* @param bairro
* @param colecaoBairroArea
* @return idBairro
* @throws ControladorException
*/
public void removerBairro(String[] ids, Usuario usuarioLogado)
throws ControladorException {
// ------------ REGISTRAR TRANSA��O ----------------
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_BAIRRO_REMOVER);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
UsuarioAcaoUsuarioHelper usuarioAcaoUsuarioHelper = new UsuarioAcaoUsuarioHelper(
usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
Collection<UsuarioAcaoUsuarioHelper> colecaoUsuarios = new ArrayList();
colecaoUsuarios.add(usuarioAcaoUsuarioHelper);
// ------------ REGISTRAR TRANSA��O ----------------
// remover areaBairro para cada bairro a remover
int i = 0;
while (i < ids.length) {
String idBairro = ids[i];
try {
repositorioGeografico
.removerTodosBairroAreaPorBairro(new Integer(idBairro));
} catch (RemocaoInvalidaException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException(
"atencao.dependencias.existentes", ex);
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
i = i + 1;
}
// remover bairro(s)
this.getControladorUtil().remover(ids, Bairro.class.getName(),
operacaoEfetuada, colecaoUsuarios);
}
/**
* [UC0006] Filtrar Munic�pio
*
* @author Kassia Albuquerque
* @date 04/01/2007
*
* @param Integer
* @return boolean
*/
public boolean verificarExistenciaMunicipio(Integer codigoMunicipio)
throws ControladorException {
// [FS0004] - Verificando a exist�ncia do Municipio
boolean retorno = true;
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(
FiltroMunicipio.ID, codigoMunicipio));
Collection colecaoMunicipio = getControladorUtil().pesquisar(
filtroMunicipio, Municipio.class.getName());
if (colecaoMunicipio == null || colecaoMunicipio.isEmpty()) {
throw new ControladorException("atencao.municipio.inexistente");
}
return retorno;
}
/**
* [UC0005] Manter Municipio
*
* Remover Municipio
*
* @author Kassia Albuquerque
* @date 04/01/2007
*
* @pparam municipio
* @throws ControladorException
*/
public void removerMunicipio(String[] ids, Usuario usuarioLogado)throws ControladorException {
// ------------ REGISTRAR TRANSA��O ----------------
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_MUNICIPIO_REMOVER);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
UsuarioAcaoUsuarioHelper usuarioAcaoUsuarioHelper = new UsuarioAcaoUsuarioHelper(
usuarioLogado, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
Collection<UsuarioAcaoUsuarioHelper> colecaoUsuarios = new ArrayList();
colecaoUsuarios.add(usuarioAcaoUsuarioHelper);
// ------------ REGISTRAR TRANSA��O ----------------
// [FS0003]Municipiopossui vinculos no sistema
this.getControladorUtil().remover(ids, Municipio.class.getName(),null, null);
}
/**
* [UC005] Manter Municipio [SB0001]Atualizar Municipio
*
* @author Kassia Albuquerque
* @date 10/01/2007
*
* @pparam municipio
* @throws ControladorException
*/
public void atualizarMunicipio(Municipio municipio,
Usuario usuarioLogado) throws ControladorException {
// [FS0005] - Validar CEP
Integer cepInicial = new Integer(municipio.getCepInicio());
Integer cepFinal = new Integer(municipio.getCepFim());
if (cepInicial.intValue() > cepFinal.intValue()) {
throw new ActionServletException("atencao.cep_inicio.anterior.cep_fim");
}
// municipio.setUltimaAlteracao(new Date());
// [UC0107] - Registrar Transa��o
// ------------ REGISTRAR TRANSA��O----------------------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_MUNICIPIO_ATUALIZAR,new UsuarioAcaoUsuarioHelper(usuarioLogado,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_MUNICIPIO_ATUALIZAR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
municipio.setOperacaoEfetuada(operacaoEfetuada);
municipio.adicionarUsuario(usuarioLogado,UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(municipio);
// ------------ REGISTRAR TRANSA��O----------------------------
// [FS0002] - Atualiza��o realizada por outro usu�rio
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
// Seta o filtro para buscar o municipio na base
filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, municipio.getId()));
// Procura municipio na base
Collection municipioAtualizadas = getControladorUtil().pesquisar(filtroMunicipio,Municipio.class.getName());
Municipio municipioNaBase = (Municipio) Util.retonarObjetoDeColecao(municipioAtualizadas);
if (municipioNaBase == null) {
sessionContext.setRollbackOnly();
throw new ControladorException("atencao.registro_remocao_nao_existente");
}
// Verificar se o municipio j� foi atualizado por outro usu�rio
// durante esta atualiza��o
if (municipioNaBase.getUltimaAlteracao().after(municipio.getUltimaAlteracao())) {
sessionContext.setRollbackOnly();
throw new ControladorException("atencao.atualizacao.timestamp");
}
municipio.setUltimaAlteracao(new Date());
// Atualiza o objeto na base
getControladorUtil().atualizar(municipio);
}
/**
* M�todo que retorna o maior id do Munic�pio
*
* @author Rafael Corr�a
* @date 24/07/2008
*
* @return
* @throws ControladorException
*/
public int pesquisarMaximoIdMunicipio() throws ControladorException {
try {
return repositorioGeografico.pesquisarMaximoIdMunicipio();
} catch (ErroRepositorioException ex) {
sessionContext.setRollbackOnly();
throw new ControladorException("erro.sistema", ex);
}
}
/**
* M�todo que retorna o municipio do Imovel
*
* @author Hugo Amorim
* @date 27/08/2009
*
* @return Municipio
* @throws ControladorException
*/
public Collection pesquisarMunicipioDoImovel(Integer idImovel)
throws ControladorException{
try {
return repositorioGeografico.pesquisarMunicipioDoImovel(idImovel);
} catch (ErroRepositorioException ex) {
throw new ControladorException("erro.sistema", ex);
}
}
/**
* [UC0592] Filtrar Rela��o de Parcelamentos
*
* M�todo repons�vel por retornar todos os munic�pios que possuem alguma
* associa��o com uma localidade (localidade.muni_idprincipal != null)
*
* @author Diogo Peixoto
* @date 26/04/2011
*
* @return Collection
* @throws ControladorException
*/
public Collection pesquisarMunicipiosAssociadoLocalidade() throws ControladorException{
try {
return repositorioGeografico.pesquisarMunicipiosAssociadoLocalidade();
} catch (ErroRepositorioException ex) {
throw new ControladorException("erro.sistema", ex);
}
}
}