package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citcorpore.bean.ContratosUnidadesDTO;
import br.com.centralit.citcorpore.bean.EnderecoDTO;
import br.com.centralit.citcorpore.bean.LocalidadeUnidadeDTO;
import br.com.centralit.citcorpore.bean.UnidadeDTO;
import br.com.centralit.citcorpore.bean.UnidadesAccServicosDTO;
import br.com.centralit.citcorpore.integracao.ContratosUnidadesDAO;
import br.com.centralit.citcorpore.integracao.EmpregadoDao;
import br.com.centralit.citcorpore.integracao.EnderecoDao;
import br.com.centralit.citcorpore.integracao.LocalidadeUnidadeDAO;
import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao;
import br.com.centralit.citcorpore.integracao.UnidadeDao;
import br.com.centralit.citcorpore.integracao.UnidadesAccServicosDao;
import br.com.centralit.citcorpore.util.Arvore;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.Condition;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilDatas;
import br.com.citframework.util.UtilI18N;
import br.com.citframework.util.geo.GeoUtils;
@SuppressWarnings({"rawtypes", "unchecked"})
public class UnidadeServiceEjb extends CrudServiceImpl implements UnidadeService {
private static final Logger LOGGER = Logger.getLogger(UnidadeServiceEjb.class.getName());
private UnidadeDao dao;
private EnderecoDao enderecoDAO;
@Override
protected UnidadeDao getDao() {
if (dao == null) {
dao = new UnidadeDao();
}
return dao;
}
private EnderecoDao getEnderecoDAO() {
if (enderecoDAO == null) {
enderecoDAO = new EnderecoDao();
}
return enderecoDAO;
}
private UnidadesAccServicosDao unidadesAccServicosDAO;
private UnidadesAccServicosDao getUnidadesAccServicosDAO() {
if (unidadesAccServicosDAO == null) {
unidadesAccServicosDAO = new UnidadesAccServicosDao();
}
return unidadesAccServicosDAO;
}
public void setUnidadesAccServicosDao(final UnidadesAccServicosDao unidadesAccServicosDao) {
unidadesAccServicosDAO = unidadesAccServicosDao;
}
/** Bean de UnidadeDTO. */
private UnidadeDTO unidadeDTO;
private UnidadeDTO getUnidadeDTO() {
return unidadeDTO;
}
public Class<UnidadeDTO> getBean() {
return UnidadeDTO.class;
}
@Override
public IDto create(final IDto model) throws ServiceException, LogicException {
final UnidadeDao unidadeDao = this.getDao();
final ContratosUnidadesDAO contratosUnidadesDAO = new ContratosUnidadesDAO();
final LocalidadeUnidadeDAO localidadeUnidadeDao = new LocalidadeUnidadeDAO();
final EnderecoDao enderecoDao = new EnderecoDao();
UnidadeDTO unidade = (UnidadeDTO) model;
final ContratosUnidadesDTO contratosUnidadesDTO = new ContratosUnidadesDTO();
EnderecoDTO enderecoDTO = new EnderecoDTO();
unidade.setDataInicio(UtilDatas.getDataAtual());
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
unidadeDao.setTransactionControler(tc);
contratosUnidadesDAO.setTransactionControler(tc);
localidadeUnidadeDao.setTransactionControler(tc);
enderecoDao.setTransactionControler(tc);
tc.start();
enderecoDTO.setLogradouro(unidade.getLogradouro());
enderecoDTO.setComplemento(unidade.getComplemento());
enderecoDTO.setNumero(unidade.getNumero());
enderecoDTO.setBairro(unidade.getBairro());
enderecoDTO.setCep(unidade.getCep());
enderecoDTO.setIdCidade(unidade.getIdCidade());
enderecoDTO.setIdPais(unidade.getIdPais());
enderecoDTO.setIdUf(unidade.getIdUf());
enderecoDTO.setLatitude(unidade.getLatitude());
enderecoDTO.setLongitude(unidade.getLongitude());
enderecoDTO = (EnderecoDTO) enderecoDao.create(enderecoDTO);
if (enderecoDTO.getIdEndereco() != null) {
unidade.setIdEndereco(enderecoDTO.getIdEndereco());
}
if (unidade.getAceitaEntregaProduto() == null) {
unidade.setAceitaEntregaProduto("N");
}
unidade = (UnidadeDTO) unidadeDao.create(unidade);
this.criarEAssociarServicoAUnidade(unidade);
if (unidade.getIdContrato() != null) {
for (int i = 0; i < unidade.getIdContrato().length; i++) {
contratosUnidadesDTO.setIdUnidade(unidade.getIdUnidade());
contratosUnidadesDTO.setIdContrato(unidade.getIdContrato()[i]);
if (contratosUnidadesDTO.getIdContrato() != null) {
contratosUnidadesDAO.create(contratosUnidadesDTO);
}
}
}
if (unidade.getListaDeLocalidade() != null) {
if (unidade.getIdUnidade() != null && unidade.getIdUnidade() != 0) {
for (final LocalidadeUnidadeDTO localidadeUnidadeDto : unidade.getListaDeLocalidade()) {
final LocalidadeUnidadeDTO localidade = new LocalidadeUnidadeDTO();
localidade.setIdUnidade(unidade.getIdUnidade());
localidade.setIdLocalidade(localidadeUnidadeDto.getIdLocalidade());
localidade.setDataInicio(UtilDatas.getDataAtual());
localidadeUnidadeDao.create(localidade);
}
}
}
tc.commit();
tc.close();
} catch (final Exception e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
this.rollbackTransaction(tc, e);
}
return this.getUnidadeDTO();
}
@Override
public void update(final IDto model) throws ServiceException, LogicException {
final UnidadeDao unidadeDAO = this.getDao();
final UnidadeDTO unidade = (UnidadeDTO) model;
final ContratosUnidadesDAO contratosUnidadesDAO = new ContratosUnidadesDAO();
final LocalidadeUnidadeDAO localidadeUnidadeDAO = new LocalidadeUnidadeDAO();
final ContratosUnidadesDTO contratosUnidadesDTO = new ContratosUnidadesDTO();
final EnderecoDao enderecoDAO = this.getEnderecoDAO();
EnderecoDTO enderecoDTO = new EnderecoDTO();
final TransactionControler transactionControler = new TransactionControlerImpl(unidadeDAO.getAliasDB());
try {
unidadeDAO.setTransactionControler(transactionControler);
contratosUnidadesDAO.setTransactionControler(transactionControler);
localidadeUnidadeDAO.setTransactionControler(transactionControler);
enderecoDAO.setTransactionControler(transactionControler);
transactionControler.start();
enderecoDTO.setLogradouro(unidade.getLogradouro());
enderecoDTO.setComplemento(unidade.getComplemento());
enderecoDTO.setNumero(unidade.getNumero());
enderecoDTO.setBairro(unidade.getBairro());
enderecoDTO.setCep(unidade.getCep());
enderecoDTO.setIdPais(unidade.getIdPais());
enderecoDTO.setIdUf(unidade.getIdUf());
enderecoDTO.setIdCidade(unidade.getIdCidade());
enderecoDTO.setLatitude(unidade.getLatitude());
enderecoDTO.setLongitude(unidade.getLongitude());
if (unidade.getIdEndereco() != null) {
enderecoDTO.setIdEndereco(unidade.getIdEndereco());
enderecoDAO.update(enderecoDTO);
} else {
enderecoDTO = (EnderecoDTO) enderecoDAO.create(enderecoDTO);
if (enderecoDTO.getIdEndereco() != null) {
unidade.setIdEndereco(enderecoDTO.getIdEndereco());
}
}
if (unidade.getAceitaEntregaProduto() == null) {
unidade.setAceitaEntregaProduto("N");
}
String UNIDADE_VINC_CONTRATOS = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.UNIDADE_VINC_CONTRATOS, "N");
if (UNIDADE_VINC_CONTRATOS == null) {
UNIDADE_VINC_CONTRATOS = "N";
}
if (UNIDADE_VINC_CONTRATOS.equalsIgnoreCase("S")) {
contratosUnidadesDAO.deleteByIdUnidade(unidade.getIdUnidade());
if (unidade.getIdContrato() != null) {
for (int i = 0; i < unidade.getIdContrato().length; i++) {
contratosUnidadesDTO.setIdUnidade(unidade.getIdUnidade());
contratosUnidadesDTO.setIdContrato(unidade.getIdContrato()[i]);
if (contratosUnidadesDTO.getIdContrato() != null) {
contratosUnidadesDAO.create(contratosUnidadesDTO);
}
}
}
}
// Obtendo o servi�o.
final LocalidadeUnidadeService localidadeUnidadeService = (LocalidadeUnidadeService) ServiceLocator.getInstance().getService(LocalidadeUnidadeService.class, null);
// Verificando se o servi�o existe.
if (localidadeUnidadeService != null) {
// Excluindo todas as associacoes entre a unidade e localidades.
localidadeUnidadeService.deleteByIdUnidade(unidade.getIdUnidade());
// Recuperando as localidades informadas pelo usu�rio.
if (unidade.getListaDeLocalidade() != null) {
// Percorrendo cada localidade informada.
for (final LocalidadeUnidadeDTO localidadeUnidadeDto : unidade.getListaDeLocalidade()) {
final LocalidadeUnidadeDTO localidade = new LocalidadeUnidadeDTO();
localidade.setIdUnidade(unidade.getIdUnidade());
localidade.setIdLocalidade(localidadeUnidadeDto.getIdLocalidade());
localidade.setDataInicio(UtilDatas.getDataAtual());
// Criando a associacao entre a unidade e a localidade no BD.
localidadeUnidadeDAO.create(localidade);
}
}
}
this.criarEAssociarServicoAUnidade(unidade);
transactionControler.commit();
transactionControler.close();
} catch (final Exception e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
super.update(unidade);
}
/**
* Associa servi�os a unidade em quest�o.
*
* @throws Exception
* @author rodrigo.oliveira
*/
private void criarEAssociarServicoAUnidade(final UnidadeDTO unidade) throws Exception {
final UnidadesAccServicosDTO unidadesAccServicosDTO = new UnidadesAccServicosDTO();
if (unidade.getServicos() != null && !unidade.getServicos().isEmpty()) {
for (int i = 0; i < unidade.getServicos().size(); i++) {
final Integer idServico = ((UnidadesAccServicosDTO) unidade.getServicos().get(i)).getIdServico();
if (!this.getUnidadesAccServicosDAO().existeAssociacaoComUnidade(idServico, unidade.getIdUnidade())) {
unidadesAccServicosDTO.setIdServico(idServico);
unidadesAccServicosDTO.setIdUnidade(unidade.getIdUnidade());
this.getUnidadesAccServicosDAO().create(unidadesAccServicosDTO);
}
}
}
}
@Override
public Collection findByIdUnidade() throws Exception {
try {
return this.getDao().findByIdUnidade();
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection findByIdEmpregado() throws Exception {
try {
return this.getDao().findByIdEmpregado();
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection listHierarquia() throws Exception {
final Collection colFinal = new ArrayList();
try {
final Collection col = this.getDao().findSemPai();
if (col != null) {
for (final Iterator it = col.iterator(); it.hasNext();) {
final UnidadeDTO unidadeDTO = (UnidadeDTO) it.next();
unidadeDTO.setNivel(0);
colFinal.add(unidadeDTO);
final Collection colAux = this.getCollectionHierarquia(unidadeDTO.getIdUnidade(), 0);
if (colAux != null && colAux.size() > 0) {
colFinal.addAll(colAux);
}
}
}
return colFinal;
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
public Collection getCollectionHierarquia(final Integer idUnidade, final Integer nivel) throws Exception {
final Collection col = this.getDao().findByIdPai(idUnidade);
final Collection colFinal = new ArrayList();
if (col != null) {
for (final Iterator it = col.iterator(); it.hasNext();) {
final UnidadeDTO unidadeDTO = (UnidadeDTO) it.next();
unidadeDTO.setNivel(nivel + 1);
colFinal.add(unidadeDTO);
final Collection colAux = this.getCollectionHierarquia(unidadeDTO.getIdUnidade(), unidadeDTO.getNivel());
if (colAux != null && colAux.size() > 0) {
colFinal.addAll(colAux);
}
}
}
return colFinal;
}
@Override
public boolean jaExisteUnidadeComMesmoNome(final UnidadeDTO unidade) {
final String nome = unidade.getNome();
final Integer idunidade = unidade.getIdUnidade();
final List<Condition> condicoes = new ArrayList<>();
condicoes.add(new Condition("nome", "=", nome));
condicoes.add(new Condition("dataFim", "is", null));
condicoes.add(new Condition("idUnidade", "<>", idunidade == null ? 0 : idunidade.intValue()));
Collection retorno = null;
try {
retorno = this.getDao().findByCondition(condicoes, null);
} catch (final Exception e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
return retorno == null ? false : true;
}
@Override
public void deletarUnidade(final IDto model, final DocumentHTML document, final HttpServletRequest request) throws ServiceException, Exception {
final UnidadeDTO unidadeDTO = (UnidadeDTO) model;
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
final ContratosUnidadesDAO contratosUnidadesDAO = new ContratosUnidadesDAO();
final EmpregadoDao empregadoDAO = new EmpregadoDao();
final UnidadeDao unidadeDAO = this.getDao();
final LocalidadeUnidadeDAO localidadeUnidadeDAO = new LocalidadeUnidadeDAO();
final SolicitacaoServicoDao solicitacaoDAO = new SolicitacaoServicoDao();
try {
empregadoDAO.setTransactionControler(tc);
unidadeDAO.setTransactionControler(tc);
contratosUnidadesDAO.setTransactionControler(tc);
localidadeUnidadeDAO.setTransactionControler(tc);
solicitacaoDAO.setTransactionControler(tc);
if (empregadoDAO.verificarSeUnidadePossuiEmpregado(unidadeDTO.getIdUnidade()) || unidadeDAO.verificarSeUnidadePossuiFilho(unidadeDTO.getIdUnidade())) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroNaoPodeSerExcluido"));
return;
}
if (solicitacaoDAO.verificarExistenciaDeUnidade(unidadeDTO.getIdUnidade())) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroNaoPodeSerExcluido"));
return;
}
tc.start();
unidadeDTO.setDataFim(UtilDatas.getDataAtual());
unidadeDAO.update(model);
contratosUnidadesDAO.deleteByIdUnidade(unidadeDTO.getIdUnidade());
if (unidadeDTO.getListaDeLocalidade() != null) {
for (final LocalidadeUnidadeDTO localidadeUnidadeDto : unidadeDTO.getListaDeLocalidade()) {
localidadeUnidadeDAO.updateDataFim(localidadeUnidadeDto);
}
}
document.alert(UtilI18N.internacionaliza(request, "MSG07"));
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
}
@Override
public void restaurarGridServicos(final DocumentHTML document, final Collection<UnidadesAccServicosDTO> servicos) {
if (servicos != null && !servicos.isEmpty()) {
int count = 0;
document.executeScript("countServico = 0");
for (final UnidadesAccServicosDTO servicosBean : servicos) {
count++;
document.executeScript("restoreRow()");
document.executeScript("seqSelecionada = " + count);
String nomeServico = servicosBean.getNomeServico() != null ? servicosBean.getNomeServico() : "";
String descricaoServico = servicosBean.getDetalheServico() != null ? servicosBean.getDetalheServico() : "";
if (nomeServico != null) {
nomeServico = nomeServico.replaceAll("'", "");
}
if (descricaoServico != null) {
descricaoServico = descricaoServico.replaceAll("'", "");
}
document.executeScript("setRestoreServico('" + servicosBean.getIdServico() + "'," + "'" + br.com.citframework.util.WebUtil.codificaEnter(nomeServico) + "'," + "'"
+ br.com.citframework.util.WebUtil.codificaEnter(descricaoServico) + "')");
}
document.executeScript("exibeGrid()");
} else {
document.executeScript("ocultaGrid()");
}
}
@Override
public Collection findById(final Integer idUnidade) throws Exception {
try {
return this.getDao().findById(idUnidade);
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection listHierarquiaMultiContratos(final Integer idContrato) throws Exception {
final Collection colFinal = new ArrayList();
try {
final Collection col = this.getDao().findSemPaiMultContrato(idContrato);
if (col != null) {
for (final Iterator it = col.iterator(); it.hasNext();) {
final UnidadeDTO unidadeDTO = (UnidadeDTO) it.next();
unidadeDTO.setNivel(0);
colFinal.add(unidadeDTO);
final Collection colAux = this.getCollectionHierarquia(unidadeDTO.getIdUnidade(), 0);
if (colAux != null && colAux.size() > 0) {
colFinal.addAll(colAux);
}
}
}
return colFinal;
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection listarAtivasPorContrato(final Integer idContrato) {
try {
return this.getDao().listarAtivasPorContrato(idContrato);
} catch (final Exception e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
return new ArrayList<UnidadeDTO>();
}
@Override
public Collection<UnidadeDTO> listUnidadePorContrato(final Integer idcontrato) throws Exception {
try {
return this.getDao().listUnidadePorContrato(idcontrato);
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection findByNomeEcontrato(final String nome, final Integer idContrato, final Integer limite) throws Exception {
try {
final Collection<UnidadeDTO> arvore = this.getDao().findByNomeEcontrato(nome, idContrato, limite);
/**
* Seleciona as filhas da existente, montando uma �rvore
*/
if (idContrato != null && idContrato != 0 && idContrato != -1) {
for (int i = 0; i < arvore.size(); i++) {
final Object aux = arvore.toArray()[i];
arvore.addAll(this.getDao().findByIdPai(((UnidadeDTO) aux).getIdUnidade()));
}
}
return arvore;
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public Collection findByIdEcontrato(final Integer idUnidade, final Integer idContrato) throws Exception {
try {
return this.getDao().findByIdEcontrato(idUnidade, idContrato);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public List<UnidadeDTO> recuperaHierarquiaUnidade(final UnidadeDTO unidadeDTO) throws Exception {
try {
return this.getDao().recuperaHierarquiaUnidade(unidadeDTO);
} catch (final Exception e) {
LOGGER.log(Level.SEVERE, e.getMessage(), e);
throw new ServiceException(e);
}
}
@Override
public String retornaNomeUnidadeByID(final Integer id) throws Exception {
return this.getDao().retornaNomeUnidadeByID(id);
}
@Override
public void updateCoordenadas(final String locale, final UnidadeDTO unidade) throws Exception {
final Double latitude = unidade.getLatitude();
final Double longitude = unidade.getLongitude();
if (latitude == null || longitude == null) {
throw new ServiceException(this.i18nMessage(locale, "rest.service.mobile.v2.null.coordinates"));
}
if (!GeoUtils.validCoordinates(latitude, longitude)) {
throw new ServiceException(this.i18nMessage(locale, "rest.service.mobile.v2.invalid.coordinates"));
}
final Integer idUnidade = unidade.getIdUnidade();
if (idUnidade == null) {
throw new ServiceException(this.i18nMessage(locale, "rest.service.mobile.v2.unit.id.null"));
}
final UnidadeDTO toFind = new UnidadeDTO();
toFind.setIdUnidade(idUnidade);
TransactionControler tc = null;
try {
final UnidadeDTO toUpdate = (UnidadeDTO) this.getDao().restore(toFind);
if (toUpdate == null) {
throw new ServiceException(this.i18nMessage(locale, "rest.service.mobile.v2.unit.notfound", idUnidade));
}
final UnidadeDao unidadeDAO = this.getDao();
final EnderecoDao enderecoDAO = this.getEnderecoDAO();
tc = new TransactionControlerImpl(unidadeDAO.getAliasDB());
unidadeDAO.setTransactionControler(tc);
enderecoDAO.setTransactionControler(tc);
tc.start();
final EnderecoDTO endereco = new EnderecoDTO();
final Integer idEndereco = toUpdate.getIdEndereco();
if (idEndereco != null && idEndereco > 0) {
endereco.setIdEndereco(idEndereco);
final EnderecoDTO addressToUpdate = (EnderecoDTO) enderecoDAO.restore(endereco);
addressToUpdate.setLatitude(latitude);
addressToUpdate.setLongitude(longitude);
enderecoDAO.update(addressToUpdate);
} else {
endereco.setLatitude(latitude);
endereco.setLongitude(longitude);
final EnderecoDTO saved = (EnderecoDTO) enderecoDAO.create(endereco);
toUpdate.setIdEndereco(saved.getIdEndereco());
unidadeDAO.update(toUpdate);
}
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
}
}
@Override
public Arvore obtemArvoreUnidades(final String nome, final Integer idContrato, final Integer idUnidadeColaborador, final String tipoHierarquia, final Integer limite)
throws ServiceException, Exception {
Collection<UnidadeDTO> listaResultado;
final Arvore arvore = new Arvore();
List<UnidadeDTO> hierarquiaUnidade;
final UnidadeService unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null);
if (tipoHierarquia.equals("3")) { // Hierarquia que monta apenas a �rvore da unidade e os n�s que est�o superiores a ela
// Obter a unidade diretamente, assim, ganhamos em performance
if (idContrato == null || idContrato == 0 || idContrato == -1) {
final UnidadeDTO aux = (UnidadeDTO) this.getDao().findById(idUnidadeColaborador).toArray()[0];
listaResultado = unidadeService.recuperaHierarquiaUnidade(aux);
} else {
listaResultado = null;
final UnidadeDTO unidadeColaborador = (UnidadeDTO) this.getDao().findById(idUnidadeColaborador).toArray()[0];
// Pegar pai raiz
UnidadeDTO paiRaiz = this.getPaiRaiz(idUnidadeColaborador);
// Checar se pai esta no contrato
if (paiRaiz != null) {
paiRaiz = this.getDao().checkIsInContrato(paiRaiz.getIdUnidade(), idContrato);
}
// retornarHirearquia de unidade
if (paiRaiz != null) {
listaResultado = unidadeService.recuperaHierarquiaUnidade(unidadeColaborador);
}
}
if (listaResultado != null) {
for (final UnidadeDTO unidadeh : listaResultado) {
arvore.adicionaNo(unidadeh.getIdUnidade(), unidadeh.getNome(), unidadeh.getIdUnidadePai());
}
}
} else {
// Implementa a pesquisa autoComplete ou n�o filtra por nome se ele n�o for informado
listaResultado = unidadeService.findByNomeEcontrato(nome, idContrato, limite);
}
// Alimentando a �rvore apartir da pesquisa
if (listaResultado != null) {
for (final UnidadeDTO unidadeDTO : listaResultado) {
if (unidadeDTO.getIdUnidade() != null) {
hierarquiaUnidade = unidadeService.recuperaHierarquiaUnidade(unidadeDTO); // � importante que a ordena��o dos n�s desta lista seja mantida seguindo a orienta��o
// de n�s pai para os n�s filhos
for (final UnidadeDTO unidadeh : hierarquiaUnidade) {
arvore.adicionaNo(unidadeh.getIdUnidade(), unidadeh.getNome(), unidadeh.getIdUnidadePai());
}
}
}
}
switch (tipoHierarquia) {
case "1":
arvore.geraListaSemRestricao();
break;
case "2":
arvore.geraListaUnidadeEsuasFilhas(idUnidadeColaborador);
break;
case "3":
arvore.geraListaSemRestricao(); // N�o usei o m�todo geraListaUnidadeEsuperiores porque a SQL j� foi restringida logo acima.
break;
default:
arvore.geraListaSemRestricao();
}
return arvore;
}
public UnidadeDTO getPaiRaiz(final Integer idUnidade) throws ServiceException, Exception {
UnidadeDTO aux = (UnidadeDTO) this.getDao().findById(idUnidade).toArray()[0];
while (aux.getIdUnidadePai() != null) {
aux = this.getDao().retornaUnidadePai(aux);
}
return aux;
}
}