/// <summary>
        ///  Método: ObtenerUnDiccionario
        ///  Desarrollador: Johans Cuéllar
        ///  Creado: 14/05/2015
        ///  Descripción: Método que busca los diccionarios en el xml repositario.
        /// </summary>
        /// <param name="idDiccionario">Recibe el id del diccionario a buscar de tipo Guid</param>
        /// <returns>Un diccionario de tipo EntidadDom.Diccionario.Diccionario</returns>
        public Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario ObtenerUnDiccionario(Guid idDiccionario)
        {
            EntidadDom.Diccionario.Diccionario diccionarioDom = null;

            EntidadRepo.Diccionarios diccionarioRep = XmlDeSerializador();


            foreach (var diccionario in diccionarioRep.ListaDiccionarios)
            {
                if (diccionario.Id == new Guid(idDiccionario.ToString()))
                {
                    diccionarioDom = MapearRepositorioConDiccionario(diccionario);
                }
            }

            return(diccionarioDom);
        }
        // Johans
        public void ProbarCrearListadeDiccionariosExistentesEnElXMLRepositorioRetornaListaDiccionarios()
        {
            try
            {
                DiccionarioRepositorioXmlImpl repositorio = new DiccionarioRepositorioXmlImpl(Directory);

                var listaDiccionarios = new List <Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario>();


                Babel.Nucleo.Dominio.Entidades.Etiquetas.Etiqueta EtqDom = Babel.Nucleo.Dominio.Entidades.Etiquetas.Etiqueta.CrearNuevaEtiqueta("app.test");

                Babel.Nucleo.Dominio.Entidades.Etiquetas.Traduccion traduccionDom2 = Babel.Nucleo.Dominio.Entidades.Etiquetas.Traduccion.CrearNuevaTraduccion(Babel.Nucleo.Dominio.Entidades.Etiquetas.Cultura.CrearNuevaCultura("en-US"), "accept", "accept");

                EtqDom.AgregarTraduccion(traduccionDom2);

                Babel.Nucleo.Dominio.Entidades.Etiquetas.Etiqueta EtqDom2 = Babel.Nucleo.Dominio.Entidades.Etiquetas.Etiqueta.CrearNuevaEtiqueta("app.test2");

                Babel.Nucleo.Dominio.Entidades.Etiquetas.Traduccion traduccionDom22 = Babel.Nucleo.Dominio.Entidades.Etiquetas.Traduccion.CrearNuevaTraduccion(Babel.Nucleo.Dominio.Entidades.Etiquetas.Cultura.CrearNuevaCultura("en-US"), "accept", "accept");

                EtqDom2.AgregarTraduccion(traduccionDom22);


                DiccionarioDominio = Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario.CrearNuevoDiccionario(Guid.NewGuid(), ambienteTestPrueba);

                DiccionarioDominio.AgregarEtiqueta(EtqDom);
                DiccionarioDominio.AgregarEtiqueta(EtqDom2);


                DiccionarioDominio2 = Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario.CrearNuevoDiccionario(Guid.NewGuid(), ambienteTestDesarrollo);

                DiccionarioDominio2.AgregarEtiqueta(EtqDom);
                DiccionarioDominio2.AgregarEtiqueta(EtqDom2);

                listaDiccionarios.Add(DiccionarioDominio);
                listaDiccionarios.Add(DiccionarioDominio2);


                repositorio.SalvarDiccionarios(listaDiccionarios).ShouldBeType <List <Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario> >();
            }
            catch (Exception ex) {
                ex.ShouldBeType <SystemException>();
            }
        }
        /// <summary>
        ///  Método: MapearDiccionarioConRepositorio
        ///  Desarrollador: Johans Cuéllar
        ///  Creado: 15/05/2015
        ///  Descripción: Método que mapea dinámicamente objetos dominio a objetos repositorio.
        /// </summary>
        /// <param name="diccionarioDom">Dicionario de tipo dominio</param>
        /// <returns>Diccionario mapeado de tipo repositorio</returns>
        private EntidadRepo.Diccionario MapearDiccionarioConRepositorio(Babel.Nucleo.Dominio.Entidades.Diccionario.Diccionario diccionarioDom)
        {
            var dicctionarioRepo = new EntidadRepo.Diccionario()
            {
                Id = diccionarioDom.Id, Ambiente = diccionarioDom.Ambiente
            };

            dicctionarioRepo.Etiquetas = new EntidadRepo.Etiquetas();

            foreach (var etiqueta in diccionarioDom.Etiquetas)
            {
                var EtiquetaMapper = new EntidadRepo.Etiqueta()
                {
                    Activo           = etiqueta.Activo,
                    Descripcion      = etiqueta.Descripcion,
                    Id               = etiqueta.Id,
                    IdiomaPorDefecto = etiqueta.IdiomaPorDefecto,
                    Nombre           = etiqueta.Nombre,
                    NombreEtiqueta   = etiqueta.Nombre,
                    Traducciones     = new EntidadRepo.Traducciones()
                };


                foreach (var texto in etiqueta.Textos)
                {
                    var TextoMapper = new EntidadRepo.Traduccion()
                    {
                        Cultura = texto.Cultura.CodigoIso.ToString(),
                        Tooltip = texto.ToolTip,
                        Value   = texto.Texto
                    };

                    EtiquetaMapper.Traducciones.Traducciones1.Add(TextoMapper);
                }

                dicctionarioRepo.Etiquetas.ListaEtiquetas.Add(EtiquetaMapper);
            }


            return(dicctionarioRepo);
        }
        /// <summary>
        ///  Método: MapearRepositorioConDiccionario
        ///  Desarrollador: Johans Cuéllar
        ///  Creado: 14/05/2015
        ///  Descripción: Método que mapea dinámicamente objetos repositorios a objetos dominio.
        /// </summary>
        /// <param name="diccionarioRepo">Diccionario de tipo repositorio</param>
        /// <returns>Un diccionario de tipo objetos de dominio</returns>
        private EntidadDom.Diccionario.Diccionario MapearRepositorioConDiccionario(EntidadRepo.Diccionario diccionarioRepo)
        {
            EntidadDom.Diccionario.Diccionario DiccionarioDominio = null;

            DiccionarioDominio = EntidadDom.Diccionario.Diccionario.CrearNuevoDiccionario(diccionarioRepo.Id, diccionarioRepo.Ambiente);


            for (int i = 00; i < diccionarioRepo.Etiquetas.ListaEtiquetas.Count(); i++)
            {
                DiccionarioDominio.AgregarEtiqueta(Mapper.Map <EntidadDom.Etiquetas.Etiqueta> (diccionarioRepo.Etiquetas.ListaEtiquetas [i]));

                for (int x = 0; x < diccionarioRepo.Etiquetas.ListaEtiquetas [i].Traducciones.Traducciones1.Count(); x++)
                {
                    var cultura    = EntidadDom.Etiquetas.Cultura.CrearNuevaCultura(diccionarioRepo.Etiquetas.ListaEtiquetas [i].Traducciones.Traducciones1 [x].Cultura);
                    var traduccion = Mapper.Map <EntidadDom.Etiquetas.Traduccion> (diccionarioRepo.Etiquetas.ListaEtiquetas [i].Traducciones.Traducciones1 [x]);
                    traduccion.Cultura = cultura;
                    DiccionarioDominio.Etiquetas [i].AgregarTraduccion(traduccion);
                }
            }


            return(DiccionarioDominio);
        }
        /// <summary>
        ///  Método: SalvarUnDiccionario
        ///  Desarrollador: Johans Cuéllar
        ///  Creado: 21/05/2015
        ///  Descripción: Método que salva un diccionario en el xml repositario.
        /// </summary>
        /// <param name="diccionario">Diccionario de tipo EntidadDom.Diccionario.Diccionario</param>
        /// <returns>Diccionario de tipo EntidadDom.Diccionario.Diccionario</returns>
        public EntidadDom.Diccionario.Diccionario SalvarUnDiccionario(EntidadDom.Diccionario.Diccionario diccionario)
        {
            var exist = false;

            EntidadDom.Diccionario.Diccionario dicDom = null;

            EntidadRepo.Diccionarios diccionarioRep = XmlDeSerializador();

            if (diccionario == null)
            {
                throw new Exception();
            }

            var test = diccionarioRep.ListaDiccionarios.Find(e => e.Ambiente == diccionario.Ambiente);

            if (diccionarioRep.ListaDiccionarios.Find(e => e.Ambiente == diccionario.Ambiente) != null)
            {
                throw new Exception();
            }


            foreach (EntidadRepo.Diccionario direp in diccionarioRep.ListaDiccionarios)
            {
                if (direp.Id == diccionario.Id)
                {
                    var dirRepoReplace = MapearDiccionarioConRepositorio(diccionario);

                    direp.Etiquetas.ListaEtiquetas.Clear();

                    foreach (var etiquetas in dirRepoReplace.Etiquetas.ListaEtiquetas)
                    {
                        direp.Etiquetas.ListaEtiquetas.Add(etiquetas);
                    }

                    exist = true;
                }
            }


            if (exist == false)
            {
                diccionarioRep.ListaDiccionarios.Add(MapearDiccionarioConRepositorio(diccionario));
            }


            XmlSerializador(diccionarioRep);

            EntidadRepo.Diccionarios diccionarioRepDom = XmlDeSerializador();

            foreach (EntidadRepo.Diccionario dirRep in diccionarioRepDom.ListaDiccionarios)
            {
                if (dirRep.Id == diccionario.Id)

                {
                    dicDom = MapearRepositorioConDiccionario(dirRep);
                    break;
                }
            }



            return(dicDom);
        }