package br.com.centralit.citsmart.rest.v2.operation; import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.bind.JAXBException; import br.com.centralit.citcorpore.bean.AssociacaoDeviceAtendenteDTO; import br.com.centralit.citcorpore.bean.CategoriaSolucaoDTO; import br.com.centralit.citcorpore.bean.ContratoDTO; import br.com.centralit.citcorpore.bean.JustificativaSolicitacaoDTO; import br.com.centralit.citcorpore.bean.MotivoNegacaoCheckinDTO; import br.com.centralit.citcorpore.bean.UnidadeDTO; import br.com.centralit.citcorpore.negocio.AssociacaoDeviceAtendenteService; import br.com.centralit.citcorpore.negocio.CategoriaSolucaoService; import br.com.centralit.citcorpore.negocio.ContratoService; import br.com.centralit.citcorpore.negocio.JustificativaSolicitacaoService; import br.com.centralit.citcorpore.negocio.MotivoNegacaoCheckinService; import br.com.centralit.citcorpore.negocio.UnidadeService; import br.com.centralit.citcorpore.util.Enumerados.SituacaoSolicitacaoServico; import br.com.centralit.citsmart.rest.bean.RestOperationDTO; import br.com.centralit.citsmart.rest.bean.RestSessionDTO; import br.com.centralit.citsmart.rest.operation.IRestOperation; import br.com.centralit.citsmart.rest.schema.CtMessage; import br.com.centralit.citsmart.rest.schema.CtMessageResp; import br.com.centralit.citsmart.rest.util.RestOperationUtil; import br.com.centralit.citsmart.rest.util.RestUtil; import br.com.centralit.citsmart.rest.v2.schema.CTCommonContent; import br.com.centralit.citsmart.rest.v2.schema.CTCommonContentWithParent; import br.com.centralit.citsmart.rest.v2.schema.CTServiceCoordinate; import br.com.centralit.citsmart.rest.v2.schema.CTServiceCoordinateResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceDeviceDissassociate; import br.com.centralit.citsmart.rest.v2.schema.CTServiceDeviceDissassociateResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListContractsResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListDeniedReasonsResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListStatusResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListStatusSolutionsResp; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListStatusSuspensionReasons; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListUnits; import br.com.centralit.citsmart.rest.v2.schema.CTServiceListUnitsResp; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; /** * Implementa��o das opera��os que respondem em {@code /service} da vers�o V2 de apis consumidas pelo mobile * * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 29/09/2014 * */ public class RESTOperation implements IRestOperation<CtMessage, CtMessageResp> { private static final Logger LOGGER = Logger.getLogger(RESTOperation.class.getName()); @Override public CtMessageResp execute(final RestSessionDTO restSessionDto, final RestOperationDTO restOperationDto, final CtMessage message) throws JAXBException { return RestUtil.execute(this, restSessionDto, restOperationDto, message); } protected CTServiceCoordinateResp coordinates(final RestSessionDTO restSessionDto, final CTServiceCoordinate message) { final CTServiceCoordinateResp resp = new CTServiceCoordinateResp(); try { final UnidadeDTO unidade = new UnidadeDTO(); unidade.setIdUnidade(message.getUnitID()); unidade.setLatitude(message.getLatitude()); unidade.setLongitude(message.getLongitude()); this.getUnidadeService().updateCoordenadas(restSessionDto.getUser().getLocale(), unidade); resp.setSuccess(true); } catch (final Exception e) { resp.setSuccess(false); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } protected CTServiceDeviceDissassociateResp deviceDisassociate(final RestSessionDTO restSession, final CTServiceDeviceDissassociate message) { final CTServiceDeviceDissassociateResp resp = new CTServiceDeviceDissassociateResp(); try { final AssociacaoDeviceAtendenteDTO associacao = new AssociacaoDeviceAtendenteDTO(); associacao.setConnection(message.getConnection()); associacao.setToken(message.getToken()); associacao.setIdUsuario(restSession.getUserId()); associacao.setActive(1); this.getAssociacaoDeviceAtendenteService().disassociateDeviceFromAttendant(associacao, restSession.getUser()); resp.setSuccess(true); } catch (final Exception e) { resp.setSuccess(false); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } protected CTServiceListContractsResp listContracts(final RestSessionDTO restSessionDto) { final CTServiceListContractsResp resp = new CTServiceListContractsResp(); try { final Collection<ContratoDTO> contratos = this.getContratoService().findAtivosByIdEmpregado(restSessionDto.getUser().getIdEmpregado()); if (contratos != null) { for (final ContratoDTO contratoDTO : contratos) { final CTCommonContent commonMessage = new CTCommonContent(); commonMessage.setId(contratoDTO.getIdContrato()); commonMessage.setDescription(contratoDTO.getNumero()); resp.getContracts().add(commonMessage); } } } catch (final Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } protected CTServiceListDeniedReasonsResp listDeniedReasons() { final CTServiceListDeniedReasonsResp resp = new CTServiceListDeniedReasonsResp(); try { final Collection<MotivoNegacaoCheckinDTO> reasons = this.getMotivoNegacaoCheckinService().listAllActiveDeniedReasons(); if (reasons != null) { for (final MotivoNegacaoCheckinDTO categoria : reasons) { final CTCommonContent commonContent = new CTCommonContent(); commonContent.setId(categoria.getIdMotivo()); commonContent.setDescription(categoria.getDescricao()); resp.getReasons().add(commonContent); } } } catch (final Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } protected CTServiceListStatusResp listSolicitationStatus() { final CTServiceListStatusResp resp = new CTServiceListStatusResp(); try { final List<SituacaoSolicitacaoServico> situacoes = SituacaoSolicitacaoServico.getSituacoesSolicitacaoServicoToMobile(); for (final SituacaoSolicitacaoServico situacao : situacoes) { switch (situacao) { case Resolvida: final CTServiceListStatusSolutionsResp solutions = new CTServiceListStatusSolutionsResp(); solutions.setId(situacao.getId()); solutions.setDescription(situacao.getDescricao()); this.encloseSolutions(solutions); resp.getStatus().add(solutions); break; case Suspensa: final CTServiceListStatusSuspensionReasons reasons = new CTServiceListStatusSuspensionReasons(); reasons.setId(situacao.getId()); reasons.setDescription(situacao.getDescricao()); this.encloseSuspensionReasons(reasons); resp.getStatus().add(reasons); break; default: final CTCommonContent common = new CTCommonContent(); common.setId(situacao.getId()); common.setDescription(situacao.getDescricao()); resp.getStatus().add(common); break; } } } catch (final Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } protected void encloseSolutions(final CTServiceListStatusSolutionsResp common) throws Exception { final Collection<CategoriaSolucaoDTO> categorias = this.getCategoriaSolucaoService().listaCategoriasSolucaoAtivas(); if (categorias != null) { for (final CategoriaSolucaoDTO categoria : categorias) { final CTCommonContentWithParent commonContent = new CTCommonContentWithParent(); commonContent.setId(categoria.getIdCategoriaSolucao()); commonContent.setDescription(categoria.getDescricaoCategoriaSolucao()); final Integer parentId = categoria.getIdCategoriaSolucaoPai(); if (parentId != null && parentId > 0) { commonContent.setParentId(parentId); } common.getJustifications().add(commonContent); } } } protected void encloseSuspensionReasons(final CTServiceListStatusSuspensionReasons common) throws Exception { final Collection<JustificativaSolicitacaoDTO> motivos = this.getJustificativaSolicitacaoService().listAtivasParaSuspensao(); if (motivos != null) { for (final JustificativaSolicitacaoDTO motivo : motivos) { final CTCommonContent commonContent = new CTCommonContent(); commonContent.setId(motivo.getIdJustificativa()); commonContent.setDescription(motivo.getDescricaoJustificativa()); common.getJustifications().add(commonContent); } } } protected CTServiceListUnitsResp listUnits(final RestSessionDTO restSessionDTO, final CTServiceListUnits message) { final CTServiceListUnitsResp resp = new CTServiceListUnitsResp(); try { final Collection<UnidadeDTO> unidades = this.getUnidadeService().listUnidadePorContrato(message.getContractID()); if (unidades != null) { for (final UnidadeDTO unidade : unidades) { final CTCommonContent commonMessage = new CTCommonContent(); commonMessage.setId(unidade.getIdUnidade()); commonMessage.setDescription(unidade.getNome()); resp.getUnits().add(commonMessage); } } } catch (final Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); resp.setError(RestOperationUtil.buildSimpleError(e)); } return resp; } private AssociacaoDeviceAtendenteService associacaoDeviceAtendenteService; private CategoriaSolucaoService categoriaSolucaoService; private ContratoService contratoService; private JustificativaSolicitacaoService justificativaSolicitacaoService; private MotivoNegacaoCheckinService motivoNegacaoCheckinService; private UnidadeService unidadeService; private AssociacaoDeviceAtendenteService getAssociacaoDeviceAtendenteService() { if (associacaoDeviceAtendenteService == null) { try { associacaoDeviceAtendenteService = (AssociacaoDeviceAtendenteService) ServiceLocator.getInstance().getService(AssociacaoDeviceAtendenteService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return associacaoDeviceAtendenteService; } private CategoriaSolucaoService getCategoriaSolucaoService() { if (categoriaSolucaoService == null) { try { categoriaSolucaoService = (CategoriaSolucaoService) ServiceLocator.getInstance().getService(CategoriaSolucaoService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return categoriaSolucaoService; } private ContratoService getContratoService() { if (contratoService == null) { try { contratoService = (ContratoService) ServiceLocator.getInstance().getService(ContratoService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return contratoService; } private JustificativaSolicitacaoService getJustificativaSolicitacaoService() { if (justificativaSolicitacaoService == null) { try { justificativaSolicitacaoService = (JustificativaSolicitacaoService) ServiceLocator.getInstance().getService(JustificativaSolicitacaoService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return justificativaSolicitacaoService; } private MotivoNegacaoCheckinService getMotivoNegacaoCheckinService() { if (motivoNegacaoCheckinService == null) { try { motivoNegacaoCheckinService = (MotivoNegacaoCheckinService) ServiceLocator.getInstance().getService(MotivoNegacaoCheckinService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return motivoNegacaoCheckinService; } private UnidadeService getUnidadeService() { if (unidadeService == null) { try { unidadeService = (UnidadeService) ServiceLocator.getInstance().getService(UnidadeService.class, null); } catch (final ServiceException e) { RestUtil.handleServiceException(LOGGER, e); } } return unidadeService; } }