public override void Agregar(Nodo nodo)
        {
            if (nodo == null || typeof(NodoObjeto) != nodo.GetType())
            {
                return;
            }

            NodoObjeto nodoobj = (NodoObjeto)nodo;
            string     ruta    = string.Empty;
            int        indice  = Nodos.Count;

            if (Propiedad.Asociacion == Asociacion.Composicion)
            {
                ruta = string.Format("{0}/{1}[{2}]", ((NodoObjeto)Padre).Ruta, Propiedad.Nombre, indice);
            }
            else
            {
                ruta = string.Format("{0}/{1}", ((NodoObjeto)Padre).Ruta, Propiedad.Nombre);
            }

            nodoobj.Ruta   = ruta;
            nodoobj.Indice = indice;

            base.Agregar(nodo);
        }
Beispiel #2
0
 private void CrearPropiedad(NodoObjeto nodo)
 {
     foreach (IPropiedad prop in nodo.Objeto.ObjetoDatos.Tipo.Propiedades)
     {
         CrearPropiedad(nodo, prop);
     }
 }
Beispiel #3
0
        private void ResolverNodo(NodoObjeto nodo)
        {
            // resolver referencias agregacion
            if (string.IsNullOrEmpty(nodo.Objeto.Propietario))
            {
                nodo.Objeto.Propietario = nodo.Ruta;
                nodo.EsProxy            = false;
            }

            // resolver anidamiento
            CrearPropiedad(nodo);
        }
Beispiel #4
0
        private void ResolverNodos()
        {
            _resol = true;

            NodoObjeto[] nodos = new NodoObjeto[_agre.Count];
            _agre.Values.CopyTo(nodos, 0);

            foreach (NodoObjeto nodo in nodos)
            {
                ResolverNodo(nodo);
            }
        }
Beispiel #5
0
        private void CrearPropiedad(NodoObjeto nodo, IPropiedad propiedad)
        {
            if (propiedad.Tipo.EsTipoDeDato)
            {
                return;
            }

            IObjetoDatos od = nodo.Objeto.ObjetoDatos;

            if (!od.Establecido(propiedad))
            {
                return;
            }

            // crear nodo
            NodoReferencia nodoprop = new NodoReferencia(nodo, propiedad);

            nodo.Agregar(nodoprop);

            // crear nodos hijos
            CrearObjeto(nodoprop);
        }
 public NodoReferencia(NodoObjeto padre, IPropiedad propiedad)
     : base(padre)
 {
     Propiedad = propiedad;
 }
Beispiel #7
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);
        }