com.dominion.salud.mpr.negocio.service.equivalencias.impl.IndicacionesExtServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.dominion.salud.mpr.negocio.service.equivalencias.impl.IndicacionesExtServiceImpl.java

Source

/*
 * Copyright (C) 2016 Dominion Global
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.dominion.salud.mpr.negocio.service.equivalencias.impl;

import com.dominion.salud.mpr.negocio.entities.admin.Centros;
import com.dominion.salud.mpr.negocio.entities.equivalencias.IndicacionesExt;
import com.dominion.salud.mpr.negocio.entities.maestros.Indicaciones;
import com.dominion.salud.mpr.negocio.repositories.equivalencias.IndicacionesExtRepository;
import com.dominion.salud.mpr.negocio.service.equivalencias.IndicacionesExtService;
import com.dominion.salud.mpr.negocio.service.exception.NoExisteEquivalenciaException;
import java.util.List;
import javax.persistence.NoResultException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 * @author jcgonzalez
 */
@Service("indicacionesExtService")
public class IndicacionesExtServiceImpl extends AbstractEquivalenciasServiceImpl<IndicacionesExt, Long>
        implements IndicacionesExtService {

    private static final Logger logger = LoggerFactory.getLogger(IndicacionesExtServiceImpl.class);

    @Autowired
    private IndicacionesExtRepository indicacionesExtRepository;

    /**
     * Busca los registros de <b>indicaciones_ext</b> para un centro concreto
     *
     * @param centros el centro para filtrar los registros
     * @return listado de IndicacionesExt para el centro indicado
     */
    @Override
    public List<IndicacionesExt> findAllByIdCentro(Centros centros) {
        return indicacionesExtRepository.findAllByIdCentro(centros);
    }

    /**
     * Busca los registros de <b>indicaciones_ext</b> para un centro concreto sin
     * equivalencia asociada
     *
     * @param centros el centro para filtrar los registros
     * @return listado de IndicacionesExt para el centro indicado sin equivalencia
     * asociada
     */
    @Override
    public List<IndicacionesExt> selectAllByIdCentroSinEquivalencia(Centros centros) {
        return indicacionesExtRepository.selectAllByIdCentroSinEquivalencia(centros);
    }

    /**
     * Busca la lista de equivalencias para un centro a partir de un codigo de plataforma.
     *
     * @param centros del que se quiere obtener la equivalencia
     * @param indicaciones del que se quiere obtener la equivalencia
     * @return la lista de equivalencias obtenidas
     * @throws com.dominion.salud.mpr.negocio.service.exception.NoExisteEquivalenciaException si no encuentra alguna
     * equivalencia con los datos indicados
     */
    @Override
    public List<IndicacionesExt> findEquivalencia(Centros centros, Indicaciones indicaciones)
            throws NoExisteEquivalenciaException {
        try {
            logger.debug("          Buscando equivalencia para el CENTRO: " + centros.toString()
                    + " y la INDICACION:" + indicaciones.toString());
            List<IndicacionesExt> indicacionesExts = indicacionesExtRepository.findEquivalencia(centros,
                    indicaciones);
            if (indicacionesExts != null && !indicacionesExts.isEmpty()) {
                return indicacionesExts;
            } else {
                throw new NoExisteEquivalenciaException("No se ha encontrado equivalencia para el CENTRO: "
                        + centros.toString() + " y la INDICACION:" + indicaciones.toString());
            }
        } catch (NoResultException nre) {
            throw new NoExisteEquivalenciaException("No se ha encontrado equivalencia para el CENTRO: "
                    + centros.toString() + " y la INDICACION:" + indicaciones.toString());
        }
    }

    /**
     * Traduce un codigo de centro a un codigo de plataforma.
     *
     * @param indicacionesExt para traducir
     * @return el valor de la plataforma encontrado
     * @throws com.dominion.salud.mpr.negocio.service.exception.NoExisteEquivalenciaException si no se puede
     * traducir la equivalencia
     */
    @Override
    public IndicacionesExt traducirEquivalencia(IndicacionesExt indicacionesExt)
            throws NoExisteEquivalenciaException {
        try {
            if (StringUtils.isNotBlank(indicacionesExt.getCodIndicacionExt())) {
                logger.debug("          Traduciendo equivalencia de INDICACION: " + indicacionesExt.toString());
                indicacionesExt = indicacionesExtRepository.traducirEquivalencia(indicacionesExt);
                if (indicacionesExt.getIndicaciones() != null) {
                    return indicacionesExt;
                }
            }
            throw new NoExisteEquivalenciaException(
                    "No se ha podido traducir INDICACION: " + indicacionesExt.toString());
        } catch (NoResultException nre) {
            throw new NoExisteEquivalenciaException(
                    "No se ha podido traducir INDICACION: " + indicacionesExt.toString() + ": " + nre.toString());
        }
    }

    /**
     * Busca una equivalencia concreta. Si no existe, la inserta.
     *
     * @param indicacionesExt con el codigo, descripcion y centro para buscar
     * @return el contenedor de la equivalencia encontrada o insertada
     * @throws com.dominion.salud.mpr.negocio.service.exception.NoExisteEquivalenciaException si no se puede
     * traducir la equivalencia
     */
    @Override
    public IndicacionesExt traducirEquivalenciaAndInsert(IndicacionesExt indicacionesExt)
            throws NoExisteEquivalenciaException {
        try {
            return traducirEquivalencia(indicacionesExt);
        } catch (NoExisteEquivalenciaException neee) {
            try {
                indicacionesExtRepository.traducirEquivalencia(indicacionesExt);
            } catch (NoResultException nre) {
                if (StringUtils.isNotBlank(indicacionesExt.getCodIndicacionExt())
                        && StringUtils.isNotBlank(indicacionesExt.getTxtIndicacionExt())) {
                    logger.debug("          No se ha podido traducir, insertando equivalencia de INDICACION: "
                            + indicacionesExt.toString());
                    save(indicacionesExt);
                }
            }
            throw neee;
        }
    }
}