private void CrearRoot(IObjetoDatos od) { ObjetoMap omap = _heap.Obtener(od); Root root = new Root(omap); _diag.Root = root; }
public ObjetoMap Crear(IObjetoDatos od) { ObjetoMap omap; if (!_maps.ContainsKey(od)) { omap = new ObjetoMap(od, ++_id); Agregar(omap); } else { omap = _maps[od]; } return(omap); }
public NodoObjeto(NodoReferencia padre, ObjetoMap omap) : base(padre) { Objeto = omap; }
protected NodoObjeto(ObjetoMap omap) { Objeto = omap; }
private void Agregar(ObjetoMap oma) { _maps.Add(oma.ObjetoDatos, oma); }
private void CrearObjeto(NodoReferencia nodo, IObjetoDatos od, int indice) { if (od == null) { return; } ObjetoMap omap = _heap.Obtener(od); if (omap == null) { return; } // crear nodo NodoObjeto nodoobj = new NodoObjeto(nodo, omap); nodo.Agregar(nodoobj); // establecer valores string ruta = ((NodoObjeto)nodo.Padre).Ruta; bool composicion = (nodo.Propiedad.Asociacion == Asociacion.Composicion); if (nodo.Propiedad.Cardinalidad >= Cardinalidad.Muchos) { ruta = string.Format("{0}/{1}[{2}]", ruta, nodo.Propiedad.Nombre, indice); } else { ruta = string.Format("{0}/{1}", ruta, nodo.Propiedad.Nombre); } nodoobj.Ruta = ruta; nodoobj.Indice = indice; // determinar si debe resolverse bool resol = (composicion || _resol) && string.IsNullOrEmpty(omap.Propietario); // establecer referencia agregacion if (!resol) { // le referencia agregacion es proxy, hasta que se resuelva nodoobj.EsProxy = true; // se mantiene la primera referencia if (!_agre.ContainsKey(od)) { _agre.Add(od, nodoobj); } return; } // establecer propietario omap.Propietario = ruta; // eliminar referencia resuelta if (_agre.ContainsKey(od)) { _agre.Remove(od); } // crear nodos hijos CrearPropiedad(nodoobj); }