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); }
public void EvaluarObjetoDatosComplejoReferenciaItemsIgualACero() { IObjetoDatos od = Helper.Crear(_tipox); Helper.Construir(od, 1, 0); Assert.AreEqual(od.ObtenerObjetoDatos("ReferenciaObjetoDatos").ObtenerColeccion("ReferenciaObjetoDatosItem").Longitud, 0); }
private void ActualizarPropiedad(IObjetoDatos od, IPropiedad propiedad) { if (propiedad.Tipo.EsTipoDeDato || propiedad.Asociacion == Asociacion.Agregacion || od.ObtenerObjetoDatos(propiedad) == null) { ObjetoDatos.Establecer(propiedad, od.Obtener(propiedad)); } else if (propiedad.Asociacion == Asociacion.Composicion) { CrearObservador(od.ObtenerObjetoDatos(propiedad), ObjetoDatos.CrearObjetoDatos(propiedad)); } }
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)); } }
public void EvaluarObjetoDatosPathReferenciaDiferenteNulo() { string ruta1 = "ReferenciaObjetoDatos"; string ruta2 = "ReferenciaObjetoDatos/ReferenciaObjetoDatos"; string ruta3 = "ReferenciaObjetoDatos/ReferenciaObjetoDatos/ReferenciaObjetoDatos"; string ruta4 = "ReferenciaObjetoDatos"; string ruta5 = "ReferenciaObjetoDatos/ReferenciaObjetoDatosItem[1]"; string ruta6 = "ReferenciaObjetoDatos/ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatos[1]"; string ruta7 = "ReferenciaObjetoDatosItem[0]"; string ruta8 = "ReferenciaObjetoDatosItem[1]/ReferenciaObjetoDatosItem[2]"; string ruta9 = "ReferenciaObjetoDatosItem[2]/ReferenciaObjetoDatosItem[2]/ReferenciaObjetoDatos[2]"; IObjetoDatos od = Helper.Crear(_tipox); Helper.Construir(od, 3, 3); IObjetoDatos item1 = od.ObtenerObjetoDatos(ruta1); IObjetoDatos item2 = od.ObtenerObjetoDatos(ruta2); IObjetoDatos item3 = od.ObtenerObjetoDatos(ruta3); IObjetoDatos item4 = od.ObtenerObjetoDatos(ruta4); IObjetoDatos item5 = od.ObtenerObjetoDatos(ruta5); IObjetoDatos item6 = od.ObtenerObjetoDatos(ruta6); IObjetoDatos item7 = od.ObtenerObjetoDatos(ruta7); IObjetoDatos item8 = od.ObtenerObjetoDatos(ruta8); IObjetoDatos item9 = od.ObtenerObjetoDatos(ruta9); Assert.IsNotNull(item1, $"Se esperaba un valor. ruta={ruta1}"); Assert.IsNotNull(item2, $"Se esperaba un valor. ruta={ruta2}"); Assert.IsNotNull(item3, $"Se esperaba un valor. ruta={ruta3}"); Assert.IsNotNull(item4, $"Se esperaba un valor. ruta={ruta4}"); Assert.IsNotNull(item5, $"Se esperaba un valor. ruta={ruta5}"); Assert.IsNotNull(item6, $"Se esperaba un valor. ruta={ruta6}"); Assert.IsNotNull(item7, $"Se esperaba un valor. ruta={ruta7}"); Assert.IsNotNull(item8, $"Se esperaba un valor. ruta={ruta8}"); Assert.IsNotNull(item9, $"Se esperaba un valor. ruta={ruta9}"); }
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)); } } }
public void CrearDiagramaAgregacion() { IObjetoDatos od = HelperDiagrama.CrearObjetoDatosX(); Helper.Construir(od, 2, 5); HelperDiagrama.EstablecerAtributoRuta(od); ITipo tipoagr = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos2").Tipo; IObjetoDatos odagr = Helper.Crear(tipoagr); IObjetoDatos odagr2 = Helper.Crear(tipoagr); odagr.CrearObjetoDatos("ReferenciaObjetoDatos"); odagr.EstablecerObjetoDatos("ReferenciaObjetoDatos2", odagr2); odagr2.EstablecerObjetoDatos("ReferenciaObjetoDatos2", odagr); // establecer referencia agregacion apuntando al contenedor (odgr) od.EstablecerObjetoDatos("ReferenciaObjetoDatos2", odagr); BuilderDiagrama helper = new BuilderDiagrama(); Diagrama diag = helper.Crear(od); NodoReferencia nodoprop1 = (NodoReferencia)diag.Root.Nodos[0]; NodoReferencia nodoprop3 = (NodoReferencia)diag.Root.Nodos[2]; NodoObjeto nodoobj1 = (NodoObjeto)nodoprop1.Nodos[0]; NodoObjeto nodoobj3 = (NodoObjeto)nodoprop3.Nodos[0]; IPropiedad prop1 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos"); IPropiedad prop3 = od.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos2"); IObjetoDatos obj1 = od.ObtenerObjetoDatos(prop1); IObjetoDatos obj3 = od.ObtenerObjetoDatos(prop3); Assert.IsNotNull(nodoprop1); Assert.IsNotNull(nodoprop3); Assert.IsNotNull(prop1); Assert.IsNotNull(prop3); Assert.IsNotNull(obj1); Assert.IsNotNull(obj3); Assert.AreEqual(prop1, nodoprop1.Propiedad); Assert.AreEqual(prop3, nodoprop3.Propiedad); Assert.AreEqual(obj1, nodoobj1.Objeto.ObjetoDatos); Assert.AreEqual(obj3, nodoobj3.Objeto.ObjetoDatos); Assert.AreEqual("/ReferenciaObjetoDatos", nodoobj1.Objeto.Propietario); Assert.AreEqual("/ReferenciaObjetoDatos2", nodoobj3.Objeto.Propietario); nodoprop1 = (NodoReferencia)nodoobj3.Nodos[0]; nodoprop3 = (NodoReferencia)nodoobj3.Nodos[1]; nodoobj1 = (NodoObjeto)nodoprop1.Nodos[0]; nodoobj3 = (NodoObjeto)nodoprop3.Nodos[0]; prop1 = odagr.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos"); prop3 = odagr.Tipo.ObtenerPropiedad("ReferenciaObjetoDatos2"); obj1 = odagr.ObtenerObjetoDatos(prop1); obj3 = odagr.ObtenerObjetoDatos(prop3); Assert.IsNotNull(nodoprop1); Assert.IsNotNull(nodoprop3); Assert.IsNotNull(prop1); Assert.IsNotNull(prop3); Assert.IsNotNull(obj1); Assert.IsNotNull(obj3); Assert.AreEqual(prop1, nodoprop1.Propiedad); Assert.AreEqual(prop3, nodoprop3.Propiedad); Assert.AreEqual(obj1, nodoobj1.Objeto.ObjetoDatos); Assert.AreEqual(odagr2, nodoobj3.Objeto.ObjetoDatos); Assert.AreEqual("/ReferenciaObjetoDatos2/ReferenciaObjetoDatos", nodoobj1.Objeto.Propietario); Assert.AreEqual("/ReferenciaObjetoDatos2/ReferenciaObjetoDatos2", nodoobj3.Objeto.Propietario); // verificar la referencia odgr2.ReferenciaObjetoDatos2 => odagr nodoprop1 = (NodoReferencia)nodoobj3.Nodos[0]; nodoobj1 = (NodoObjeto)nodoprop1.Nodos[0]; obj1 = odagr2.ObtenerObjetoDatos("ReferenciaObjetoDatos2"); Assert.AreEqual(odagr, obj1); Assert.AreEqual("/ReferenciaObjetoDatos2", nodoobj1.Objeto.Propietario); }
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 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]")); } }