private void MontaXMLParaProcessamentoDaRevistaAtravesDoTXT(string pastaDeArmazenamentoDasRevistas, IRevistaDeMarcas revistaDeMarcas)
        {
            Util.CrieDiretorio(pastaDeArmazenamentoDasRevistas);

            var caminhoArquivoTxt = Path.Combine(pastaDeArmazenamentoDasRevistas, revistaDeMarcas.NumeroRevistaMarcas +
                revistaDeMarcas.ExtensaoArquivo);

            using (var arquivo = new StreamReader(caminhoArquivoTxt))
            {
                TradutorDeRevistaTxtParaRevistaXml.TraduzaRevistaDeMarcas(DateTime.Now, revistaDeMarcas.NumeroRevistaMarcas.ToString(),
                arquivo, pastaDeArmazenamentoDasRevistas);
                arquivo.Close();
            }

            //Directory.Delete(caminhoArquivoTxt);
        }
        public XmlDocument ObtenhaXmlDaRevistaParaProcessamento(string pastaDeArmazenamentoDasRevistas, IRevistaDeMarcas revistaDeMarcas)
        {
            Util.CrieDiretorio(pastaDeArmazenamentoDasRevistas);

            // arquivo txt para xml
            if (revistaDeMarcas.ExtensaoArquivo.ToUpper().Equals(".TXT"))
            {
                MontaXMLParaProcessamentoDaRevistaAtravesDoTXT(pastaDeArmazenamentoDasRevistas, revistaDeMarcas);
                revistaDeMarcas.ExtensaoArquivo = ".xml";
            }

            var caminhoArquivo = Path.Combine(pastaDeArmazenamentoDasRevistas, revistaDeMarcas.NumeroRevistaMarcas + revistaDeMarcas.ExtensaoArquivo);
            var xmlRevista = new XmlDocument();

            xmlRevista.Load(caminhoArquivo);

            return xmlRevista;
        }
        private IList<IRevistaDeMarcas> LerRevistaXMLParaProcessosExistentes(IRevistaDeMarcas revistaDeMarcas, XmlDocument revistaXml, 
            bool ehLeitura)
        {
            var numeroRevista = string.Empty;
            var dataRevista = string.Empty;

            IList<IRevistaDeMarcas> listaDeProcessosDaRevistaDeMarcas = new List<IRevistaDeMarcas>();

            XmlNodeList dadosRevista = revistaXml.GetElementsByTagName("revista");

            for (int i = 0; i < dadosRevista.Count; i++)
            {
                numeroRevista = dadosRevista[i].Attributes.GetNamedItem("numero").Value;
                dataRevista = dadosRevista[i].Attributes.GetNamedItem("data").Value;
            }

            XmlNodeList xmlprocessos = revistaXml.GetElementsByTagName("processo");

            foreach (XmlNode processo in xmlprocessos)
            {
                var objetoRevista = FabricaGenerica.GetInstancia().CrieObjeto<IRevistaDeMarcas>();

                objetoRevista.NumeroProcessoDeMarca = Convert.ToInt64(processo.Attributes.GetNamedItem("numero").Value);

                if (processo.Attributes.GetNamedItem("data-deposito") != null)
                    objetoRevista.DataDeDeposito = Convert.ToDateTime(processo.Attributes.GetNamedItem("data-deposito").Value);

                if (processo.Attributes.GetNamedItem("data-concessao") != null)
                    objetoRevista.DataDeConcessao = Convert.ToDateTime(processo.Attributes.GetNamedItem("data-concessao").Value);

                var despachos = processo["despachos"];

                if (despachos != null)
                {
                    var despacho = despachos["despacho"];

                    if (despacho != null)
                    {
                        objetoRevista.CodigoDespacho = despacho.Attributes.GetNamedItem("codigo").Value;

                        var textoDoDespacho = despacho["texto-complementar"];
                        objetoRevista.TextoDoDespacho = textoDoDespacho != null ? textoDoDespacho.InnerText : null;
                    }
                }

                var apostila = processo["apostila"];
                objetoRevista.Apostila = apostila != null ? apostila.InnerText : null;

                objetoRevista.NumeroRevistaMarcas = Convert.ToInt32(numeroRevista);
                objetoRevista.DataPublicacao = Convert.ToDateTime(dataRevista);
                objetoRevista.DataProcessamento = DateTime.Now;
                objetoRevista.Processada = revistaDeMarcas.Processada;
                objetoRevista.ExtensaoArquivo = revistaDeMarcas.ExtensaoArquivo;
                listaDeProcessosDaRevistaDeMarcas.Add(objetoRevista);
            }

            IList<IRevistaDeMarcas> listaDeDadosDaRevistaASerSalvo = new List<IRevistaDeMarcas>();

            // Atualizar processos apos a leitura
            if (listaDeProcessosDaRevistaDeMarcas.Count > 0)
            {
                // verifica se o processo está cadastrado na base

                IList<long> listaDeNumerosDeProcessosCadastrados = new List<long>();

                using (var servico = FabricaGenerica.GetInstancia().CrieObjeto<IServicoDeProcessoDeMarca>())
                {
                    listaDeNumerosDeProcessosCadastrados = servico.ObtenhaTodosNumerosDeProcessosAtivosCadastrados();

                    foreach (var processoDaRevista in listaDeProcessosDaRevistaDeMarcas)
                    {
                        if (listaDeNumerosDeProcessosCadastrados.Contains(processoDaRevista.NumeroProcessoDeMarca))
                        {
                            var processoDeMarca = servico.ObtenhaProcessoDeMarcaPeloNumero(processoDaRevista.NumeroProcessoDeMarca);

                            processoDaRevista.IdRevistaMarcas = GeradorDeID.getInstancia().getProximoID();

                            if (!string.IsNullOrEmpty(processoDaRevista.CodigoDespacho))
                                if (processoDeMarca.Despacho != null && !processoDeMarca.Despacho.CodigoDespacho.Equals(processoDaRevista.CodigoDespacho))
                                    AtualizeDespachoNoProcesso(processoDaRevista.CodigoDespacho, processoDeMarca);

                            if (!string.IsNullOrEmpty(processoDaRevista.Apostila))
                                processoDeMarca.Apostila = processoDaRevista.Apostila;

                            if (processoDaRevista.DataDeDeposito != null)
                                processoDeMarca.DataDoDeposito = processoDaRevista.DataDeDeposito;

                            if (processoDaRevista.DataDeConcessao != null)
                                processoDeMarca.DataDeConcessao = processoDaRevista.DataDeConcessao;

                            if (!string.IsNullOrEmpty(processoDaRevista.TextoDoDespacho))
                                processoDeMarca.TextoComplementarDoDespacho = processoDaRevista.TextoDoDespacho;

                            listaDeDadosDaRevistaASerSalvo.Add(processoDaRevista);

                            if (!ehLeitura)
                            servico.AtualizeProcessoAposLeituraDaRevista(processoDeMarca);
                        }

                    }

                }
            }

            return listaDeDadosDaRevistaASerSalvo;
        }
        public IList<IRevistaDeMarcas> ObtenhaProcessosExistentesDeAcordoComARevistaXml(string pastaDeArmazenamentoDasRevistas, 
            IRevistaDeMarcas revistaDeMarcas, XmlDocument revistaXml, bool ehLeitura)
        {
            IList<IRevistaDeMarcas> listaDeProcessosExistentesNaRevista = new List<IRevistaDeMarcas>();

            // arquivo txt para xml
            if (revistaDeMarcas.ExtensaoArquivo.ToUpper().Equals(".TXT"))
                revistaDeMarcas.ExtensaoArquivo = ".xml";

            listaDeProcessosExistentesNaRevista = LerRevistaXMLParaProcessosExistentes(revistaDeMarcas, revistaXml, ehLeitura);
            return listaDeProcessosExistentesNaRevista;
        }