예제 #1
0
        private void CrearRoot(IObjetoDatos od)
        {
            ObjetoMap omap = _heap.Obtener(od);
            Root      root = new Root(omap);

            _diag.Root = root;
        }
예제 #2
0
        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;
 }
예제 #5
0
 private void Agregar(ObjetoMap oma)
 {
     _maps.Add(oma.ObjetoDatos, oma);
 }
예제 #6
0
        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);
        }