package gcom.cadastro.atualizacaocadastral.command; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import gcom.atualizacaocadastral.ClienteEnderecoRetorno; import gcom.atualizacaocadastral.ClienteFoneRetorno; import gcom.atualizacaocadastral.ClienteImovelRetorno; import gcom.atualizacaocadastral.ClienteRetorno; import gcom.atualizacaocadastral.ControladorAtualizacaoCadastralLocal; import gcom.atualizacaocadastral.ImagemRetorno; import gcom.atualizacaocadastral.ImovelControleAtualizacaoCadastral; import gcom.atualizacaocadastral.ImovelRamoAtividadeRetorno; import gcom.atualizacaocadastral.ImovelRetorno; import gcom.atualizacaocadastral.ImovelSubcategoriaRetorno; import gcom.atualizacaocadastral.ImovelTipoOcupanteQuantidadeRetorno; import gcom.cadastro.IRepositorioCadastro; import gcom.cadastro.cliente.ClienteBuilder; import gcom.cadastro.cliente.ClienteFoneAtualizacaoCadastral; import gcom.cadastro.cliente.ClienteProprietarioBuilder; import gcom.cadastro.cliente.ClienteRelacaoTipo; import gcom.cadastro.cliente.ClienteResponsavelBuilder; import gcom.cadastro.cliente.ClienteUsuarioBuilder; import gcom.cadastro.cliente.ControladorClienteLocal; import gcom.cadastro.cliente.FoneTipo; import gcom.cadastro.cliente.IClienteAtualizacaoCadastral; import gcom.cadastro.cliente.IRepositorioClienteImovel; import gcom.cadastro.cliente.RamoAtividade; import gcom.cadastro.endereco.ControladorEnderecoLocal; import gcom.cadastro.imovel.Categoria; import gcom.cadastro.imovel.IRepositorioImovel; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.imovel.ImovelAtualizacaoCadastral; import gcom.cadastro.imovel.ImovelAtualizacaoCadastralBuilder; import gcom.cadastro.imovel.ImovelSubcategoriaAtualizacaoCadastral; import gcom.cadastro.imovel.ImovelTipoOcupante; import gcom.cadastro.imovel.Subcategoria; import gcom.seguranca.transacao.ControladorTransacaoLocal; import gcom.util.ControladorException; import gcom.util.ControladorUtilLocal; import gcom.util.ParserUtil; import gcom.util.Util; public class MontarObjetosRetornoCommand extends AbstractAtualizacaoCadastralCommand { private AtualizacaoCadastral atualizacaoCadastral; private AtualizacaoCadastralImovel atualizacaoCadastralImovel; private int matriculaImovel; private int matriculaUsuario; private int matriculaResponsavel; private int matriculaProprietario; private int tipoOperacao; private Integer idImovelRetorno; private IRepositorioClienteImovel repositorioClienteImovel; private final String USUARIO_IGUAL_PROPRIETARIO = "1"; private final String RESPONSAVEL_IGUAL_USUARIO = "0"; private final String RESPONSAVEL_IGUAL_PROPRIETARIO = "1"; public MontarObjetosRetornoCommand(ParserUtil parser, IRepositorioCadastro repositorioCadastro, ControladorUtilLocal controladorUtil, ControladorTransacaoLocal controladorTransacao, IRepositorioImovel repositorioImovel, ControladorEnderecoLocal controladorEndereco, ControladorAtualizacaoCadastralLocal controladorAtualizacaoCadastral, ControladorClienteLocal controladorCliente, IRepositorioClienteImovel repositorioClienteImovel) { super(parser, repositorioCadastro, controladorUtil, controladorTransacao, repositorioImovel, controladorEndereco, controladorAtualizacaoCadastral, controladorCliente); this.repositorioClienteImovel = repositorioClienteImovel; } public void execute(AtualizacaoCadastral atualizacaoCadastral) throws Exception { this.atualizacaoCadastral = atualizacaoCadastral; this.atualizacaoCadastralImovel = atualizacaoCadastral.getImovelAtual(); this.matriculaImovel = Integer.parseInt(atualizacaoCadastralImovel.getLinhaImovel("matricula")); this.matriculaUsuario = Integer.parseInt(atualizacaoCadastralImovel.getLinhaCliente("matriculaUsuario")); this.matriculaResponsavel = Integer.parseInt(atualizacaoCadastralImovel.getLinhaCliente("matriculaResponsavel")); this.matriculaProprietario = Integer.parseInt(atualizacaoCadastralImovel.getLinhaCliente("matriculaProprietario")); this.tipoOperacao = Integer.parseInt(atualizacaoCadastralImovel.getLinhaImovel("tipoOperacao")); salvarObjetosRetorno(); atualizarImovelControle(); } public void salvarObjetosRetorno() throws Exception { salvarImovelRetorno(); salvarClienteUsuario(); salvarClienteProprietario(); salvarClienteResponsavel(); salvarImagens(); } private void salvarImovelRetorno() throws Exception { ImovelAtualizacaoCadastralBuilder builder = new ImovelAtualizacaoCadastralBuilder(matriculaImovel, atualizacaoCadastral, atualizacaoCadastralImovel, tipoOperacao); ImovelAtualizacaoCadastral imovelTxt = builder.getImovelAtualizacaoCadastral(); salvarImovelRetorno(imovelTxt); salvarRamoAtividadeRetorno(); salvarImovelSubcategoriaRetorno(); salvarImovelQuantidadesOcupantes(); } private void salvarRamoAtividadeRetorno() throws Exception { for (DadoAtualizacaoRamoAtividade ramo: atualizacaoCadastralImovel.getDadosRamoAtividade()){ boolean existeRamoAtividadeAtualizacao = repositorioCadastro.existeImovelRamoAtividadeAtualizacaoCadastral(matriculaImovel, ramo.getId()); if (!existeRamoAtividadeAtualizacao) { ImovelRamoAtividadeRetorno imovelRamoAtividadeRetorno = new ImovelRamoAtividadeRetorno(); imovelRamoAtividadeRetorno.setImovel(new Imovel(matriculaImovel)); imovelRamoAtividadeRetorno.setRamoAtividade(new RamoAtividade(ramo.getId())); imovelRamoAtividadeRetorno.setUltimaAlteracao(new Date()); imovelRamoAtividadeRetorno.setIdImovelRetorno(idImovelRetorno); controladorUtil.inserir(imovelRamoAtividadeRetorno); } } } private void salvarImovelSubcategoriaRetorno() throws ControladorException { List<ImovelSubcategoriaAtualizacaoCadastral> subcategorias = getImovelSubcategorias(); for (ImovelSubcategoriaAtualizacaoCadastral subcategoria : subcategorias) { salvarImovelSubcategoriaRetorno(subcategoria, idImovelRetorno); } } private List<ImovelSubcategoriaAtualizacaoCadastral> getImovelSubcategorias() { List<ImovelSubcategoriaAtualizacaoCadastral> subcategorias = new ArrayList<ImovelSubcategoriaAtualizacaoCadastral>(); subcategorias.addAll(buildImovelSubcategorias(TipoEconomia.RESIDENCIAL)); subcategorias.addAll(buildImovelSubcategorias(TipoEconomia.COMERCIAL)); subcategorias.addAll(buildImovelSubcategorias(TipoEconomia.INDUSTRIAL)); subcategorias.addAll(buildImovelSubcategorias(TipoEconomia.PUBLICO)); return subcategorias; } private List<ImovelSubcategoriaAtualizacaoCadastral> buildImovelSubcategorias(TipoEconomia tipoEconomia) { List<ImovelSubcategoriaAtualizacaoCadastral> subcategorias = new ArrayList<ImovelSubcategoriaAtualizacaoCadastral>(); String descricaoSubcategoria = String.valueOf(tipoEconomia.getCodigo()); String codigoSubcategoria = ""; for (int j = 1; j < 5; j++) { codigoSubcategoria = descricaoSubcategoria + j; short qtdEconomias = Short.parseShort(atualizacaoCadastralImovel.getLinhaImovel("subcategoria" + codigoSubcategoria)); if(qtdEconomias != 0){ ImovelSubcategoriaAtualizacaoCadastral subcategoria = new ImovelSubcategoriaAtualizacaoCadastral(); subcategoria.setImovel(new Imovel(matriculaImovel)); subcategoria.setQuantidadeEconomias(qtdEconomias); subcategoria.setDescricaoSubcategoria(codigoSubcategoria); subcategoria.setDescricaoCategoria(tipoEconomia.getDescricao()); TipoSubcategoria tipoSubcategoria = TipoSubcategoria.getByCodigo(codigoSubcategoria); subcategoria.setCategoria(new Categoria(tipoSubcategoria.getIdCategoria())); subcategoria.setSubcategoria(new Subcategoria(tipoSubcategoria.getIdSubcategoria())); subcategorias.add(subcategoria); } } return subcategorias; } private void salvarClienteUsuario() throws Exception { IClienteAtualizacaoCadastral clienteTxt = new ClienteUsuarioBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.USUARIO); if (matriculaUsuario != 0 || StringUtils.isNotEmpty(atualizacaoCadastralImovel.getLinhaCliente("nomeUsuario"))) { salvarCliente(matriculaUsuario, clienteTxt, ClienteRelacaoTipo.USUARIO, ClienteBuilder.USUARIO); } } private void salvarClienteProprietario() throws Exception { IClienteAtualizacaoCadastral clienteTxt; if(atualizacaoCadastralImovel.getLinhaCliente("usuarioProprietario").equals(USUARIO_IGUAL_PROPRIETARIO)){ clienteTxt = new ClienteUsuarioBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.PROPRIETARIO); }else{ clienteTxt = new ClienteProprietarioBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.PROPRIETARIO); } if (StringUtils.isNotEmpty(atualizacaoCadastralImovel.getLinhaCliente("nomeProprietario"))) { salvarCliente(matriculaProprietario, clienteTxt, ClienteRelacaoTipo.PROPRIETARIO, ClienteBuilder.PROPRIETARIO); } } private void salvarClienteResponsavel() throws Exception { IClienteAtualizacaoCadastral clienteTxt; if(atualizacaoCadastralImovel.getLinhaCliente("tipoResponsavel").equals(RESPONSAVEL_IGUAL_USUARIO)){ clienteTxt = new ClienteUsuarioBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.RESPONSAVEL); }else if(atualizacaoCadastralImovel.getLinhaCliente("tipoResponsavel").equals(RESPONSAVEL_IGUAL_PROPRIETARIO)){ clienteTxt = new ClienteProprietarioBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.RESPONSAVEL); }else{ clienteTxt = new ClienteResponsavelBuilder(atualizacaoCadastralImovel).buildCliente(ClienteRelacaoTipo.RESPONSAVEL); } if (StringUtils.isNotEmpty(atualizacaoCadastralImovel.getLinhaCliente("nomeResponsavel"))) { salvarCliente(matriculaResponsavel, clienteTxt, ClienteRelacaoTipo.RESPONSAVEL, ClienteBuilder.RESPONSAVEL); } } private void salvarCliente(int matricula, IClienteAtualizacaoCadastral clienteTxt, Short clienteRelacaoTipo, String tipoCliente) throws Exception{ Integer tipoOperacaoCliente = getTipoOperacaoCliente(matricula, matriculaImovel, clienteTxt.getCpf(), clienteRelacaoTipo, repositorioClienteImovel); clienteTxt.setTipoOperacao(tipoOperacaoCliente); String telefone = atualizacaoCadastralImovel.getLinhaCliente("telefone" + tipoCliente); String celular = atualizacaoCadastralImovel.getLinhaCliente("celular" + tipoCliente); salvarClienteRetorno(matricula, clienteRelacaoTipo, clienteTxt, telefone, celular); } private void salvarClienteRetorno(int matricula, Short clienteRelacaoTipo, IClienteAtualizacaoCadastral clienteTxt, String telefone, String celular) throws ControladorException { Integer idclienteRetorno = salvarClienteRetorno(clienteTxt); salvarClienteImovelRetorno(clienteTxt, matriculaImovel, idclienteRetorno); salvarClienteFoneRetorno(telefone, clienteRelacaoTipo, FoneTipo.RESIDENCIAL, matricula, idclienteRetorno); salvarClienteFoneRetorno(celular, clienteRelacaoTipo, FoneTipo.CELULAR, matricula, idclienteRetorno); salvarClienteEnderecoRetorno(matricula, clienteTxt, idclienteRetorno); } private void salvarClienteFoneRetorno(String tipoClientFone, Short clienteRelacaoTipo, Integer foneTipo, int matriculaCliente, Integer idClienteRetorno) throws ControladorException { if (!tipoClientFone.trim().equals("")) { ClienteFoneAtualizacaoCadastral clienteFone = getClienteFoneAtualizacaoCadastral(tipoClientFone, foneTipo, matriculaCliente); ClienteFoneRetorno clienteFoneRetorno = new ClienteFoneRetorno(clienteFone); clienteFoneRetorno.setUltimaAlteracao(new Date()); clienteFoneRetorno.setIdClienteRetorno(idClienteRetorno); controladorUtil.inserir(clienteFoneRetorno); } } private ClienteFoneAtualizacaoCadastral getClienteFoneAtualizacaoCadastral(String tipoClientFone, Integer foneTipo, int matriculaCliente) { ClienteFoneAtualizacaoCadastral clienteFone = new ClienteFoneAtualizacaoCadastral(); if (tipoClientFone.length() == 10) { clienteFone.setDdd(tipoClientFone.substring(0, 2)); clienteFone.setTelefone(tipoClientFone.substring(2)); } else { clienteFone.setTelefone(tipoClientFone); } clienteFone.setIdFoneTipo(foneTipo); clienteFone.setIdCliente(matriculaCliente); return clienteFone; } private void salvarClienteEnderecoRetorno(Integer matriculaCliente, IClienteAtualizacaoCadastral clienteAtualizacaoCadastral, Integer idClienteRetorno) throws ControladorException { ClienteEnderecoRetorno clienteEnderecoRetorno = new ClienteEnderecoRetorno(matriculaCliente, clienteAtualizacaoCadastral); clienteEnderecoRetorno.setUltimaAlteracao(new Date()); clienteEnderecoRetorno.setIdClienteRetorno(idClienteRetorno); controladorUtil.inserir(clienteEnderecoRetorno); } private void salvarImovelRetorno(ImovelAtualizacaoCadastral imovelTxt) throws ControladorException { ImovelRetorno imovelRetorno = new ImovelRetorno(imovelTxt); imovelRetorno.setUltimaAlteracao(new Date()); idImovelRetorno = (Integer) controladorUtil.inserir(imovelRetorno); } private void salvarImovelSubcategoriaRetorno(ImovelSubcategoriaAtualizacaoCadastral imovelSubcategoriaTxt, Integer idImovelRetorno) throws ControladorException { ImovelSubcategoriaRetorno imovelSubcategoriaRetorno = new ImovelSubcategoriaRetorno(); imovelSubcategoriaRetorno.setImovel(imovelSubcategoriaTxt.getImovel()); imovelSubcategoriaRetorno.setSubcategoria(imovelSubcategoriaTxt.getSubcategoria()); imovelSubcategoriaRetorno.setQuantidadeEconomias(imovelSubcategoriaTxt.getQuantidadeEconomias()); imovelSubcategoriaRetorno.setUltimaAlteracao(new Date()); imovelSubcategoriaRetorno.setIdImovelRetorno(idImovelRetorno); controladorUtil.inserir(imovelSubcategoriaRetorno); } private void salvarImovelQuantidadesOcupantes() throws ControladorException { Collection<ImovelTipoOcupante> todosTipos = controladorUtil.listar(ImovelTipoOcupante.class); for (ImovelTipoOcupante tipo : todosTipos) { ImovelTipoOcupanteQuantidadeRetorno retorno = new ImovelTipoOcupanteQuantidadeRetorno(); retorno.setIdImovelRetorno(idImovelRetorno); retorno.setImovel(new Imovel(matriculaImovel)); retorno.setTipoOcupante(tipo); Integer qtd = Integer.parseInt(atualizacaoCadastralImovel.getLinhaImovel("tipoOcupante" + tipo.getDescricaoSemCaracteresEspeciais())); retorno.setQuantidade(qtd); controladorUtil.inserir(retorno); } } private Integer salvarClienteRetorno(IClienteAtualizacaoCadastral clienteTxt) throws ControladorException { ClienteRetorno clienteRetorno = new ClienteRetorno(clienteTxt); clienteRetorno.setUltimaAlteracao(new Date()); return (Integer)controladorUtil.inserir(clienteRetorno); } private void salvarClienteImovelRetorno(IClienteAtualizacaoCadastral clienteTxt, int matriculaImovel, Integer idClienteRetorno) throws ControladorException { ClienteImovelRetorno clienteImovelRetorno = new ClienteImovelRetorno(clienteTxt, matriculaImovel); clienteImovelRetorno.setUltimaAlteracao(new Date()); clienteImovelRetorno.setIdClienteRetorno(idClienteRetorno); clienteImovelRetorno.setIdImovelRetorno(idImovelRetorno); controladorUtil.inserir(clienteImovelRetorno); } private void salvarImagens() throws Exception { for (String nomeImagem : atualizacaoCadastral.getImagens()) { String caminhoJboss = System.getProperty("jboss.server.home.dir"); String pasta = "/images/" + atualizacaoCadastral.getArquivoTexto().getDescricaoArquivo(); if (nomeImagem.contains(Integer.toString(atualizacaoCadastralImovel.getMatricula()))) { inserirImagemImovel(atualizacaoCadastralImovel.getMatricula(), nomeImagem, caminhoJboss, pasta); } } } private void inserirImagemImovel(Integer matricula, String nomeImagem, String caminhoJboss, String pasta) { try { File imagem = new File(caminhoJboss + pasta, nomeImagem); ImagemRetorno imagemRetorno = new ImagemRetorno(); imagemRetorno.setIdImovelRetorno(idImovelRetorno); if (matricula > 0) { imagemRetorno.setIdImovel(matricula); } imagemRetorno.setNomeImagem(imagem.getName()); imagemRetorno.setPathImagem(pasta + "/" + nomeImagem); imagemRetorno.setUltimaAlteracao(new Date()); controladorUtil.inserir(imagemRetorno); } catch (Exception e) { e.printStackTrace(); } } private void atualizarImovelControle() throws ControladorException { ImovelControleAtualizacaoCadastral controle = controladorAtualizacaoCadastral.obterImovelControle(atualizacaoCadastralImovel.getImovelControle().getId()); controle.setImovelRetorno(new ImovelRetorno(idImovelRetorno)); controladorUtil.atualizar(controle); } }