public void ObservarObjetoDatos()
        {
            IFabrica     fabrica = new FabricaNotificacion();
            IObjetoDatos od1     = Helper.Crear(HelperTipo.ObtenerTipo2(), fabrica);
            IObjetoDatos od2     = Helper.Crear(HelperTipo.ObtenerTipo2());

            Observable observable = ((ObjetoBase)od1).Observable();
            Observador observador = new Observador(od2);

            observable.Agregar(observador);

            Helper.Construir(od1, 2, 5);

            Evaluar.Comparar(od1, od2);

            od1.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[4]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[3]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[2]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[1]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[0]);

            od1.RemoverObjetoDatos("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem")[4]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem")[3]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem")[2]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem")[1]);
            od1.RemoverObjetoDatos("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem", od1.ObtenerColeccion("ReferenciaObjetoDatos/ReferenciaObjetoDatosItem")[0]);

            Evaluar.Comparar(od1, od2);

            od1.EstablecerObjetoDatos("ReferenciaObjetoDatos", null);
            od1.EstablecerObjetoDatos("ReferenciaObjetoDatos2", null);

            Evaluar.Comparar(od1, od2);
        }
예제 #2
0
        public void EvaluarObjetoDatosComplejoRemoverUnItem()
        {
            IObjetoDatos od = Helper.Crear(_tipox);

            Helper.Construir(od, 1, 3);
            od.RemoverObjetoDatos("ReferenciaObjetoDatosItem", od.ObtenerColeccion("ReferenciaObjetoDatosItem")[0]);
            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 2);
        }
예제 #3
0
        public void EvaluarObjetoDatosComplejoRemoverDosItems()
        {
            IObjetoDatos od = Helper.Crear(_tipox);

            Helper.Construir(od, 1, 3);
            IObjetoDatos primerItem  = od.ObtenerColeccion("ReferenciaObjetoDatosItem")[0];
            IObjetoDatos segundoItem = od.ObtenerColeccion("ReferenciaObjetoDatosItem")[1];

            od.RemoverObjetoDatos("ReferenciaObjetoDatosItem", primerItem);
            od.RemoverObjetoDatos("ReferenciaObjetoDatosItem", segundoItem);

            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 1);
        }
        private IMetodoEscritura Crear(IObjetoDatos propietario, IPropiedad propiedad, int indice)
        {
            IMetodoEscritura metodo;
            IObjetoDatos     od;
            int refid;
            int propietarioid;

            if (propiedad.Cardinalidad >= Cardinalidad.Muchos)
            {
                od = propietario.ObtenerColeccion(propiedad)[indice];
            }
            else
            {
                od = propietario.ObtenerObjetoDatos(propiedad);
            }

            refid         = _stack.Obtener(od);
            propietarioid = _stack.Obtener(propietario);

            if (propiedad.Asociacion == Asociacion.Composicion)
            {
                metodo = new MetodoEscrituraReferencia(this, _escritor, od, refid, propietarioid, propiedad);
            }
            else
            {
                metodo = new MetodoEscrituraAsociacion(this, _escritor, propietarioid, propiedad, refid);
                _od.Add(od);
            }

            return(metodo);
        }
        private static IObjetoDatos ResolverReferencia(IObjetoDatos od, string ruta)
        {
            IObjetoDatos referencia = default(IObjetoDatos);
            IPropiedad   propiedad  = null;

            string[] pasos = ruta.Split(new char[] { '.', '[', ']' });
            int      indice;

            propiedad = od.Tipo.ObtenerPropiedad(pasos[0]);

            if (pasos.Length == 1)
            {
                referencia = od.ObtenerObjetoDatos(propiedad);
            }
            else if (int.TryParse(pasos[1], out indice))
            {
                referencia = od.ObtenerColeccion(propiedad)[indice];
            }
            else
            {
                referencia = ResolverReferencia(od, propiedad, pasos[1]);
            }

            return(referencia);
        }
예제 #6
0
        public void EvaluarObjetoDatosComplejoItemsIgualATres()
        {
            IObjetoDatos od = Helper.Crear(_tipox); //ConstruirObjetoDatosComplejo();

            Helper.Construir(od, 1, 3);
            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 3);
        }
        private void EscribirColeccion(IPropiedad propiedad)
        {
            int longitud = _od.ObtenerColeccion(propiedad).Longitud;

            for (int i = 0; i <= (longitud - 1); i++)
            {
                _modelo.Crear(_od, propiedad, i).Escribir();
            }
        }
예제 #8
0
        public static void Construir(IObjetoDatos od, int niveles, int items)
        {
            if (od.Tipo.ContienePropiedad("atributoId"))
            {
                od.EstablecerInteger("atributoId", ++_id);
            }

            Construir(od, od.Tipo.Propiedades, niveles, items);

            if (od.Tipo["ReferenciaObjetoDatos2"] != null)
            {
                od.EstablecerObjetoDatos("ReferenciaObjetoDatos2", _od);
            }

            if (od.Tipo["ReferenciaObjetoDatosItem2"] != null && od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud > 0)
            {
                od.EstablecerObjetoDatos("ReferenciaObjetoDatosItem2", od.ObtenerColeccion("ReferenciaObjetoDatosItem")[0]);
            }
        }
예제 #9
0
        private void CrearObjeto(NodoReferencia nodo)
        {
            IObjetoDatos od        = ((NodoObjeto)nodo.Padre).Objeto.ObjetoDatos;
            IPropiedad   propiedad = nodo.Propiedad;

            // crear nodos hijos
            if (propiedad.Cardinalidad >= Cardinalidad.Muchos)
            {
                CrearObjeto(nodo, od.ObtenerColeccion(propiedad));
            }
            else
            {
                CrearObjeto(nodo, od.ObtenerObjetoDatos(propiedad));
            }
        }
        private static IObjetoDatos ResolverReferencia(IObjetoDatos od, IPropiedad propiedad, string parametro)
        {
            IObjetoDatos referencia = null;

            string[] pasos = parametro.Split(new char[] { '=' });

            if (pasos.GetLength(0) > 1)
            {
                var filtro = from item in od.ObtenerColeccion(propiedad)
                             where referencia.Obtener(pasos[0]).ToString().Equals(pasos[1])
                             select item;

                referencia = filtro.FirstOrDefault();
            }

            return(referencia);
        }
        public void DeshacerCambiosEnObjetoDatosX()
        {
            // arrange
            Log controlador = new Log();
            //FabricaHistorial fabrica = new FabricaHistorial();
            IFabrica     fabrica = new FabricaHistorial(controlador);
            IObjetoDatos od      = fabrica.Crear(HelperTipo.ObtenerTipo2());

            // act
            //ConstruirObjetoDatosComplejo(od, 2);
            //od.CrearObjetoDatos("ReferenciaObjetoDatos");
            //od.CrearObjetoDatos("ReferenciaObjetoDatosItem");
            Helper.Construir(od, 1);

            // deshacer
            controlador.Deshacer();

            Assert.IsNull(od.ObtenerObjetoDatos("ReferenciaObjetoDatos"), "Se esperaba null");
            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 0, "Se esperaba cero.");
        }
        private static void EstablecerAtributoRuta(string ruta, IObjetoDatos od)
        {
            if (od == null)
            {
                return;
            }

            if (od.Tipo.ContienePropiedad("ruta"))
            {
                od.EstablecerString("ruta", ruta);
            }

            foreach (IPropiedad referencia in od.Tipo.Propiedades.Where((item) => !item.Tipo.EsTipoDeDato))
            {
                if (referencia.EsColeccion)
                {
                    EstablecerAtributoRuta(string.Format("{0}/{1}", ruta, referencia.Nombre), od.ObtenerColeccion(referencia));
                }
                else
                {
                    EstablecerAtributoRuta(string.Format("{0}/{1}", ruta, referencia.Nombre), od.ObtenerObjetoDatos(referencia));
                }
            }
        }
예제 #13
0
        public void CrearDiagramaComposicion()
        {
            IObjetoDatos od = HelperDiagrama.CrearObjetoDatosX();

            Helper.Construir(od, 2, 5);
            HelperDiagrama.EstablecerAtributoRuta(od);

            // establecer referencia2
            od.EstablecerObjetoDatos("ReferenciaObjetoDatosItem2", od.ObtenerColeccion("ReferenciaObjetoDatosItem")[0]);

            BuilderDiagrama helper = new BuilderDiagrama();
            Diagrama        diag   = helper.Crear(od);

            IPropiedad prop1 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos");
            IPropiedad prop2 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatosItem");
            IPropiedad prop3 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos2");
            IPropiedad prop4 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatosItem2");

            IObjetoDatos od1   = od.ObtenerObjetoDatos(prop1);
            IObjetoDatos od4   = od.ObtenerObjetoDatos(prop4);
            IObjetoDatos item1 = od.ObtenerColeccion(prop2)[0];
            IObjetoDatos item2 = od.ObtenerColeccion(prop2)[1];
            IObjetoDatos item3 = od.ObtenerColeccion(prop2)[2];


            NodoReferencia nodoprop1 = (NodoReferencia)diag.Root.Nodos[0];
            NodoReferencia nodoprop2 = (NodoReferencia)diag.Root.Nodos[1];
            NodoReferencia nodoprop3 = (NodoReferencia)diag.Root.Nodos[2];
            NodoReferencia nodoprop4 = (NodoReferencia)diag.Root.Nodos[3];

            NodoObjeto nodoobj1 = (NodoObjeto)nodoprop1.Nodos[0];
            NodoObjeto nodoobj4 = (NodoObjeto)nodoprop4.Nodos[0];

            NodoObjeto nodoitem1 = (NodoObjeto)nodoprop2.Nodos[0];
            NodoObjeto nodoitem2 = (NodoObjeto)nodoprop2.Nodos[1];
            NodoObjeto nodoitem3 = (NodoObjeto)nodoprop2.Nodos[2];


            Assert.IsNotNull(diag.Root);
            Assert.AreEqual(od, diag.Root.Objeto.ObjetoDatos);

            Assert.IsNotNull(nodoprop1);
            Assert.IsNotNull(prop1);
            Assert.AreEqual(prop1, nodoprop1.Propiedad);

            Assert.IsNotNull(nodoobj1);
            Assert.IsNotNull(od1);
            Assert.AreEqual(od1, nodoobj1.Objeto.ObjetoDatos);
            Assert.AreEqual("/ReferenciaObjetoDatos", nodoobj1.Objeto.Propietario);

            Assert.IsNotNull(prop3);
            Assert.IsNotNull(nodoprop3);
            Assert.AreEqual(prop3, nodoprop3.Propiedad);

            Assert.IsNotNull(nodoitem1);
            Assert.IsNotNull(item1);
            Assert.AreEqual(item1, nodoitem1.Objeto.ObjetoDatos);
            Assert.AreEqual("/ReferenciaObjetoDatosItem[0]", nodoitem1.Objeto.Propietario);

            Assert.IsNotNull(nodoitem2);
            Assert.IsNotNull(item2);
            Assert.AreEqual(item2, nodoitem2.Objeto.ObjetoDatos);
            Assert.AreEqual("/ReferenciaObjetoDatosItem[1]", nodoitem2.Objeto.Propietario);

            Assert.IsNotNull(nodoitem3);
            Assert.IsNotNull(item3);
            Assert.AreEqual(item3, nodoitem3.Objeto.ObjetoDatos);
            Assert.AreEqual("/ReferenciaObjetoDatosItem[2]", nodoitem3.Objeto.Propietario);

            // comprobar referencia agregacion
            Assert.IsNotNull(prop3);
            Assert.IsNotNull(nodoprop3);
            Assert.AreEqual(prop3, nodoprop3.Propiedad);

            Assert.AreEqual(od4, item1);
            Assert.IsNotNull(nodoobj4);
            Assert.AreEqual(item1, nodoobj4.Objeto.ObjetoDatos);
            Assert.AreEqual("/ReferenciaObjetoDatosItem[0]", nodoobj4.Objeto.Propietario);
        }
        public void RecuperarInstantaneaEnObjetoDatosX()
        {
            // arrange
            Log          log     = new Log();
            IFabrica     fabrica = new FabricaHistorial(log);
            IObjetoDatos od      = fabrica.Crear(HelperTipo.ObtenerTipo2());

            // act
            var instantanea1 = log.CrearInstantanea();

            od.CrearObjetoDatos("ReferenciaObjetoDatos");

            var instantanea2 = log.CrearInstantanea();

            od.CrearObjetoDatos("ReferenciaObjetoDatosItem");

            var instantanea3 = log.CrearInstantanea();

            od.CrearObjetoDatos("ReferenciaObjetoDatosItem");

            var instantanea4 = log.CrearInstantanea();

            od.CrearObjetoDatos("ReferenciaObjetoDatosItem[0]/ReferenciaObjetoDatos");

            var instantanea5 = log.CrearInstantanea();

            od.CrearObjetoDatos("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos");

            var valorBoolean = od.Obtener("atributoBoolean");
            var valorByte    = od.Obtener("atributoByte");

            var instantanea6 = log.CrearInstantanea();

            od.EstablecerBoolean("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoBoolean", true);
            od.EstablecerByte("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoByte", byte.MaxValue);

            Assert.AreEqual(od.ObtenerBoolean("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoBoolean"), true);
            Assert.AreEqual(od.ObtenerByte("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoByte"), byte.MaxValue);

            // recuperar
            log.Recuperar(instantanea6);

            Assert.AreEqual(od.ObtenerBoolean("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoBoolean"), valorBoolean);
            Assert.AreEqual(od.ObtenerByte("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos/atributoByte"), valorByte);


            // recuperar
            log.Recuperar(instantanea5);

            Assert.IsNull(od.Obtener("ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos"));

            // recuperar
            log.Recuperar(instantanea4);

            Assert.IsNull(od.Obtener("ReferenciaObjetoDatosItem[0]/ReferenciaObjetoDatos"));

            // recuperar
            log.Recuperar(instantanea3);

            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 1);

            // recuperar
            log.Recuperar(instantanea2);

            Assert.AreEqual(od.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 0);

            // recuperar
            log.Recuperar(instantanea1);

            Assert.IsNull(od.Obtener("ReferenciaObjetoDatos"));
        }
        public static void Comparar(IObjetoDatos od1, IObjetoDatos od2)
        {
            Assert.AreEqual(od1.ObtenerInteger("atributoId"), od2.ObtenerInteger("atributoId"));
            Assert.AreEqual(od1.ObtenerByte("atributoBoolean"), od2.ObtenerByte("atributoBoolean"));
            Assert.AreEqual(od1.ObtenerByte("atributoByte"), od2.ObtenerByte("atributoByte"));
            Assert.AreEqual(od1.ObtenerChar("atributoChar"), od2.ObtenerChar("atributoChar"));
            Assert.AreEqual(od1.ObtenerDateTime("atributoDateTime").Date, od2.ObtenerDateTime("atributoDateTime").Date);
            Assert.AreEqual(od1.ObtenerDateTime("atributoDateTime").Hour, od2.ObtenerDateTime("atributoDateTime").Hour);
            Assert.AreEqual(od1.ObtenerDateTime("atributoDateTime").Minute, od2.ObtenerDateTime("atributoDateTime").Minute);
            Assert.AreEqual(od1.ObtenerDateTime("atributoDateTime").Second, od2.ObtenerDateTime("atributoDateTime").Second);
            Assert.AreEqual(od1.ObtenerDecimal("atributoDecimal"), od2.ObtenerDecimal("atributoDecimal"));
            Assert.AreEqual(od1.ObtenerDouble("atributoDouble"), od2.ObtenerDouble("atributoDouble"));
            Assert.AreEqual(od1.ObtenerFloat("atributoFloat"), od2.ObtenerFloat("atributoFloat"));
            Assert.AreEqual(od1.ObtenerInteger("atributoInteger"), od2.ObtenerInteger("atributoInteger"));
            Assert.AreEqual(od1.ObtenerLong("atributoLong"), od2.ObtenerLong("atributoLong"));
            Assert.AreEqual(od1.ObtenerSByte("atributoSByte"), od2.ObtenerSByte("atributoSByte"));
            Assert.AreEqual(od1.ObtenerShort("atributoShort"), od2.ObtenerShort("atributoShort"));
            Assert.AreEqual(od1.ObtenerString("atributoString"), od2.ObtenerString("atributoString"));
            Assert.AreEqual(od1.ObtenerUShort("atributoUShort"), od2.ObtenerUShort("atributoUShort"));
            Assert.AreEqual(od1.ObtenerUInteger("atributoUInteger"), od2.ObtenerUInteger("atributoUInteger"));
            Assert.AreEqual(od1.ObtenerULong("atributoULong"), od2.ObtenerULong("atributoULong"));

            Assert.AreEqual(od1.ObtenerObjetoDatos("ReferenciaObjetoDatos") != null, od2.ObtenerObjetoDatos("ReferenciaObjetoDatos") != null);
            Assert.AreEqual(od1.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, od2.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud);

            if (od1.ObtenerObjetoDatos("ReferenciaObjetoDatos") != null && od2.ObtenerObjetoDatos("ReferenciaObjetoDatos") != null)
            {
                Comparar(od1.ObtenerObjetoDatos("ReferenciaObjetoDatos"), od2.ObtenerObjetoDatos("ReferenciaObjetoDatos"));
            }

            for (int i = 0; i < od1.ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud; i++)
            {
                Comparar(od1.ObtenerColeccion("ReferenciaObjetoDatosItem")[i], od2.ObtenerColeccion("ReferenciaObjetoDatosItem")[i]);
            }



            // compracion tipo2
            if (od1.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos2") == null)
            {
                return;
            }

            Assert.AreEqual(od1.ObtenerObjetoDatos("ReferenciaObjetoDatos2") != null, od2.ObtenerObjetoDatos("ReferenciaObjetoDatos2") != null);

            if (od1.ObtenerObjetoDatos("ReferenciaObjetoDatos2") != null && od2.ObtenerObjetoDatos("ReferenciaObjetoDatos2") != null)
            {
                Comparar(od1.ObtenerObjetoDatos("ReferenciaObjetoDatos2"), od2.ObtenerObjetoDatos("ReferenciaObjetoDatos2"));
            }



            // comparacion tipo 3
            if (od1.Tipo.ObtenerPropiedad("ReferenciaObjetoDatosItem2") == null)
            {
                return;
            }

            Assert.AreEqual(od1.ObtenerObjetoDatos("ReferenciaObjetoDatosItem2") != null, od2.ObtenerObjetoDatos("ReferenciaObjetoDatosItem2") != null);

            if (od1.ObtenerObjetoDatos("ReferenciaObjetoDatosItem2") != null)
            {
                Assert.AreEqual(od1.ObtenerObjetoDatos("ReferenciaObjetoDatosItem2"), od1.ObtenerObjetoDatos("ReferenciaObjetoDatosItem[0]"));
                Assert.AreEqual(od2.ObtenerObjetoDatos("ReferenciaObjetoDatosItem2"), od2.ObtenerObjetoDatos("ReferenciaObjetoDatosItem[0]"));
            }
        }