Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

/**
 *
 */

package nfe.util;

import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
import br.com.swconsultoria.nfe.dom.enuns.AmbienteEnum;
import br.com.swconsultoria.nfe.dom.enuns.DocumentoEnum;
import br.com.swconsultoria.nfe.dom.enuns.EstadosEnum;
import br.com.swconsultoria.nfe.dom.enuns.ServicosEnum;
import br.com.swconsultoria.nfe.exception.NfeException;
import lombok.extern.java.Log;
import org.ini4j.Wini;

import java.io.*;
import java.util.logging.Logger;

/**
 * @author Samuel Oliveira
 *
 * Classe responsávelem montar as URL's de consulta de serviços do SEFAZ.
 */

@Log
public class WebServiceUtil {

    private final static Logger logger = Logger.getLogger(WebServiceUtil.class.getName());

    /**
     * Retorna a URL para consulta de operações do SEFAZ.<br>
     *
     * <p>
     * O método carrega o arquivo <b>WebServicesNfe.ini</b> que contêm as
     * URL's de operações do SEFAZ, busca pela seção no arquivo .ini que
     * corresponda com os argumentos <b>tipo</b>, <b>config</b>, <b>servico</b>
     * e retorna essa URL.
     * </p>
     *
     * @param config interface que contêm os dados necessários para a comunicação.
     * @param tipoDocumento DocumentoEnum.NFE e ConstantesUtil.NFCE
     * @param tipoServico é a operação que se deseja fazer.<br>
     * Ex.: para consultas status deserviço no ambiente de produção
     * use ServicosEnum.NfeStatusServico_4.00
     *
     * @return url String que representa a URL do serviço.
     * @throws NfeException
     *
     * @see ConfiguracoesNfe
     * @see ConstantesUtil
     **/

    public static String getUrl(ConfiguracoesNfe config, DocumentoEnum tipoDocumento, ServicosEnum tipoServico) throws NfeException {

        try {

            String secao = tipoDocumento.getTipo() + "_" + config.getEstado() + "_"
                    + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");

            InputStream is;
            if (ObjetoUtil.verifica(config.getArquivoWebService()).isPresent()) {
                File arquivo = new File(config.getArquivoWebService());
                if (!arquivo.exists())
                    throw new FileNotFoundException("Arquivo WebService" + config.getArquivoWebService() + " não encontrado");
                is = new FileInputStream(arquivo);
                logger.info("[ARQUIVO INI CUSTOMIZADO]: " + config.getArquivoWebService());
            } else {
                is = WebServiceUtil.class.getResourceAsStream("/WebServicesNfe.ini");
            }

            Wini ini = new Wini();
            ini.getConfig().setLowerCaseOption(true);
            ini.load(is);
            is.close();
            String url = ini.get(secao, "usar");

            //URLS CONSULTA CADASTO
            if (tipoServico.equals(ServicosEnum.CONSULTA_CADASTRO) && (
                    config.getEstado().equals(EstadosEnum.PA) ||
                            config.getEstado().equals(EstadosEnum.AM) ||
                            config.getEstado().equals(EstadosEnum.AL) ||
                            config.getEstado().equals(EstadosEnum.AP) ||
                            config.getEstado().equals(EstadosEnum.DF) ||
                            config.getEstado().equals(EstadosEnum.PI) ||
                            config.getEstado().equals(EstadosEnum.RJ) ||
                            config.getEstado().equals(EstadosEnum.RO) ||
                            config.getEstado().equals(EstadosEnum.SE) ||
                            config.getEstado().equals(EstadosEnum.TO))) {
                throw new NfeException("Estado não possui Consulta Cadastro.");
                // URLS de ambiente nacional
            } else if (tipoServico.equals(ServicosEnum.DISTRIBUICAO_DFE)
                    || tipoServico.equals(ServicosEnum.MANIFESTACAO)
                    || tipoServico.equals(ServicosEnum.EPEC)) {
                secao = config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "NFe_AN_H" : "NFe_AN_P";

            } else if (!tipoServico.equals(ServicosEnum.URL_CONSULTANFCE)
                    && !tipoServico.equals(ServicosEnum.URL_QRCODE) && ObjetoUtil.verifica(url).isPresent()) {
                secao = url;
            } else if (config.isContigenciaSVC()) {
                // SVC-RS
                if (config.getEstado().equals(EstadosEnum.GO) || config.getEstado().equals(EstadosEnum.AM)
                        || config.getEstado().equals(EstadosEnum.BA) || config.getEstado().equals(EstadosEnum.CE)
                        || config.getEstado().equals(EstadosEnum.MA) || config.getEstado().equals(EstadosEnum.MS)
                        || config.getEstado().equals(EstadosEnum.MT) || config.getEstado().equals(EstadosEnum.PA)
                        || config.getEstado().equals(EstadosEnum.PE) || config.getEstado().equals(EstadosEnum.PI)
                        || config.getEstado().equals(EstadosEnum.PR)) {
                    secao = tipoDocumento.getTipo() + "_SVRS_"
                            + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");
                    // SVC-AN
                } else {
                    secao = tipoDocumento.getTipo() + "_SVC-AN_"
                            + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");
                }
            }

            url = ini.get(secao, tipoServico.getServico().toLowerCase());

            ObjetoUtil.verifica(url).orElseThrow(() -> new NfeException(
                    "WebService de " + tipoServico + " não encontrado para " + config.getEstado().getNome()));

            logger.info("[URL]: " + tipoServico + ": " + url);

            return url;

        } catch (IOException e) {
            throw new NfeException(e.getMessage(),e);
        }

    }
}